Node.js

[Node.js / Javascript] Winston 모듈로 스마트하게(?) 서버 로깅하기

나태준 2019. 6. 1. 04:08
반응형

Node.js로 마스터 / 슬레이브 서버를 구축했을때 가장 큰 문제는 어느 서버에 어떤 이벤트가 발생했는가 였다.

 

처음엔 그냥 console.log로 처리를 했는데 이게 하다보니까 좀 무식한 방법이였다.

 

마스터 서버 로그같은건

console.log('마스터 서버: ', message);

뭐 이런 식으로 처리를 했기 때문에... 좀 무식했다.

 

그래서 자바나 C# 때처럼 로깅 레벨도 있는 스마트한 로거가 있었으면 해서 찾아봤다.


1. 모듈 선언 (npm install은 기본)

(갑자기!) 모듈 선언을 해준다. 

// fs
const fs = require('fs');
const path = require('path');
const logDir = 'logs';

if (!fs.existsSync(logDir))
  fs.mkdirSync(logDir);

// Winston
var winston = require('winston');
var moment = require('moment-timezone');

 

2. 모듈에서 필요한 함수 꺼내기

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const log_format = printf(({ level, message, label, timestamp }) => {
    return `[${level}] ${timestamp} | ${label}: ${message}`;
});

const appendTimestamp = format((info, opts) => {
    if(opts.tz)
      info.timestamp = moment().tz(opts.tz).format();
    return info;
  });

 

3. 마스터 / 슬레이브용 로거 반환하기

module.exports.createMasterLogger = () => {
  return winston.createLogger({
    format: combine(
        label({ label: '마스터 서버' }),
        appendTimestamp({ tz: 'Asia/Seoul' }),
        log_format
    ),
    transports: [
      new winston.transports.Console({ level: 'info', colorize: true }),
      new winston.transports.File({ level: 'info', filename: './logs/master.log' }),
      new winston.transports.File({ level: 'debug', filename: './logs/master_debug.log' })
    ]
  });
}

module.exports.createSlaveLogger = (slave_num) => {
  return winston.createLogger({
    format: combine(
        label({ label: '슬레이브 서버 [' + slave_num + ']' }),
        appendTimestamp({ tz: 'Asia/Seoul' }),
        log_format
    ),
    transports: [
      new winston.transports.Console({ level: 'info', colorize: true }),
      new winston.transports.File({ level: 'info', filename: './logs/slave-' + slave_num + '.log' }),
      new winston.transports.File({ level: 'debug', filename: './logs/slave-' + slave_num + '_debug.log' })
    ]
  });
};

 

대충 이런식으로 로그를 콘솔에도 띄우고 파일에도 기록해준다.

 

끗.

 

영어만 알면 너무 직관적이라 설명은 필요 없을 것 같다.

 

사실 Winston 자료를 찾다보면 이게 버전별로 너무 중구난방이라.. 결국 이걸 어디서 찾아왔는진 기억이 안난다.

 

그래도 뭐 내가 수정한 부분도 있고 하니 출처는 없는 걸로 (띠용!)

 

반응형
자바스크립트를 활성화시켜주세요!
[활성화]