8

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

最好有一个单独的模块,然后按照这个答案logger中的建议,导出一个模块,然后由其他模块需要,或者直接在每个模块中定义一个新的 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;

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

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

4

1 回答 1

17

有一个单独的记录器模块会更好吗?它被导出然后被其他模块需要

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

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

整个应用程序的一个文件。因为 bunyan 使用 ndjson 格式,所以很容易在需要时过滤主日志文件。我建议直接登录stdout并允许部署环境决定应该去哪里的简单性和灵活性。这对于您可能不需要或不希望磁盘上的日志文件的开发也很方便。upstart类似的工具multilog可以正确地将您的标准输出日志写入磁盘并为您处理日志轮换。

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

node-dev --inspect server.js |\
  tee -a log/app.ndjson.log | bunyan -o short
  • node-dev当我更改代码时自动重启
  • --inspect启用我可以使用 chrome devtools 附加的调试器
  • tee将标准输出复制到磁盘,因此如果我以后确实想返回并查看日志,我可以,但我不想在终端中看到完整的 ndjson 记录
  • bunyan -o short给我漂亮的打印输出到我的终端,这是我想要的本地开发
于 2014-10-30T10:33:32.740 回答