在基于node.js / express.js的应用程序中,winston日志记录框架(版本2.4.0)用于记录。这很好,除了 undefined 附加到每个日志输出。输出类型(字符串,对象,..)不会改变该行为。 Winston用于几个.js文件,如下所示:
const logger = require('winston')
..
logger.info(`Handled request in ${Date.now() - start}ms.`);
上述日志语句的输出为:
info: Handled request in 667ms.undefined
当logger。{info | debug | ..}被替换为记录到控制台的语句时,输出符合预期;只需要使用' undefined'最后连接起来。
可能是什么原因?
答案 0 :(得分:1)
我不确定这是什么原因,我没有时间深入研究这个问题,但无论出于何种原因,winston创作者提供的示例代码都没有正常工作我并附上了这个' undefined'在每一行之后。就像你的情况一样。
我做了一些快速搜索' eol'在winston模块和Console函数中的console.js中我打印了所有选项和eol参数。事实证明,在某种程度上,默认情况下没有指定eol,因此这未定义'附录。事实上,我在winston.configure()
中使用的任何选项都没有进入控制台功能。但是如果我们明确地创建新的Console并向它传递选项(包括eol),那么它的效果非常好。
TL;博士; 我建议您尝试使用此代码初始化您的winston日志记录并根据您的需要进行修改:
const winston = require('winston');
winston.configure({
transports: [
new winston.transports.Console({
level: 'silly',
eol: '\n',
timestamp: true,
colorize: true,
})
]
});
winston.silly('testing')
这是一个解决方法,然后是一个真正的解决方案,但嘿,它的工作原理,对吧?
修改强>
如果你在Windows上,你可能想尝试'\r\n'
eol。