如何在Winston / Node.js中设置日志级别?

时间:2013-03-20 22:22:04

标签: node.js express winston

我在我的node.js应用程序中使用winston日志记录并定义了文件传输。在我的代码中,我使用logger.errorlogger.warnlogger.info进行日志记录。

我的问题是,如何指定日志级别?是否有可以设置的配置文件和值,以便只记录相应的日志消息?例如,我希望我的开发环境中的日志级别为“info”,但生产中的“错误”。

5 个答案:

答案 0 :(得分:33)

winston = require('winston');
:
:
winston.level = 'debug';

将日志级别设置为' debug'。 (用winston 0.7.3测试)

答案 1 :(得分:21)

看来在传递的选项here

中有一个关卡选项

从该文件:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ level: 'error' }),
    new (winston.transports.File)({ filename: 'somefile.log' })
  ]
});

现在,这些示例显示了选项对象中的传递级别到控制台传输。当您使用文件传输时,我相信您将传递一个选项对象,该对象不仅包含文件路径,还包含级别。

这应该会导致类似:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
  ]
});

根据该文档,还要注意,从2.0开始,它公开了一个setLevel方法,以便在运行时更改。查看该文档的使用日志级别部分。

答案 2 :(得分:7)

winston有6个默认级别:傻= 0(最低),调试= 1,详细= 2,信息= 3,警告= 4,错误= 5(最高)

在创建记录器传输时,您可以指定日志级别,如:

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })

上面的代码会将日志级别设置为warn,这意味着sillyverboseinfo将不会输出到somefile.log,而warndebugerror会。

您还可以定义自己的级别:

var myCustomLevels = {
  levels: {
    foo: 0,
    bar: 1,
    baz: 2,
    foobar: 3
  }
};

var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels });
customLevelLogger.foobar('some foobar level-ed message');

请注意,最好始终在自己的自定义级别中包含6个预定义级别,以防某个地方使用预定义级别。

答案 3 :(得分:3)

您可以通过修改相应传输的level属性来更改运行时的日志记录级别:

var log = new (winston.Logger)({
    transports: [
        new (winston.transports.Console)({ level : 'silly' })
    ]
});

...

// Only messages with level 'info' or higher will be logged after this.
log.transports.Console.level = 'info';

我想,它对文件的作用相似,但我还没试过。

答案 4 :(得分:0)

如果要动态更改日志级别。就像你需要在短时间内追踪生产问题一样;然后恢复到错误日志级别。您可以使用动态记录器,前提是您可以在网络上公开服务https://github.com/yannvr/Winston-dynamic-loglevel