2014-10-30 60 views
8

我正在使用多个模块的节点应用程序。我现在正在尝试正确设置日志记录(应该在开始时这样做),并且正在使用Bunyan。将Bunyan应用于大型节点应用程序的推荐方法?

它会更好,以具有单一的logger模块被导出,然后由其它模块所需的,所建议的在this answer或每个模块中直接定义一个新的布尼安logger实例并相应地配置了吗?为了重用,我想象前者,但我不知道这是否会限制前进。

如果我定义一样,使用它也将与名称filter记录,而它可能会更有意义为每个模块登录到

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; 

然后所有模块的单一记录仪更好地代表自己的名字。

此外,我正确地认为所有模块应该记录错误到相同的日志文件,例如systemErr.log(以允许更好的概述)或者他们是否应该登录到它们自己的错误日志,例如module1Err.log,module2Err.log?

回答

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 
  • node-dev重新启动时我改变代码
  • --inspect使我可以附加到镀铬devtools
  • tee副本标准输出的调试器到磁盘所以如果我想回去,并通过日志在未来的样子,我可以,但我不希望看到我的终端全ndjson记录
  • bunyan -o short给我漂亮打印输出到我的终端这就是我想要的本地开发
+1

从节点6.3+开始,您可以传递'--inspect'标志来代替'--debug 8011'。节点检查器被[Chrome DevTools](https:// medium。COM/@ paul_irish /调试节点-JS-Nightlies版与 - 铬devtools-7c4a1b95ae27) – 2017-08-07 15:03:14

相关问题