node.js - 使用 nodejs bunyan 正确记录错误?

标签 node.js logging express error-handling bunyan

我通读了 Joyent 的事后调试文章和 they recommended我们使用 bunyan。

他们谈到日志信息的质量非常重要,并且可以在出现错误时帮助解决错误。然后有外部博客网站展示了如何在他们的 Nodejs 应用程序中安装和运行 bunyan,这很好。

但我是新手,对如何有效地使用日志记录一无所知(既特定于 bunyan 又是一般的日志记录实践)。我有三个相互关联的问题。

(1) 我应该使用 bunyan 来记录应用程序中发生的每个操作吗?

即,

router.post('/submit', function(req, res) {
    log.info({ req:req }, req.user.name + ' has called /submit');

    saveData(req)
    .then(function(data) {
        log.info({data: data}, req.user.name + ' has saved to DB successfully in /submit');
        res.json({'success': 'Saved!'});
    })
    .error(function(err) {
        log.error({ err: err }, req.user.name + ' has caused an error in /submit ');
        res.status(500).json("error": err});
    }); 
});

...等等在我的应用程序中的任何地方

(2) 如果是这样,那么我不会得到不连贯的日志输出吗? 例如,如果我们有 3 个并发用户调用 /submit,那么消息可以是:

Alice has called /submit
Bob has called /submit
Alice has caused an error in /submit
Carol has called /submit
Bob has saved to DB successfully in /submit
Carol has saved to DB successfully in /submit

是吗?如果我有一个 Bob 的堆栈跟踪并且我试图在程序中断之前获得系统状态的先验知识,我将不得不以某种方式过滤掉其他人并按时间戳排序以获得连贯的顺序Bob 的事件数?

(3) 我应该使用 bunyan 来记录堆栈跟踪吗? 即,将 err.stack 添加到 bunyan 记录器:

.error(function(err) {
    log.error({ err: err, stacktrace: err.stack }, req.user.name + ' has caused an error in /submit ');
    res.status(500).json("error": err});
});

...或者是否有其他一些标准做法来记录和报告错误(这基本上意味着保存堆栈跟踪?)?

最佳答案

(1) Am I supposed to use bunyan to log every action that happens in my application?

是的,基本上。这有一些更好的要点,但基本上您希望在保持事后调试成功的合理可能性的同时做出良好的信号/噪声权衡。记录太多关于永不失败的代码路径,你会淹没在噪音中。日志记录不够多,您可能对导致问题的原因一无所知。不要太担心这个。这是一种你只有通过经验才能获得的感觉,从日志分析中很容易看出你在哪些地方产生了噪音,并且可以在事后调低或过滤掉它,以及在哪些地方执行了大量复杂的代码而没有记录任何细节,并且您需要在那里添加更多日志记录。

(2) If so, then wouldn't I get log output in disjointed pieces?

是的,但没关系。您使用后处理工具将它们重新连接成更连贯的叙述。常用技术包括记录每个请求的唯一请求 ID 以及 sessionID。这样您就可以过滤单个用户的 session 或仅过滤一个感兴趣的请求。

(3) Should I be using bunyan to log stacktraces?

是的,但是 bunyan 包括错误实例的标准序列化器,所以只需将属性命名为 err 并启用标准序列化器,您就会得到正确记录的错误消息和堆栈跟踪。

关于node.js - 使用 nodejs bunyan 正确记录错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021466/

相关文章:

javascript - 咕噜 watch 不工作

logging - 如何配置 ILogger 以将日志输出到特定文件?

node.js - 在 Mocha 测试期间尝试进行 Mongoose 查询时 promise 超时

javascript - 如何使用加密创建随机盐哈希

node.js - pm2进程停止运行

javascript - for循环nodeJS中的Mongo查询

Java 应用程序架构 - 需要一个日志记录名称,希望保持类解耦

java - 如何在运行时更改特定用户/线程的日志级别

node.js - 表达抛出[object object]错误消息

node.js - 在应用服务器中安装jsreport