본문 바로가기

오픈소스/노드

[Node] Logging 라이브러리 winston

 본 문서는 Logging 라이브러리 winston 을 모듈화 하여 프로젝트와 의존하지 않은 코드를 작성하였습니다. 프로젝트의 오류와 반영된 코드 및 결과 값들을 파악하여 동작을 이해할 때 사용하기도 합니다.

 

 그러면 아래 예제를 통해 시작해보도록 하죠.

 

 

# Contents


  • winston Install
  • 예제 코드

 

 

# winston Install


 해당 라이브러리를 이용하기 위해 우리는 2개의 라이브러리를 설치할 예정입니다.

 

  • winston : 로깅을 도와주는 실질적인 라이브러리 입니다. 
  • winston-daily-rotate-file : winston에서 로깅된 로그들을 파일로 저장해주는 winston 유틸리티 라이브러리입니다.

설치 방법은 아래와 같습니다.

 

npm install --save winston
npm install --save winston-daily-rotate-file

 

 

# 예제 코드


 winston 설치가 완료되었으면 아래 정리된 모듈을 복붙해주세요. 해당 모듈을 사용하게 되면 어떠한 의존성 없이 로그를 출력 및 저장할 수 있으며, 사용법도 아주 간단합니다. 

 

 저는 로그 모듈 파일을 logger.js로 만들었습니다. 그리고 아래 내용을 복붙하였습니다.

 

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

let alignColorsAndTime = winston.format.combine(
    winston.format.colorize({
        all: true,
    }),
    winston.format.label({
        label: "[LOGGER]",
    }),
    winston.format.timestamp({
        format: "YYYY-MM-DD HH:MM:SS",
    }),
    // winston.format.printf((info) => ` ${info.label}  ${info.timestamp}  ${info.level} : ${info.message}`)
    winston.format.printf((info) => `[${info.timestamp}] | [${info.level}] | ${info.message}`)
);

let notalignColorsAndTime = winston.format.combine(
    winston.format.label({
        label: "[LOGGER]",
    }),
    winston.format.timestamp({
        format: "YYYY-MM-DD HH:MM:SS",
    }),
    winston.format.printf((info) => `[${info.timestamp}] | [${info.level}] | ${info.message}`)
);

const logger = winston.createLogger({
    level: "debug",
    transports: [
        new winstonDaily({
            filename: "logs/my_log",
            zippedArchive: true,
            format: winston.format.combine(notalignColorsAndTime),
        }),

        new winston.transports.Console({
            format: winston.format.combine(winston.format.colorize(), alignColorsAndTime),
        }),
    ],
});

module.exports = logger;

 

 실질적인 사용은 로그를 출력하고자 하는 코드 안에 Export 합니다. Export 한 객체를 통해 레벨을 호출하여 메시지 혹은 로그를 전송합니다. 아래는 간단한 사용방법입니다.

 

const logger = require("./logger");

logger.info("hello world");
logger.error("hello world");
logger.warn("hello world");
logger.debug("hello world");
logger.verbose("hello world");
logger.silly("hello world");