簡體   English   中英

bunyan log.child正確用例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM