【发布时间】:2019-02-11 10:45:09
【问题描述】:
我正在处理一个带有 node.js 后端的新项目,而我的 morgan 记录器工作得非常好。起初,我无法使用任何预定义的摩根模板(tiny,short,e.c.t)从中获取任何输出,没有任何东西传播到输出。我提供了自定义日志功能来验证 morgan 是否在我的堆栈上被调用:
app.use(morgan((tokens, req, res) => {
console.log('AAAAAAAAAAA');
return 'ABABABABABAA';
}, { stream: process.stdout }));
AAAAAAAAAAA 的序列确实通过 colsole.log 内部日志记录函数传播到控制台输出(证明 morga 在每个请求上实际调用),但日志记录函数根本不提供它的 ABABABABABA 序列。
只要我能够想象由于req/res 对象的非常规名称(顺便说一句,这不是案例),预定义格式可能会失败,然后从记录器函数返回纯文本显然应该直接传播到输出。
编辑
将 morgan 选项设置为 {immediate: true} 也不能解决问题。
【问题讨论】:
-
我无法重现这个。
-
对我来说,在干净的项目设置上它也可以正常工作,所以问题是是否有任何节点/快递陷阱可能会阻止它工作
-
奇怪的是
console.log可以工作,但返回字符串(有时会写入process.stdout)不会。所以我对可能导致这种情况的原因没有明显的想法。 -
我正在考虑一些自定义错误处理来阻止响应表单传播,但随后
{immidiate: true}会正常工作 - 它不是 -
预定义模板不起作用也很奇怪。也许您在您的应用程序中使用了多个
morgan实例?不确定这是否会破坏事情,但谁知道呢。