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!!!");