bunyan log.child 正确的用例?

Posted

技术标签:

【中文标题】bunyan log.child 正确的用例?【英文标题】:bunyan log.child correct use case? 【发布时间】:2015-07-14 10:57:58 【问题描述】:

我一直在查看 bunyan 以登录我的 nodejs 应用程序。我试过了,一切似乎都很好。我在log.child 上跳过了a section,但现在我正在尝试了解如何使用它。我认为它的目的是允许我为日志条目指定一些特殊标识符,以便我可以唯一地识别该日志如何与其他日志条目相关联。

如果是这样,我会设想自己在每个请求中使用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的用例?

【问题讨论】:

【参考方案1】:

您似乎正确地使用了 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 对象将请求链中的任何中间件绑定到单个用户。

【讨论】:

以上是关于bunyan log.child 正确的用例?的主要内容,如果未能解决你的问题,请参考以下文章

pytest为什么不能运行指定目录下的用例

包含演示者或返回数据的用例?

[答疑]费用报销系统的用例图

软件测试复习----测试用例的编写

软件测试复习----测试用例的编写

软件测试复习----测试用例的编写