我正在开发一个包含多个模块的节点应用程序。我现在正在尝试正确设置日志记录(应该在开始时这样做),并考虑使用Bunyan。
如this answer中所述,或者在每个模块中定义一个新的bunyan logger
实例,是否可以更好地导出其他模块导出然后需要的单个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?
答案 0 :(得分:17)
拥有一个导出然后由其他模块
所需的记录器模块会更好吗?
是即可。越简单越好。这也避免了样板重复日志设置。
另外,我认为所有模块都应该将错误记录到同一个日志文件中,例如, 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
给了我漂亮的打印输出到我的终端,这是我想要的本地开发