스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

[NodeJS] Winston 모듈로 만드는 Logger 본문

개발/NodeJS

[NodeJS] Winston 모듈로 만드는 Logger

워너-비 2017. 11. 15. 09:27

Winston 모듈로 만드는 Logger




기본적으로 자바스크립트에서는 console 객체의 log(), error() 메서드 등으로 로그를 출력할 수 있다.

그런데 프로그램 크기가 커지면, 로그의 양도 많아지고, 로그를 보관했다가 이후 확인할 일이 생기기도 한다.

따라서 다양한 방식으로 로그를 남기기 위해 외부의 다양한 모듈을 사용할 수 있다.


오늘은 그 중 Winston으로 로거를 만들어서 로그를 남겨보자.

** 로거 (Logger) : 로그를 출력하는 객체


winston


winston은 multiple transports를 지원하는 비동기 로깅 라이브러리다.

** transports : 속성 값으로 설정 정보를 전달할 수 있으며, 로그가 기록되는 저장소를 말한다.


winston은 로그를 파일로 저장하면서, 동시에 화면에 출력할 수 있다.

출력하려면 logger 객체의 debug(), info(), error() 메서드를 호출한다.

winston logger는 각각 다른 로그 수준으로 구성되어 있다.



Transports


로깅하는 방식을 transports 라고 한다.

winston에는 내장 네트워킹과 파일 입출력 등 사용가능한 transports가 있다.



로깅 수준 (Logging Levels)


winston의 로깅 수준은 RFC5424에 명시된 심각도 수준에 따라 설정되어있다.

각 수준은 단계별로 우선 순위가 부여되며, 어떤 정보까지 출력할 것인지 결정한다.

하위 수준은 상위 수준을 모두 포함하여 출력한다.

로깅 수준을 info로 설정했더니 debug 로그는 출력하지 않았다.


{

emerg: 0,

alert: 1,

crit: 2,

error: 3,

warning: 4,

notice: 5,

info: 6,

debug: 7

}

** Heightest level to Lowest level



winston 설치 - OSX


터미널에 다음과 같이 명령어를 입력하여 모듈을 설치한다.

$ npm install winston --save


그러면 winston 모듈이 설치된다.







$ npm install winston --save
npm WARN nodeexample1@1.0.0 No description
npm WARN nodeexample1@1.0.0 No repository field.
 
+ winston@2.4.0
added 7 packages in 1.419s




사용법


winston을 사용하는 방법은 일반적으로 두 가지가 있다.



간편한 방법

로그 레벨을 나타내는 문자열을   log()  메서드에 전달하여 출력한다.

 require('winston')  을 이용하면 프로그램 전체에서 사용할 수 있다.

기본 로깅수준이 info로 설정되어 debug 로그는 출력되지 않았다.

1
2
3
4
5
6
7
8
9
10
11
12
var winston = require('winston');
 
winston.log('info''info Message.');
winston.log('info''info Message', { anything: 'metadata' });
winston.log('debug''debug message. %j', { id: '1234' }, {});
winston.log('warn''warn Message.');
winston.log('error''error Message.', { err_code: '500' });
 
winston.debug('debug Message');
winston.info('info Message');
winston.warn('warn Message');
winston.error('error Message');



실행결과

info: info Message.
info: info Message anything=metadata
warn: warn Message.
info: info Message
warn: warn Message
error: error Message. err_code=500
error: error Message



인스턴스화 방법

 winston.Logger  를 사용하여 인스턴스화하여 레벨 지정 메서드 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var winston = require('winston');
 
var logger = new winston.Logger({
    transports:
        [
            new winston.transports.Console({
                level: 'debug',
                silent: false,
                colorize: false,
                timestamp: false,
            }),
            new winston.transports.File({
                level: 'debug',
                silent: false,
                colorize: false,
                timestamp: true,
                filename: 'app-logging.log',
                maxsize: 1024,
                maxFiles: 3,
                json: true
            })
        ]
});
 
logger.log('info''info Message.');
logger.log('info''info Message', { anything: 'metadata' });
logger.log('debug''debug message. %j', { id: '1234' }, {});
logger.log('warn''warn Message.');
logger.log('error''error Message.', { err_code: '500' });
 
logger.debug('debug Message');
logger.info('info Message');
logger.warn('warn Message');
logger.error('error Message');



실행결과

info: info Message.
info: info Message anything=metadata
debug: debug message. {"id":"1234"}
warn: warn Message.
error: error Message. err_code=500
debug: debug Message
info: info Message
warn: warn Message
error: error Message


winston을 이용한 간단한 로그 출력 프로그램을 제작해보는 것도 좋은 공부가 될 것 같다.



출처 : https://github.com/winstonjs/winston#transports

Comments