본문 바로가기

Programming Language/TypeScript

[NestJS] Log 모듈 - winston / winston-daily-rotate-file 예제

 

winston과 winston-daily-rotate-file을 사용하기 앞서서 npm 패키지에서 먼저 설치를 해주시기 바랍니다.

npm 공식 사이트에서 winston을 검색하시면 사용 메뉴얼이 자세하게 나옵니다.

https://www.npmjs.com/package/winston

https://www.npmjs.com/package/winston-daily-rotate-file

 

 

 

NestJS 프레임워크에서 app.module.ts 파일에 아래와같이 작성합니다.

    WinstonModule.forRoot({
      transports: [
        new winston.transports.Console({
          format: winston.format.combine(
            winston.format.timestamp(),
            winston.format.ms(),
            nestWinstonModuleUtilities.format.nestLike(),
          ),
        }),
        new (require('winston-daily-rotate-file'))({
          format: winston.format.combine(
            winston.format.timestamp({
              format: 'YYYY-MM-DD HH:mm:ss',
            }),
            winston.format.printf(
              (info) =>
                `[${info.timestamp}] ${process.env.APP_ENV}.${info.level}: ${info.message}`,
            ),
          ),
          filename: 'responder-logs/%DATE%.log',
          datePattern: 'YYYY-MM-DD',
          zippedArchive: true,
          maxSize: '20m',
          maxFiles: '14d',
        }),
      ],
    }),

 

 

winston 포맷은 timestamp()와 ms()으로 설정을 해줍니다.

날짜 시간을 포함해주고 초는 마이크로시간으로 로그가 콘솔에 찍히도록 설정해줍니다.

winston-daily-rotate-file에서는 log를 찍은것을 모두 일별로 filename에 설정되어있는 path에 자동 저장됩니다.

datePattern은 저장되는 데이터 포맷 형식이라고 생각하시면 됩니다.

maxSize는 20m으로 세팅하고 저장 기간은 14일로 잡아줍니다.

winston.foramt.combine에는 포맷형식을 년월일 시간으로 세팅을해주고 이외에 세팅되는것은 printf로 원하는 패턴으로 세팅하였습니다. ( 이 패턴으로 설정한 이유는 회사내에서 엘라스틱 서치 키바나 세팅할때 대괄호로 컬럼별로 저장되도록 세팅을 해놓았기때문입니다. )