Node.js记录器输出未显示在控制台上

Node.js记录器输出未显示在控制台上,node.js,morgan,Node.js,Morgan,我正在处理一个带有node.js后端的新项目,我的morgan记录器工作得非常好。起初,我无法使用任何预定义的morgan模板(tiny,short,e.c.t)从中获得任何输出,没有任何东西传播到输出。我提供了自定义日志功能,以验证是否在堆栈上调用了morgan: app.use(morgan((tokens, req, res) => { console.log('AAAAAAAAAAA'); return 'ABABABABABAA'; }, { stream: process.st

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

app.use(morgan((tokens, req, res) => {
console.log('AAAAAAAAAAA');
return 'ABABABABABAA';
}, { stream: process.stdout }));
aaaaaaa
的序列确实是通过日志函数内部的
colsole.log
传播到控制台输出的(证明morga in实际上在每个请求中都被调用),但日志函数根本不提供它的
ababababababababa
序列

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

编辑
将morgan选项设置为
{immediate:true}
也不能解决问题。

在我的情况下,问题是我没有在创建应用程序后立即调用“morgan”。当我改变立场时,它解决了这个问题。我在“摩根”页面上找不到任何关于这方面的参考资料,但我在这里的另一个答案中找到了:

工作解决方案:

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
let app=express()

app.use(morgan('combined'))在我的例子中,问题是我没有在创建应用程序后立即调用“morgan”。当我改变立场时,它解决了这个问题。我在“摩根”页面上找不到任何关于这方面的参考资料,但我在这里的另一个答案中找到了:

工作解决方案:

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
let app=express()

app.use(morgan('combined'))我无法复制它。对我来说,在clean project设置中它也在工作,所以问题是是否有任何节点/express gotchas可能会阻止它工作。奇怪的是,
console.log
会工作,但返回字符串(在某个时候会写入
process.stdout
)不会。因此,我不清楚是什么原因导致了这种情况。我正在考虑一些自定义错误处理,它将停止响应形式的传播,但是
{immidate:true}
将正常工作-这并不奇怪,预定义的模板不起作用。也许您在应用程序中使用了多个
morgan
实例?不确定这是否会破坏一切,但谁知道呢。我无法重现这一点。对我来说,在干净的项目设置中,它也在工作,所以问题是是否有任何节点/express gotchas thah可能会阻止它工作这很奇怪,
console.log
可以工作,但返回字符串(在某个时候会写入
进程。stdout
)不会。所以我不清楚是什么导致了这种情况。我正在考虑一些自定义错误处理,它将停止响应形式的传播,但是
{immidate:true}
可以正常工作-这并不奇怪,预定义的模板不起作用。也许你在你的应用程序中使用了多个
morgan
实例?不确定这是否会破坏一切,但谁知道呢。不幸的是,在我的情况下,
morgan
是第一个在应用程序中注册的中间件(就像在你的“工作”中一样)(示例)。无论如何,谢谢你的贡献,也许这会帮助其他人。我在一个小应用程序中尝试了你的确切代码,它同时打印了“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay、 在我的例子中,
morgan
是第一个在应用程序中注册的中间件(就像您的“工作”示例一样)。无论如何,感谢您的贡献,也许这会帮助其他人。我在一个小应用程序中尝试了您的确切代码,它同时打印了“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?