본문 바로가기

JavaScript/Node.js

Logging 모듈 Winston

728x90

1. 설치

winston과 winston-daily-rotate-file을 설치한다. winston은 로그를 남기는 본체이고, winston-daily-rotate-file은 1일 단위로 로그를 쌓도록 관리해준다.

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

 

2. winston.js 작성

로그를 관리하는 모듈을 따로 패키지 형태로 작성한다.

var winston = require('winston');    				// 로그 처리 모듈
var winstonDaily = require('winston-daily-rotate-file');    	// 로그 일별 처리 모듈

// Date Format 선택
// moment 모듈 설치 필요
function timeStampFormat() {
    return moment().format('YYYY-MM-DD HH:mm:ss.SSS ZZ'); // '2018-01-01 12:12:12.500 +0900'
};

// 그냥 
const tsFormat = () => (new Date()).toLocaleTimeString();      // '2018-01-01'

// 로그 설정
var logger = new (winston.Logger)({
    transports: [
        new (winstonDaily)({                                              // 로그 파일 설정
                name: 'info-file',
                filename: './logs/app_%DATE%.log',                  // 파일 이름 (아래 설정한 날짜 형식이 %DATE% 위치에 들어간다)
                datePattern: 'YYYY-MM-DD',                           // 날짜 형식 (대문자여야 적용된다.)
                colorize: false,
                maxsize: 50000000,                                       // 로그 파일 하나의 용량 제한
                maxFiles: 1000,                                             // 로그 파일 개수 제한
                level: 'info', // info이상 파일 출력                      // 로그 레벨 지정
                showLevel: true,
                json: false,
                timestamp: timeStampFormat                          // 저장될 시간 형식
            }),
        new (winston.transports.Console)({                            // 콘솔 출력
                name: 'debug-console',
                colorize: true,
                level: 'debug', // debug이상 콘솔 출력
                showLevel: true,
                json: false,
                timestamp: timeStampFormat
        })     
    ],
    exceptionHandlers: [                                                  // uncaughtException 발생시 처리
        new (winstonDaily)({
                name: 'exception-file',
                filename: './logs/exception_%DATE%.log',
                datePattern: 'YYYY-MM-DD',
                colorize: false,
                maxsize: 50000000,
                maxFiles: 1000,
                level: 'error',
                showLevel: true,
                json: false,
                timestamp: timeStampFormat
        }),
        new (winston.transports.Console)({
                name: 'exception-console',
                colorize: true,
                level: 'debug',
                showLevel: true,
                json: false,
                timestamp: timeStampFormat
        })     
    ]
});

 

3. 원하는 위치에 로그를 삽입한다.

logger.info('Hello, World');

 

4. 출력 내용 확인

* ./logs/ 위치에
app_2018-05-21.log
exception_2018-05-21.log

형식으로 로그 파일이 생성됨

출력 내용은 아래와 같은 형태.
2018-05-21 15:59:38.764 +0900 - info: Hello, World

 

[출처]

https://jm4488.tistory.com/9

https://lovemewithoutall.github.io/it/winston-example/

https://basketdeveloper.tistory.com/42

728x90