rub*_*lex 9 javascript logging node.js express bunyan
我一直在寻找bunyan
登录我的nodejs应用程序.我试了一下,一切似乎都很好.我已经跳过了一节的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});
});
});
Run Code Online (Sandbox Code Playgroud)
这样,如果用户在30秒范围内Bob
POST /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
Run Code Online (Sandbox Code Playgroud)
而不是这个(没有上下文):
Bob has called /submit
Bob has called /submit
Bob has saved to DB successfully in /submit
Bob has caused an error in /submit
Run Code Online (Sandbox Code Playgroud)
对于我的Nodejs应用程序中的所有路由,我将创建该logChild
对象,然后使用该对象logChild
记录该路由中的条目.
我是否理解并正确实施了用例log.child
?
sab*_*gen 11
您似乎正在适当地使用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());
});
Run Code Online (Sandbox Code Playgroud)
现在{ user : some_user_id, msg: 'submitted request at 01/03/15' }
,您将在日志中看到,通过使用该req.log
对象,您可以将请求链中的任何中间件绑定到单个用户.
归档时间: |
|
查看次数: |
2344 次 |
最近记录: |