温斯顿logging器附加“未定义”到每个日志条目

在基于node.js / express.js的应用程序中,winston日志框架(版本2.4.0)用于日志logging。 这工作正常,除了undefined附加到每个日志输出。 输出的types(string,对象,..)不会改变这种行为。 温斯顿是从这样的几个.js文件使用:

const logger = require('winston') .. logger.info(`Handled request in ${Date.now() - start}ms.`); 

上述日志语句的输出是:

 info: Handled request in 667ms.undefined 

当logging器。{info | debug | ..}被replace为一个声明,以logging控制台的输出是预期的; 只是在最后连接的'undefined'被logging的语句。

可能是什么原因?

我不确定这是什么原因,我真的没有时间来深入研究这个问题,但是无论出于何种原因,winston创build者提供的示例代码对我来说都不能正常工作,并且在每一个后面添加了这个“undefined”线。 就像你的情况一样。

我在winston模块和控制台函数的console.js中快速search了“eol”,我打印了所有选项和eol参数。 原来,默认情况下,没有指定eol,因此这个“未定义”的附录。 实际上,我在winston.configure()使用的任何选项都没有使用Consolefunction。 但是,如果我们明确地创build新的控制台并将选项传递给它(包括eol),那么它的工作就相当好。

TL;博士; 我build议你尝试这个代码来初始化你的winston日志logging,并修改它以适应你的需求:

 const winston = require('winston'); winston.configure({ transports: [ new winston.transports.Console({ level: 'silly', eol: '\n', timestamp: true, colorize: true, }) ] }); winston.silly('testing') 

这是一个解决方法,然后一个真正的解决scheme,但嘿,它的作品,对吗?

编辑:如果你在Windows上,你可能想尝试'\r\n' n'eol代替。