검색 가능한 필드와 correlation id로 요청 흐름을 추적합니다.
운영 로그는 문자열 조각보다 event, requestId, route, duration, result 같은 구조화 필드를 사용합니다. 개인정보와 token은 마스킹하거나 기록하지 않습니다.
로그 수준을 목적에 맞게 사용하고 같은 오류를 여러 계층에서 중복 기록하지 않습니다.
request id를 downstream 호출에 전달해 분산 흐름을 연결합니다.
요청 header와 body 전체를 기록하면 인증정보와 개인정보가 로그에 남을 수 있습니다.
로컬 프로젝트에서 확인해보세요Interceptor로 durationMs와 status를 기록하세요.
import "reflect-metadata";
import { Controller, Get, Logger, Module } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
@Controller()
class AppController {
private readonly logger = new Logger(AppController.name);
@Get() home() {
const requestId = crypto.randomUUID();
this.logger.log({ event: "course.list", requestId, count: 2 });
return { requestId, items: ["NestJS", "Testing"] };
}
}
@Module({ controllers: [AppController] })
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule, { logger: ["log", "warn", "error"] });
await app.listen(4173, "0.0.0.0");
}
bootstrap();