diff --git a/src/common/logger/logger.module.ts b/src/common/logger/logger.module.ts index b68decd..3b155e8 100644 --- a/src/common/logger/logger.module.ts +++ b/src/common/logger/logger.module.ts @@ -2,6 +2,7 @@ import { Global, Module } from '@nestjs/common'; import { LoggerModule as PinoLoggerModule } from 'nestjs-pino'; import { Request } from 'express'; import { AppLoggerService } from './pino-logger.service'; +import { v4 } from 'uuid'; const isDevelopment = process.env.NODE_ENV === 'development'; @@ -11,6 +12,7 @@ const isDevelopment = process.env.NODE_ENV === 'development'; PinoLoggerModule.forRoot({ pinoHttp: { level: isDevelopment ? 'debug' : 'info', + genReqId: (req: Request) => req.headers['x-request-id'] ?? v4(), transport: isDevelopment ? { target: 'pino-pretty', diff --git a/src/modules/call/webhooks/jitsi/jitsi-webhook.controller.ts b/src/modules/call/webhooks/jitsi/jitsi-webhook.controller.ts index 153339d..b799fc0 100644 --- a/src/modules/call/webhooks/jitsi/jitsi-webhook.controller.ts +++ b/src/modules/call/webhooks/jitsi/jitsi-webhook.controller.ts @@ -69,8 +69,11 @@ export class JitsiWebhookController { break; default: - this.logger.log( - `Ignoring unhandled event type: ${payload.eventType}`, + this.logger.warn( + { + eventType: payload.eventType, + }, + 'Ignoring unhandled event type', ); break; } @@ -78,10 +81,7 @@ export class JitsiWebhookController { return { success: true }; } catch (error: unknown) { if (error instanceof Error) { - this.logger.error( - `Error processing webhook event: ${error.message}`, - error.stack, - ); + this.logger.error({ error }, 'Error processing webhook event'); } throw new BadRequestException(`Error processing webhook event`); } diff --git a/src/modules/call/webhooks/jitsi/jitsi-webhook.service.ts b/src/modules/call/webhooks/jitsi/jitsi-webhook.service.ts index 42d01d4..2bd4379 100644 --- a/src/modules/call/webhooks/jitsi/jitsi-webhook.service.ts +++ b/src/modules/call/webhooks/jitsi/jitsi-webhook.service.ts @@ -8,17 +8,12 @@ import { JitsiParticipantLeftWebHookPayload } from './interfaces/JitsiParticipan export class JitsiWebhookService { private readonly logger = new Logger(JitsiWebhookService.name); private readonly webhookSecret: string | undefined; - private readonly participantLeftEnabled: boolean; constructor( private readonly configService: ConfigService, private readonly roomService: RoomService, ) { this.webhookSecret = this.configService.get('jitsiWebhook.secret'); - this.participantLeftEnabled = this.configService.get( - 'jitsiWebhook.events.participantLeft', - true, - ); } /** @@ -31,7 +26,8 @@ export class JitsiWebhookService { ): Promise { try { this.logger.log( - `Handling PARTICIPANT_LEFT event for participant: ${payload.data.id}`, + { idempotencyKey: payload.idempotencyKey }, + 'Handling PARTICIPANT_LEFT event', ); const roomId = this.extractRoomId(payload.fqn); @@ -51,7 +47,7 @@ export class JitsiWebhookService { const room = await this.roomService.getRoomByRoomId(roomId); if (!room) { - this.logger.warn(`Room with ID ${roomId} not found`); + this.logger.warn({ roomId }, 'Room not found'); return; } @@ -61,10 +57,11 @@ export class JitsiWebhookService { await this.roomService.removeUserFromRoom(participantId, room); this.logger.log( - `Successfully processed PARTICIPANT_LEFT event for participant ${participantId} in room ${roomId}`, + { participantId, roomId }, + 'Successfully processed PARTICIPANT_LEFT event', ); - } catch (error) { - this.logger.error('Error handling PARTICIPANT_LEFT event', error); + } catch (error: unknown) { + this.logger.error({ error }, 'Error handling PARTICIPANT_LEFT event'); throw error; } }