IT - S/W, Biz/S/W Development

node.js logging by winston - console, daily rotaion, customizing timestamp

Ever White 2014. 7. 4. 10:06

node.js logging by winston

node.js 로깅 모듈 winston 이용

push server 를 sail.js로 프로젝트를 생성하여 진행하고 있습니다.

config 폴더 하위에

winston.js 를 추가하였습니다. 따로 설명은 안달구요. 주석을 참고하세요


< winston.js >

/**

 * 2014-07-03 byc created

 * to define logger on winston

 */


// logging

var winston = require('winston');


// setting timestamp format

var moment = require('moment');


// customizing timestamp

function goodTimeStamp() {

    //return new Date().toString();

    //the format parameter referring to moment.js source

    return moment().format('YYYY-MM-DD HH:mm:ss.SSS ZZ'); // '2014-07-03 20:14:28.500 +0900'

};


var logger = new (winston.Logger)({

    transports: [

        //new (winston.transports.Console)( {level : 'debug', timestamp : true }),

        new (winston.transports.Console)( {

            level : 'debug'

            , timestamp : goodTimeStamp

        }),


        // maxsize unit : bytes

        // DailyRotateFile and maxsize => fisrt portal_push.log.2014-07-04, secong DailyRotateFile.2014-07-04.1 ......

        new (winston.transports.DailyRotateFile)({

            filename: 'portal_push.log'

            , dirname : 'd:/app/logs'

            //, dirname : global.logPath ===> not working because bootstrap.js is requiring this before setting global.logPath

            , level : 'debug'

            , maxsize : 102400

            , timestamp : goodTimeStamp

            , datePattern : '.yyyy-MM-dd'

        })


//        new (winston.transports.File)({

//                filename: 'portal_push.log'

//                , dirname : 'd:/app/logs'

//                //, dirname : global.logPath ===> not working because bootstrap.js is requiring this before setting global.logPath

//                , level : 'debug'

//                , maxsize : 102400

//                , timestamp : goodTimeStamp

//        })

    ]


    ,exceptionHandlers: [

        new winston.transports.DailyRotateFile({

            filename: 'exception_portal_push.log'

            , dirname : 'd:/app/logs'

            , maxsize : 102400

            , timestamp : goodTimeStamp

            , datePattern : '.yyyy-MM-dd'

        })

    ]

//    ,exceptionHandlers: [

//        new winston.transports.File({

//            filename: 'exception_portal_push.log'

//            , dirname : 'd:/app/logs'

//            , maxsize : 102400

//            , timestamp : goodTimeStamp

//        })

//    ]


});


module.exports.logger = function(){

    return logger;

}


< source using winston.js  >

var log = require('../../config/winston').logger();

log.debug( 'debug');

log.info('info');


※ 특이사항

log.debug, log.info 를 연달아 적어두었는데, winstorm console 상에서 log.info 가 먼저 찍히는 경우가 있네요.

( 윈도우 커맨드창에서 sails lift 로 기동할때도 그렇지 않구요. file 로 남기고 있는 로그에서도 그렇진 않습니다.

  기존에 console.log 쓸때도 순서가 꼬이는 경우가 있었는지는 모르겠네요 )


* 참고정보

Node.js winston 표준 시간이 안맞는 경우 해결 방법 

https://github.com/flatiron/winston

http://ezambo.com:9000/sexyguy/CrossysStudy/post/23

http://stackoverflow.com/questions/18055971/log-rotation-in-node-js