import { Logger } from '@nestjs/common'; export interface RequestLogContext { requestId: string; trackingCode?: string; provider?: string; inquiryType?: string; durationMs?: number; success?: boolean; } /** * Structured console logging for inquiry lifecycle events. * Complements MongoDB persistence in LoggingModule. */ export class RequestLogger { private readonly logger: Logger; constructor(context: string) { this.logger = new Logger(context); } logStart(ctx: RequestLogContext, message: string): void { this.logger.log(this.format(ctx, message)); } logSuccess(ctx: RequestLogContext, message: string): void { this.logger.log(this.format({ ...ctx, success: true }, message)); } logFailure(ctx: RequestLogContext, message: string, error?: unknown): void { this.logger.error( this.format({ ...ctx, success: false }, message), error instanceof Error ? error.stack : undefined, ); } private format(ctx: RequestLogContext, message: string): string { const parts = [ `requestId=${ctx.requestId}`, ctx.trackingCode ? `trackingCode=${ctx.trackingCode}` : null, ctx.provider ? `provider=${ctx.provider}` : null, ctx.inquiryType ? `inquiryType=${ctx.inquiryType}` : null, ctx.durationMs !== undefined ? `durationMs=${ctx.durationMs}` : null, ctx.success !== undefined ? `success=${ctx.success}` : null, `msg=${message}`, ].filter(Boolean); return parts.join(' | '); } }