我正在使用具有多个模块的 Node 应用程序。我现在正在尝试正确设置日志记录(应该在一开始就这样做),并考虑使用Bunyan。
是否有一个单独的logger
模块可以导出,然后由this answer建议在其他模块中使用,或者在每个模块中直接定义一个新的bunyan logger
实例并进行相应配置,会更好呢?为了重用,我想像的是前者,但我不知道这是否会限制将来的发展。
如果我有一个定义的记录器,例如
var bunyan = require('bunyan');
var logger = bunyan.createLogger({
name: "filter",
streams: [
{
level: 'info',
stream: process.stdout
},
{
level: 'error',
path: '../error.log'
},
{
level: 'debug',
path: '../debug.log'
}
]
});
module.exports = logger;
然后,所有使用它的模块也将使用filter
名称进行日志记录,而每个模块使用更能代表自身的名称可能更有意义。另外,我认为所有模块都应该将错误记录到同一日志文件中是正确的,例如systemErr.log(以便提供更好的概述),或者它们应该记录到自己的错误日志中,例如module1Err.log,module2Err.log?
最佳答案
是。越简单越好。同样,这避免了日志设置的样板重复。
整个应用程序只有一个文件。由于bunyan使用ndjson格式,因此在需要时很容易过滤主日志文件。我建议直接登录stdout
并允许部署环境决定应该去哪里,该方法简单而灵活。这对于不需要或不需要磁盘上的日志文件的开发也很方便。诸如upstart
和multilog
之类的工具可以将您的stdout日志正确地写入磁盘,并为您进行日志轮换。
一个额外的提示。在本地开发时,我使用以下内容运行我的应用程序:
node-dev --inspect server.js |\
tee -a log/app.ndjson.log | bunyan -o short
更改代码时
node-dev
自动重新启动--inspect
启用调试器,我可以使用chrome devtools附加该调试器tee
将stdout复制到磁盘,因此,如果以后我想回头查看日志,可以,但是我不想在终端bunyan -o short
给我的终端输出漂亮的输出,这是我本地开发所需要的