在bunyan的控制台中显示调试消息

时间:2016-02-08 16:12:16

标签: javascript node.js logging bunyan

child.log.info('info');
child.log.debug('debug');

我使用以下命令:

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

例如,假设我想要一个发布"debug"级别或更高级别的日志消息的bunyan实例。我可以在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()的来电。

答案 1 :(得分:0)

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

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

使用此所有调试日志将流式传输到控制台。