node.js logging by winston - console, daily rotaion, customizing timestamp
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