【问题标题】:Node.js morgan logger output does not appear on consoleNode.js morgan 记录器输出未出现在控制台上
【发布时间】:2019-02-11 10:45:09
【问题描述】:

我正在处理一个带有 node.js 后端的新项目,而我的 morgan 记录器工作得非常好。起初,我无法使用任何预定义的摩根模板(tinyshort,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 实例?不确定这是否会破坏事情,但谁知道呢。

标签: node.js morgan


【解决方案1】:

就我而言,问题在于我没有在创建应用程序后立即调用“morgan”。当我改变它的位置时,它解决了这个问题。我在“摩根”页面中找不到任何关于此的参考,但我在这里的另一个答案中找到了它:Express Morgan not writing logs to file or STDOUT

工作解决方案:

let app = express()
app.use(morgan('combined'))     <--- morgan right after app
app.set('views', './views')
app.set('view engine', 'ejs')
app.use('/', routes)

不工作的代码(以前):

let app = express()
app.set('views', './views')
app.set('view engine', 'ejs')
app.use('/', routes)
app.use(morgan('combined'))     <--- morgan

【讨论】:

  • 不幸的是,就我而言,morgan 是第一个在应用程序中注册的中间人(就像在您的“工作”示例中一样)。无论如何,感谢您的贡献,也许这会对其他人有所帮助
  • 好的。我在一个小应用程序中尝试了您的确切代码,它同时打印了“AAAAAAAAAAAAA”和“ABABABABABAA”。也许是别的东西,也许你可以展示你的应用代码的更多细节。
  • 这解决了我的问题。为什么订单很重要,这是快递方面的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2019-04-19
相关资源
最近更新 更多