【问题标题】:Recommended way of applying Bunyan to a large node application?将 Bunyan 应用于大型节点应用程序的推荐方式?
【发布时间】:2014-12-26 07:57:22
【问题描述】:

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

按照this answer 中的建议,最好有一个单独的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(以便更好地概述)或者他们应该记录到自己的错误日志中,例如模块1Err.log,模块2Err.log?

【问题讨论】:

    标签: node.js logging bunyan


    【解决方案1】:

    最好有一个单独的记录器模块被导出然后被其他模块需要

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

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

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

    一个额外的小费。在本地开发时,我使用以下方式运行我的应用程序:

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

    【讨论】:

    • 从节点 6.3+ 开始,您可以传递 --inspect 标志来代替 --debug 8011。被Chrome DevTools取代的节点检查器
    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2020-07-06
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多