Node.js记录器输出未显示在控制台上
我正在处理一个带有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
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?