본문 바로가기

Nodejs/NestJS

[NestJS] nest-winston 사용하기 07

필요한 패키지 설치

yarn add nest-winston winston winston-daily-rotate-file

 

 

winston-daily 옵션 만들고, winstonOption 만들고 nest-winston으로 WinstonModule화 하고 내장 logger에 설정하기

import { WinstonModule, utilities } from "nest-winston";
import * as winston from "winston";
import * as winstonDaily from "winston-daily-rotate-file";

const dailyOption = (level: string, module?: string) => {
  const dirname = module ? `./logs/${module}/${level}` : `./logs/${level}`;
  return {
    level,
    datePattern: "YYYY-MM-DD",
    dirname,
    filename: `%DATE%.${level}.log`,
    maxFiles: 30,
    zippedArchive: true,
    format: winston.format.combine(winston.format.timestamp(), utilities.format.nestLike(process.env.NODE_ENV, { colors: false, prettyPrint: true })),
  };
};

const winstonOptions = (module?: string) => ({
  transports: [
    new winston.transports.Console({
      level: process.env.NODE_ENV === "production" ? "http" : "silly",
      format: winston.format.combine(
        winston.format.timestamp(),
        utilities.format.nestLike(process.env.NODE_ENV, { colors: true, prettyPrint: true })
      ),
    }),
    new winstonDaily(dailyOption("log", module)),
    new winstonDaily(dailyOption("info", module)),
    new winstonDaily(dailyOption("warn", module)),
    new winstonDaily(dailyOption("error", module)),
  ],
});
export const winstonLogger = WinstonModule.createLogger(winstonOptions());

만약에 로그를 모듈별로 쪼개고 싶다면, module의 이름을 넣으면 됩니다.

ex) winstonOptions("typeorm") 이렇게 만들고 typeorm 로그를 해당 로그라고 factory 설정해주면 됨.

 

import { winstonLogger } from "./logger/winston.utils";

const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter(), { logger: winstonLogger });

 

실제로 사용할 때, DI 하는것 아니고, new 하는 거임

import { Logger } from "@nestjs/common";

export class AppController {
  private readonly logger = new Logger(AppController.name);
...
}

사용하는 Logger도 winston 아니고, nest/common에 있는 Logger를 사용하는 것임.

 

현재까지 코드 보기: https://github.com/close852/nestjs-toy/tree/07

반응형