将Bunyan应用于大型节点应用程序的推荐方法?

时间:2014-10-30 10:12:16

标签: node.js logging bunyan

我正在开发一个包含多个模块的节点应用程序。我现在正在尝试正确设置日志记录(应该在开始时这样做),并考虑使用Bunyan。

this answer中所述,或者在每个模块中定义一个新的bunyan logger实例,是否可以更好地导出其他模块导出然后需要的单个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?

1 个答案:

答案 0 :(得分:17)

  

拥有一个导出然后由其他模块

所需的记录器模块会更好吗?

即可。越简单越好。这也避免了样板重复日志设置。

  

另外,我认为所有模块都应该将错误记录到同一个日志文件中,例如, 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给了我漂亮的打印输出到我的终端,这是我想要的本地开发