[NodeJS] Winston으로 Error Log Level별로 출력하기

주형(Jureamer)·2022년 7월 7일
2
post-thumbnail

console로만 그동안 찍어오다가 로그 레벨별로 찍는 게 좋다는 말을 듣고

모듈을 찾다가 Winston을 찾아 사용 해보게 됐습니다.

공식 페이지의 설명에 따르면 Winston 간단하고 로그를 여러 개의 저장공간으로 나누어 저장할 수 있는 보편적인 라이브러리라고 소개하고 있습니다.
기존 로그 방식은 하나 혹은 두 개(Normal, Error)의 로그 파일에 모든 정보가 다 담겨있는 형태지만
윈스턴은 이러한 로그 저장하는 부분들을 분리시켜 더욱 유연성있고 확장성있게 만들었다고 합니다.

저는 아직 레벨 단위로 저장하는 방식을 쓰진 않고있고

출력되는 부분만 적용하여 테스트 해보고 있어 이 부분을 먼저 설명드리도록 하겠습니다.

우선 winston을 받아줍니다.

npm install winston

그리고 /config/logger.js 파일을 만들어준 후 아래와 같이 작성했습니다.

const winston = require('winston');

const config = { 
    levels: { // 숫자가 낮을 수록 우선순위가 높습니다.
        error: 0,
        debug: 1,
        warn: 2,
        info: 3,
        data: 4,
        verbose: 5,
        silly: 6,
        custom: 7
    },
    colors: { // 각각의 레벨에 대한 색상을 지정해줍니다.
        error: 'red',
        debug: 'blue',
        warn: 'yellow',
        info: 'green',
        data: 'magenta',
        verbose: 'cyan',
        silly: 'grey',
        custom: 'yellow'
    }
}

winston.addColors(config.colors); // 컬러를 적용하는 부분인 듯합니다.

// format 객체를 작성해줍니다. 
const format = winston.format.combine( 
    winston.format.colorize({ all: true }), // 색상의 적용 범위입니다.
    winston.format.printf( // printf 양식은 입맛에 맞게 바꿀 수 있습니다.
        (info) => `[ ${info.level} ] ▶ ${info.message}`,
    ),
)

// logger 객체를 생성해줍니다.
const logger = winston.createLogger({
    levels: config.levels,
    format,
  // 저도 잘 몰랐던 부분인데 해당 부분 이상의 우선순위를 갖는 log만 출력해줍니다.
  // custom이 우선순위가 젤 낮기 때문에 전체 로그 레벨을 출력합니다.
    level: 'custom', 
  // 로그를 저장하는 부분입니다. 저는 별도로 저장하지 않아 Console에만 출력을 해주었습니다.
    transports: [
        new winston.transports.Console()
    ],
});

logger.stream = {
    write: function(message, encoding) {
      logger.info(message); // 단순히 message를 default 포맷으로 출력
    },
};

// 테스트용으로 지우고 적용하시면 됩니다.
logger.error("error Level, This is Logging System!");
logger.debug("Debug Level, This is Logging System!");
logger.warn("Warn Level, This is Logging System!");
logger.info("Info Level, This is Logging System!");
logger.data("Data Level, This is Logging System!");
logger.verbose("Verbose Level, This is Logging System!");
logger.silly("Silly Level, This is Logging System!");
logger.custom("Custom Level, This is Logging System!");

module.exports = logger;

그러면 서버 재기동 시 아래와 같이 형형색색의 로그를 볼 수 있습니다.

이후 원하는 곳에 import 시켜 기존 console들을 변경해서 사용하시면 됩니다.

const logger = require('../config/logger');

console.log("console.log!!!");

-> logger.info("console.log!!!");
-> logger.verbose("console.log!!!");

참고

profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글