【问题标题】:Show debug messages in console in bunyan在 bunyan 的控制台中显示调试消息
【发布时间】:2016-02-08 16:12:15
【问题描述】:
child.log.info('info');
child.log.debug('debug');

我使用以下命令:

node app.js | bunyan -o short -l debug

但它只显示 INFO。不显示调试。我想在控制台中显示调试消息,我做错了什么?

【问题讨论】:

    标签: javascript node.js logging bunyan


    【解决方案1】:

    创建记录器时,使用 level 选项设置 bunyan 发出日志消息的级别:

    var log = bunyan.createLogger({ level: "debug" });
    

    同样,使用level 选项设置子记录器发出日志消息的级别:

    var child = log.child({ level: "debug" });
    

    在实例化时设置的level 选项决定了 bunyan 发出的日志消息的最低级别。

    命令行开关-l(或--level)只是一个过滤器;它允许通过在给定级别或更高级别发出的消息。 但是,它没有设置 bunyan 实例发出的日志消息的最低级别。

    例如,假设我想要一个 bunyan 实例,它发出 "debug" 或更高级别的日志消息。我可以在main.js

    var bunyan = require("bunyan");
    var log = bunyan.createLogger({ level: "debug" });
    
    log.trace("Nitty gritty info here.");
    log.debug("Eek ork op.");
    log.info("The Red Zone is for loading and unloading only.");
    

    如果我从命令行运行以下命令:

    node main.js | bunyan
    

    我会在输出中看到这个:

    Eek ork op.
    The Red Zone is for loading and unloading only.
    

    请注意,我没有从命令行过滤任何内容,并且对 log.trace() 的调用也没有打印任何内容。

    现在,在命令行中输入:

    node main.js | bunyan -l "debug"
    

    你会得到:

    Eek ork op.
    The Red Zone is for loading and unloading only.
    

    和以前一样。

    现在,试试:

    node main.js | bunyan -l "trace"
    

    你仍然会得到和以前一样的输出。

    为什么?因为您的 bunyan 实例设置为在 "debug" 或更高级别发出消息。命令行开关-l 只是一个过滤器。

    最后,试试:

    node main.js | bunyan -l "info"
    

    这一次,你只会看到:

    The Red Zone is for loading and unloading only.
    

    log.debug() 的调用被过滤掉了。

    【讨论】:

    【解决方案2】:

    在为不同的日志级别创建流时,创建用于调试的流

     bunyan.createLogger({
        name: <name>,
        streams: [{
            level : 'debug',
            stream : process.stdout
        }]
    });
    

    使用它,您的所有调试日志都将流式传输到控制台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多