필요한 패키지 설치
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
반응형
'Nodejs > NestJS' 카테고리의 다른 글
[NestJS]Swagger 설정 및 @UseInterceptors (ClassSerializerInterceptor) 적용하기 09 (0) | 2024.05.27 |
---|---|
[NestJS] Lifecycle global filter, pipes, exception 설정하기 08 (0) | 2024.05.27 |
[NestJS] 파일 업로드 처리 로컬 & AWS S3 06 (0) | 2024.05.27 |
[NestJS] fastify @UploadedFile, @UploadedFiles 커스텀 만들기 05 (0) | 2024.05.27 |
[NestJS] fastify middleware 추가하기(@fastify/multipart) 04 (0) | 2024.05.27 |