我一直在查看bunyan是否登录了我的nodejs应用程序。我试过了,一切似乎都很顺利。我在log.child上跳过了log.child,但现在我正在尝试理解如何使用它。我认为它的目的是允许我为日志条目指定一些特殊的标识符,这样我就可以唯一地识别日志是如何与其他日志条目相关联的。
如果是这样的话,我会设想自己在每个请求中都使用log.child:
var bunyan = require('bunyan');
var log = bunyan.createLogger({name: 'myapp'});
router.post('/submit', function(req, res) {
var logChild = log.child({reqId: uuid.v4()});
logChild.info({ req:req }, req.user.name + ' has called /submit');
saveData(req)
.then(function(data) {
logChild.info({data: data}, req.user.name + ' has saved to DB successfully in /submit');
res.json({'success': 'Saved!'});
})
.error(function(err) {
logChild.error({ err: err }, req.user.name + ' has caused an error in /submit ');
res.status(500).json("error": err});
});
});这样,如果用户Bob在30秒内向/submit发布两次帖子,那么日志文件中的两个不同调用之间就会有一些区别。
也就是说,我将看到这样的内容(上下文):
Bob has called /submit uuid: 109156be-c4fb-41ea-b1b4-efe1671c5836
Bob has called /submit uuid: 49dlsd7i-dapd-fdio-fei0-sd59fd0ph34d
Bob has saved to DB successfully in /submit uuid: 109156be-c4fb-41ea-b1b4-efe1671c5836
Bob has caused an error in /submit uuid: 49dlsd7i-dapd-fdio-fei0-sd59fd0ph34d而不是这样(没有上下文):
Bob has called /submit
Bob has called /submit
Bob has saved to DB successfully in /submit
Bob has caused an error in /submit因此,对于我在Nodejs应用程序中的所有路由,我将创建logChild对象,然后使用logChild记录该路由中的条目。
understanding和implementing是否正确地描述了log.child的用例?
发布于 2015-05-18 08:31:57
您似乎在适当地使用log.child。我可以通过将log附加到req对象来帮助您“唯一地识别日志如何与其他日志条目相关联”。这样,如果您有不同的中间件,就可以从多个地方使用相同的唯一id访问同一个记录器。例如:
var log = bunyan.createLogger({name: 'myapp'});
router.use(function(req, res, next) {
req.log = log.child({ user : req.user.id });
});
router.post('/submit', function(req, res) {
req.log.info('submitted request at ' + Date.now());
});现在您将在日志中看到{ user : some_user_id, msg: 'submitted request at 01/03/15' },这使您能够使用req.log对象将请求链中的任何中间件绑定到单个用户。
https://stackoverflow.com/questions/30040602
复制相似问题