我正在开发一个具有多个模块的节点应用程序。我现在正在尝试正确设置日志记录(应该在一开始就这样做),并考虑使用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;
然后,所有使用它的模块也将使用名称filter
进行日志记录,而对于每个模块来说,使用更能代表其自身的名称进行日志记录可能更有意义。
此外,我认为所有模块都应该将错误记录到同一日志文件中,例如systemErr.log(以便更好地概述),还是应该记录到自己的错误日志中,例如module1Err.log、module2Err.log,这是对的?
最好是有一个导出的记录器模块,然后由其他模块要求
是。越简单越好。这也避免了日志设置的样板重复。
此外,我认为所有模块都应该将错误记录到同一日志文件中,例如systemErr.log(以便更好地概述),还是应该记录到自己的错误日志中,例如module1Err.log、module2Err.log,这是对的?
整个应用程序的一个文件。因为bunyan使用ndjson格式,所以在需要的时候过滤主日志文件非常容易。我建议直接向stdout
日志记录的简单性和灵活性,并允许部署环境决定它应该去哪里。这对于您可能不需要或不希望磁盘上的日志文件的开发也很方便。像upstart
和multilog
这样的工具可以正确地将stdout日志写入磁盘,并为您处理日志轮换。
一个额外的提示。在本地开发时,我用这样的东西运行我的应用程序:
node-dev --inspect server.js |
tee -a log/app.ndjson.log | bunyan -o short
- 更改代码时
node-dev
自动重新启动 --inspect
启用调试器,我可以使用chrome devtools连接到该调试器tee
将stdout复制到磁盘,所以如果我将来真的想回去查看日志,我可以,但我不想在我的终端中看到完整的ndjson记录bunyan -o short
为我的终端提供了漂亮的打印输出,这正是我想要的本地开发