Я использую 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 журналов, время шло от 71 мс без номера файла и линии до 4666 мс. Это в 65 раз медленнее. traceCaller, возможно, неэффективен, но я предполагаю, что большую часть времени на самом деле принимается при создании трассировки стека: (новая ошибка) .stack –
согласен, traceCaller неэффективен, но он будет использоваться для отладки, так что это нормально. Большое спасибо, jeff – user824624
Должно быть закрытие для захвата 'oldFunc', в противном случае вся функция журнала будет заменена последней (' error() 'в настройках по умолчанию). Кроме того, почему вы используете 'winston.levels' вместо' logger.levels'? – leesei