Documentation | NestJS - A progressive Node.js framework

GitHub - winstonjs/winston: A logger for just about everything.

로거 포맷 커스터마이징, 다중 전송(transports), 서비스 통합, 그리고 요청별 로깅을 포함한 고급 사용법을 다룹니다.


winston 설치

패키지 설치

winston과 NestJS에서 통합을 지원하는 winston 관련 패키지를 설치합니다.

pnpm add winston winston-nest

Winston 로거 설정

winston의 로거 설정 파일을 만들어 포맷, 레벨, 전송 등을 정의합니다.

파일 구조

src/logger/winston.config.ts 파일을 생성합니다.

winston.config.ts

import { format, transports } from 'winston';

export const winstonConfig = {
  level: process.env.LOG_LEVEL || 'info',
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.printf(({ level, message, timestamp, context }) => {
      return `[${timestamp}] [${level.toUpperCase()}] ${context ? `[${context}] ` : ''}${message}`;
    }),
  ),
  transports: [
    new transports.Console({
      format: format.combine(
        format.colorize(),
        format.printf(({ level, message, timestamp, context }) => {
          return `[${timestamp}] [${level}] ${context ? `[${context}] ` : ''}${message}`;
        }),
      ),
    }),
    new transports.File({ filename: 'logs/application.log', level: 'info' }),
    new transports.File({ filename: 'logs/error.log', level: 'error' }),
  ],
};

NestJS에 winston 통합

AppModule에서 로거 등록

NestJS의 로거를 nest-winston으로 교체합니다.

import { Module } from '@nestjs/common';
import { WinstonModule } from 'nest-winston';
import { winstonConfig } from './logger/winston.config';

@Module({
  imports: [
     **WinstonModule.forRoot(winstonConfig)**,
  ],
})
export class AppModule {}