티스토리 뷰

  • 로그 파일 남기기
console 객체의 log() 또는 error() 메소드 등을 호출 하면 로그를 출력 할 수 있다.
양이 많아 진다면 로그를 어떻게 남기고 보관할 것인가? 로그를 남길 수 있도록 외부 모듈을 사용해서 이것을 해결 한다. winston 모듈 로 로그를 남기는 방법을 알아 볼것이다.
  • winston 모듈 설치
$ npm install winston --save

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

$ npm install moment --save 
moment 모듈 = 시간을 다룰 수 있는 모듈
이제 winston 모듈을 사용할 준비를 마쳤습니다.


  • 로그 설정 
var winston = require('winston');    // 로그 처리 모듈
var winstonDaily = require('winston-daily-rotate-file');    // 로그 일별 처리 모듈
var moment = require('moment');    // 시간 처리 모듈

function timeStampFormat() {
    return moment().format('YYYY-MM-DD HH:mm:ss.SSS ZZ'); // '2016-05-01 20:14:28.500 +0900'
};

var logger = new (winston.Logger)({

//winston 모듈로 만드는 로거(Logger, 로그를 출력하는 객체를 말할 때 사용하는 용어)는 transports 라는 속성 값으로 여러 개의 설정 정보를 전달 할 수 있다.

    transports: [
        new (winstonDaily)({
//이름이 info-file인 설정 정보는 매일 새로운 파일에 로그를 기록하도록 설정
            name: 'info-file',
            filename: './log/server',
            datePattern: '_yyyy-MM-dd.log',
            colorize: false,
// 50MB를 넘어 가면 자동으로 새로운 파일을 생성되며, 이때 자동으로 분리되어 생성 되는 파일의 개수는 최대 1000개 까지 가능하다.
            maxsize: 50000000,           
            maxFiles: 1000,
//info 수준의 로그만 기록하도록 설정함.
            level: 'info',
            showLevel: true,
            json: false,
            timestamp: timeStampFormat
        }),
        new (winston.transports.Console)({
            name: 'debug-console',
            colorize: true,
            level: 'debug',
            showLevel: true,
            json: false,
            timestamp: timeStampFormat
        })
    ],
    exceptionHandlers: [
        new (winstonDaily)({
            name: 'exception-file',
            filename: './log/exception',
            datePattern: '_yyyy-MM-dd.log',
            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
        })
    ]
});
+ 파일 복사 예제( 파일을 복사하면서 로그를 남기는 코드)

var fs = require('fs');

var inname = './output.txt';
var outname = './output2.txt';

fs.exists(outname, function (exists) {
    if (exists) {
    fs.unlink(outname, function (err) {
    if (err) throw err;
    logger.info('기존 파일 [' + outname +'] 삭제함.');
    });
    }
    
    var infile = fs.createReadStream(inname, {flags: 'r'} );
var outfile = fs.createWriteStream(outname, {flags: 'w'});

infile.pipe(outfile);
logger.info('파일 복사 [' + inname + '] -> [' + outname + ']');
});

=> log 폴더 생성후 확인 할것
=> logger 객체에 들어 있는 debug(),info(),error() 와 같은 메소드를 호출 한다.


2017-09-18 02:18:11.019 +0900 - info: 파일 복사 [./output.txt] -> [./output2.txt]
2017-09-18 02:18:11.024 +0900 - info: 기존 파일 [./output2.txt] 삭제함.
Program exited with code 0
server_2017-09-17.log 파일이 생성 된것을 알 수 있다 ( log  폴더)


2017-09-18 02:18:11.014 +0900 - info: 파일 복사 [./output.txt] -> [./output2.txt]
2017-09-18 02:18:11.023 +0900 - info: 기존 파일 [./output2.txt] 삭제함.




  • 로그 수준이란?
어떤 정보 까지 출력할 것인지를 결정하는것을 말한다.
예) 오류만 보여 줄것인지, 사소한 정보 까지 모두 보여줄 것인지 로그수준 결정.
winston 모듈에서는 사용하는 로그 수준은 다음처럼 단계별로 구성 , 하위 상위 모두 포함
debug: 0 > info : 1 > notice: 2 > warning :3 > error :4 > crit : 5 > alert : 6 > emerg : 7




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함