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

Phi*_*ien 8 logging node.js bunyan

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

logger本答案所示,拥有一个导出然后由其他模块所需的单个模块或者logger直接在每个模块中定义一个新的bunyan 实例并相应地配置它会更好吗?为了重复使用,我想象前者,但我不知道这是否会受到限制.

如果我有一个定义的单一记录器

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;
Run Code Online (Sandbox Code Playgroud)

然后,使用它的所有模块也将使用名称进行日志记录filter,而每个模块记录到更能代表自身的名称可能更有意义.

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

Pet*_*ons 17

拥有一个导出并由其他模块所需的记录器模块会更好吗?

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

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

整个应用程序的一个文件.因为bunyan使用ndjson格式,所以在需要时过滤主日志文件很容易.我建议直接记录的简单性和灵活性,stdout并允许部署环境决定应该去哪里.这对于您可能不需要或不想要磁盘上的日志文件的开发也很方便.工具喜欢upstartmultilog可以适当写你的标准输出记录到磁盘和照顾日志旋转的为您服务.

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

node-dev --inspect server.js |\
  tee -a log/app.ndjson.log | bunyan -o short
Run Code Online (Sandbox Code Playgroud)
  • node-dev 我更改代码时自动重启
  • --inspect 使用chrome devtools启用我可以附加的调试器
  • tee将stdout复制到磁盘,所以如果我想回去查看日志,我可以,但我不希望在终端中看到完整的ndjson记录
  • bunyan -o short 给我漂亮的打印输出到我的终端,这是我想要的本地开发