개발/NestJs
4. 로그
희묭
2023. 10. 20. 11:46
4. 로그
1) 설치
yarn add nest-winston
yarn add winston
yarn add winston-daily-rotate-file
2) 설정
로그레벨은 아래와 같다
{
error: 0,
warn: 1,
info: 2,
http: 3,
verbose: 4,
debug: 5,
silly: 6
}
아래처럼 main.ts에 로그저장형태와 로그레벨 등을 설정한다
import { utilities, WinstonModule } from 'nest-winston';
import { format, transports } from 'winston';
import 'winston-daily-rotate-file';
const app = await NestFactory.create(AppModule, {
logger: WinstonModule.createLogger({
transports: [
new transports.DailyRotateFile({
level: process.env.NODE_ENV === 'dev' ? 'info' : 'silly',
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
format.printf(
(info) =>
`[${info.timestamp}] ${process.env.APP_ENV}.${info.level}: ${info.message}`,
),
),
filename: 'logs/%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
}),
new transports.Console({
level: process.env.NODE_ENV === 'dev' ? 'info' : 'silly',
format: format.combine(
format.timestamp(),
utilities.format.nestLike('MyApp', {
prettyPrint: true,
}),
),
}),
],
}),
});
3) 사용
모듈에 아래와같이 프로바이더제공
main에 기본 로거를 대체했기에 기본로거를 쓰듯이 쓰면됨
import { Logger, Module } from '@nestjs/common';
providers: [Logger]
아래와같이 DI 주입받음
constructor(
@Inject(Logger) private readonly logger: LoggerService,
) {}
this.logger.log('ttt');