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

我正在使用多个模块的节点应用程序。 我现在正在尝试设置正确的日志logging(应该在开始时这样做),并使用Bunyan来查看。

如本答案中所build议的那样,最好有一个导出的单个logger模块,然后由其他模块需要,或者直接在每个模块中定义一个新的bunyan logger实例并相应地进行configuration? 为了重用,我想象前者,但我不知道这是否会限制前进。

如果我有一个单一的logging器定义

 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进行日志logging,而每个模块可能更有意义地logging到更好地表示自己的名称。

另外,我是否认为所有模块都应该将错误logging到同一个日志文件中,例如systemErr.log(以便更好的浏览),还是应该logging到自己的错误日志中,例如module1Err.log,module2Err.log?

是否有一个导出的单个logging器模块,然后由其他模块需要?

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

另外,我是否认为所有模块都应该将错误logging到同一个日志文件中,例如systemErr.log(以便更好的浏览),还是应该logging到自己的错误日志中,例如module1Err.log,module2Err.log?

整个应用程序的一个文件。 因为bunyan使用ndjson格式,当你需要的时候很容易过滤主要的日志文件。 我build议直接logging到stdout的简单性和灵活性,并允许部署环境决定应该去哪里。 这对于您可能不需要或希望在磁盘上存储日志文件的开发也很方便。 像upstartmultilog工具可以正确地写你的标准输出日志到磁盘和照顾你的日志旋转。

一个额外的小费。 在本地开发时,我运行我的应用程序,如下所示:

 node-dev --inspect server.js |\ tee -a log/app.ndjson.log | bunyan -o short 
  • 当我更改代码时, node-dev自动重新启动
  • --inspect使debugging器,我可以附加到铬devtools
  • tee stdout复制到磁盘上,所以如果我确实想回去查看日志中的日志,我可以,但是我不希望在terminal上看到完整的ndjsonlogging
  • bunyan -o short给我打印输出到我的terminal,这是我想要的地方发展