forked from Shared/esg
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
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(' | ');
|
|
}
|
|
}
|