JS - winston

choko's avatar
Jun 29, 2024
JS - winston
Contents
Wiston

Wiston

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

Tom의 TIL 정리방