Contents
WistonWiston
winston 로거 패키징을 사용한 로그 기록 방법
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeORMConfig } from './configs/typeorm.config';
import { BoardsModule } from './boards/boards.module';
import { WinstonLoggerModule } from './configs/winston/logger.module';
@Module({
imports: [
BoardsModule,
TypeOrmModule.forRoot(typeORMConfig),
WinstonLoggerModule
],
})
export class AppModule {}
./configs/winston/logger.module.ts
import { Module, Global } from '@nestjs/common';
import { WinstonModule } from 'nest-winston';
import { loggerInfo } from './winston-config';
@Global()
@Module({
imports: [WinstonModule.forRoot(loggerInfo)],
})
export class WinstonLoggerModule {}
./configs/winston/winston-config.ts
import { utilities, WinstonModule } from 'nest-winston';
import * as winstonDaily from 'winston-daily-rotate-file';
import * as winston from 'winston';
const dailyOption = (level: string) => {
return {
level,
datePattern: 'YYYY-MM-DD',
dirname: `./logs/${level}`,
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,
}),
),
};
};
export const loggerInfo = {
transports: [
new winston.transports.Console({
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
format: winston.format.combine(
winston.format.timestamp(),
utilities.format.nestLike(process.env.NODE_ENV, {
colors: true,
prettyPrint: true,
}),
),
}),
new winstonDaily(dailyOption('info')),
new winstonDaily(dailyOption('error')),
new winstonDaily(dailyOption('warn')),
new winstonDaily(dailyOption('debug')),
new winstonDaily(dailyOption('verbose')),
],
};
export const logger = WinstonModule.createLogger(loggerInfo);
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import helmet from 'helmet';
import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));
}
bootstrap();
logger을 사용할 서비스 (ex; boards.service.ts→getAllBoards)
import { Injectable, Inject, LoggerService } from '@nestjs/common';
import { BoardsRepository } from './boards.repository'
import { Board } from './boards.entity'
import { BoardCreateDto } from './dto/boards.dto'
import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston';
@Injectable()
export class BoardsService {
constructor(
@Inject(WINSTON_MODULE_NEST_PROVIDER)
private readonly logger: LoggerService,
private boardsRepository: BoardsRepository
){}
getAllBoards():Promise<Board[]>{
this.logger.debug("getAllBoards")
return this.boardsRepository.find();
//return this.BoardsRepository.
}
createBoard(boardCreateDto:BoardCreateDto):Promise<Board>{
return this.boardsRepository.createBoard(boardCreateDto)
}
}
이제 /logs/debug/*.log 파일에 로그가 쌓인다.
[NestWinston] Debug 2023. 11. 23. 오전 10:54:57 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:54:58 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:54:58 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:54:58 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:54:58 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:54:58 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:11 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:11 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:12 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:12 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:12 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:12 getAllBoards
[NestWinston] Debug 2023. 11. 23. 오전 10:55:12 getAllBoards
Share article