Node.js 摩根记录器输出未出现在控制台上

Tom*_*mas 1 node.js morgan

我正在处理一个带有 node.js 后端的新项目,我的morgan记录器工作得很好。起初我无法使用任何预定义的摩根模板(tiny,,short等)从中获得任何输出,没有任何内容传播到输出。我提供了自定义日志记录功能来验证是否在我的堆栈中调用了摩根:

app.use(morgan((tokens, req, res) => {
console.log('AAAAAAAAAAA');
return 'ABABABABABAA';
}, { stream: process.stdout }));
Run Code Online (Sandbox Code Playgroud)

序列AAAAAAAAAAA确实通过colsole.log内部日志功能传播到控制台输出(证明 morga 在每个请求上实际调用),但日志功能根本不提供它的ABABABABABA序列。

只要我能够想象预定义的格式可能会由于req/res对象的非常规名称而失败(顺便说一句,这不是一种情况),那么从记录器函数返回的纯文本显然应该直接传播到输出。

编辑

将摩根选项设置为{immediate: true}也不能解决问题。

ofr*_*fri 6

就我而言,问题在于我没有在创建应用程序后立即调用“morgan”。当我改变它的位置时,它解决了这个问题。我在“摩根”页面中找不到任何关于此的参考,但我在此处的另一个答案中找到了它:Express Morgan not write 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)
Run Code Online (Sandbox Code Playgroud)

不工作的代码(以前):

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

  • 不幸的是,在我的情况下,`morgan` 是第一个在应用程序中注册的中间件(就像在你的“工作”示例中一样)。无论如何,感谢您的贡献,也许这会帮助其他人 (2认同)