我正在使用具有多个模块的 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并允许部署环境决定应该去哪里,该方法简单而灵活。这对于不需要或不需要磁盘上的日志文件的开发也很方便。诸如upstartmultilog之类的工具可以将您的stdout日志正确地写入磁盘,并为您进行日志轮换。

一个额外的提示。在本地开发时,我使用以下内容运行我的应用程序:

node-dev --inspect server.js |\
  tee -a log/app.ndjson.log | bunyan -o short

更改代码时
  • node-dev自动重新启动
  • --inspect启用调试器,我可以使用chrome devtools附加该调试器
  • tee将stdout复制到磁盘,因此,如果以后我想回头查看日志,可以,但是我不想在终端
  • 中看到完整的ndjson记录。
  • bunyan -o short给我的终端输出漂亮的输出,这是我本地开发所需要的
  • 10-07 14:47