로거에서 winston을 사용하여 로깅 할 때 타임 스탬프와 줄 번호를 추가 할 수 있습니다. 코드는 각각 기능을 수행 할 수 있지만 결합하면 예상대로 작동하지 않습니다.로깅을 위해 node.js winston에 회선 번호 구성을 추가하면 타임 스탬프가 사라집니다.
// **help to add timestamp**
var logger = new (winston.Logger)({
transports : [new (winston.transports.Console)({
json : false,
timestamp : true,
colorize: true
}), new winston.transports.File({
filename : __dirname + '/debug.log',
json : true
})]
,exitOnError : false
});
// **help me to add line number**
var logger_info_old = winston.info;
logger.info = function(msg) {
var fileAndLine = traceCaller(1);
return logger_info_old.call(this, fileAndLine + ":" + msg);
}
그러나 줄 번호 구성을 추가하면 로깅을위한 타임 스탬프가 사라집니다.
예를 들어, 줄 번호 구성을 추가하기 전에. 행 번호 설정을 추가 할 때
logger.info("abc");
2013-11-24T09:49:15.914Z - info:339:abc
는
logger.info("abc");
info: (H:\Dropbox\node\fablab\utils\logging.js:85:abc
내가 원하는 최적의 결과는
logger.info("abc");
2013-11-24T09:49:15.914Z - info: (H:\Dropbox\node\fablab\app.js:339:abc
나는이 문제를 해결할 수처럼?
벤치 마크를 수행했습니다. 스택 추적을 추가하는 것이 훨씬 더 느립니다. 10,000 로그를하는 것은 파일과 라인 번호가없는 71ms에서 4666ms로 갔다. 그것은 65 배 더 느립니다. traceCaller는 비효율적 일지 모르지만 대부분의 경우 스택 추적을 생성하는 데 실제로 사용됩니다. (새로운 오류) .stack –
동의하지만 traceCaller는 비효율적이지만 디버그에 사용되므로 괜찮습니다. 고마워, jeff – user824624
'oldFunc'을 포착 할 클로저가 있어야합니다. 그렇지 않으면 모든 로그 함수가 마지막 설정으로 대체됩니다 (기본 설정에서는'error()'). 또한, 왜'logger.levels' 대신'winston.levels'을 사용하고 있습니까? – leesei