[英]bunyan log.child correct use case?
我一直在看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});
});
});
這樣,如果用戶Bob
在30秒范圍內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
而不是這個(沒有上下文):
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
記錄該路由中的條目。
我是否正確理解並實現了log.child
的用例?
您似乎正在適當地使用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
對象將請求鏈中的任何中間件綁定到單個用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.