nodejs

로그파일 남기기(winston 모듈 install)

jackypark 2022. 9. 12. 17:40

winston모듈을 설치하는데 애를 먹었다 정보가 별로 없었기 때문에 ㅠㅠ

doit책을 보면서 공부하는데 여기서 나는 툴을 vscode 책에서는 브래킷?이라는 것을 쓰다 보니 설치 방법이 좀 다른 것 같았다.. vscode는 그냥 터미널에서 설치해주면 끝이었다… 한참 돌아 돌아 결국 설치하긴 했다…

그리고 책에서는 new 객체로 만드는 거였지만 그것은 예전 버전이고 createLogger라는 함수를 사용해서 만들어 줘야 한다.

npm install winston

npm install winston-daily-rotate-file

npm install moment

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');//이런 포맷으로 현재시간의 결과를 넘겨준다
}

var logger = winston.createLogger({

    transports:[
        new (winstonDaily)({//파일로 출력 설정
            name:'info-file',
            filename:'./log/server',
            datePattern:'_yyyy-MM-DD.log',
            colorize:false,
            maxsize:5000000,//50메가
            maxFiles:1000,
            level:'info',// 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:'exeption-file',
    //         filename:'./log/exception',
    //         datePattern:'_yyyy-MM-DD.log',
    //         colorize:false,
    //         maxsize:5000000,//50메가
    //         maxFiles:1000,
    //         level:'error',// info메세지 상위것만 출력됨
    //         showLevel:true,
    //         json:false,
    //         timestamp:timeStampFormat()
    //     }),
    //     new (winston.transports.Console)({//컨솔로 출력설정
    //         name:'exception-console',
    //         colorize:true,
    //         level:'debug',
    //         showLevel:true,
    //         json:false,
    //         timestamp:timeStampFormat()
    //     })
    // ]
});

logger.debug('디버깅 메시지입니다.');
logger.error('에러 메시지입니다.');

로그기록

 

로그 기록을 보시다시피 debug문은 안 들어가고 error문 만들어 갔다. 이유는 위 코드에서 level을 info상위만 나오게 설정하였기 때문에 debug는 info보다 하위이기 때문에 출력되지 않는다.. 이것은 로그 수준 때문이다

 로그 수준이란?

어떤 정보까지 출력할 것인지 결정하는 것을 말함. 예를 들어, 오류만 보여 줄 것인지 아니면 사소한 정보까지 모두 보여 줄 것인지를 로그 수준으로 결정한다. winston모듈에서 사용하는 로그 수준은 다음처럼 단계별로 구성된다, 숫자가 커질수록 내려가는 거다

const levels = {
  error: 0,
  warn: 1,
  info: 2,
  http: 3,
  verbose: 4,
  debug: 5,
  silly: 6
};