From 8e62ad8b4ed8b62f3a65e34d30ce12059da7c955 Mon Sep 17 00:00:00 2001 From: Andrii Arsenin Date: Wed, 8 Apr 2026 12:57:28 +0300 Subject: [PATCH] style(logging): clean up log format with ISO8601 timestamps and no PID prefix - override getTimestamp() to emit ISO 8601 instead of locale string - override formatMessage() to drop PID prefix and level padding - enable timestamp: true so timestampDiff (+Nms) appears on each line - pass TraceLogger instance to NestFactory so framework logs use same format --- src/common/trace-logger.ts | 23 ++++++++++++++++++++++- src/main.ts | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/common/trace-logger.ts b/src/common/trace-logger.ts index 594badf..a356ba9 100644 --- a/src/common/trace-logger.ts +++ b/src/common/trace-logger.ts @@ -1,7 +1,28 @@ -import { ConsoleLogger } from '@nestjs/common'; +import { ConsoleLogger, ConsoleLoggerOptions, LogLevel } from '@nestjs/common'; import { getTraceId } from './trace-context'; export class TraceLogger extends ConsoleLogger { + constructor(context?: string, options: ConsoleLoggerOptions = {}) { + super(context as string, options); + } + + protected override getTimestamp(): string { + return new Date().toISOString(); + } + + protected override formatMessage( + logLevel: LogLevel, + message: unknown, + _pidMessage: string, + _formattedLogLevel: string, + contextMessage: string, + timestampDiff: string, + ): string { + const output = this.stringifyMessage(message, logLevel); + const level = this.colorize(logLevel.toUpperCase(), logLevel); + return `${this.getTimestamp()} ${level} ${contextMessage}${output}${timestampDiff}\n`; + } + protected override formatContext(context: string): string { const traceId = getTraceId(); const traced = traceId ? `${context}:${traceId}` : context; diff --git a/src/main.ts b/src/main.ts index 33f7dab..b1aa61f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,7 +11,7 @@ import { name as pkgName, version as pkgVersion } from '../package.json'; async function bootstrap() { const logger = new TraceLogger('Bootstrap'); - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { logger: new TraceLogger('Bootstrap', { timestamp: true }) }); app.useGlobalPipes(new ValidationPipe({ transform: true })); app.useGlobalFilters(new HttpExceptionFilter());