winston - log를 관리하자

신동훈·2022년 11월 10일
0

NODE 모듈

목록 보기
3/3

winston 설치

npm i winston winston-daily-rotate-file

log

//loger.js

const winston = require('winston');
const winstonDaily = require('winston-daily-rotate-file');
const process = require('process');

const { combine, timestamp, label, printf} = winston.format;

const logDir = `${process.cwd()}/logs`;

const logFormat = printf(({ level, message, label, timestamp }) => {
    //날짜 [시스템이름] 로그레벨: 메시지
    return `${timestamp} [${label}] ${level}: ${message}`;
});

const logger = winston.createLogger({

    format: combine(
        timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
        label({ label: "RTMC-API-NODE" }),
        logFormat,
    ),
    
    transports: [
        new winstonDaily({
            level: "info",
            datePattern: "YYYY-MM-DD",
            dirname: logDir,
            filename: `%DATE%.log`,
            maxFiles: 30,
            zippedArchive: true
        }),

        new winstonDaily({
            level: "error",
            datePattern: "YYYY-MM-DD",
            dirname: logDir + "/error",
            filename: `%DATE%.error.log`,
            maxFiles: 30,
            zippedArchive: true
        })
    ],

    exceptionHandlers: [
        new winstonDaily({
            level: "error",
            datePattern: "YYYY-MM-DD",
            dirname: logDir,
            filename: `%DATE%.exception.log`,
            maxFiles: 30,
            zippedArchive: true
        })
    ]
});

if (process.env.NODE_ENV !== "production") {
    logger.add(
        new winston.transports.Console({
            format: winston.format.json(
                winston.format.combine(
                winston.format.colorize(),
                winston.format.simple(),
            ))
        })
    )
}

module.exports = logger;
profile
독학 정리

0개의 댓글