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

Sil*_*ser 29 node.js express winston

我在我的node.js应用程序中使用winston日志记录并定义了文件传输.在我的代码,我登录使用两种logger.error,logger.warnlogger.info.

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

And*_*zsa 34

winston = require('winston');
:
:
winston.level = 'debug';
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,这是正确的答案,其他的需要创建一个新的记录器,而不是调整由winston创建的现有默认记录器的设置. (2认同)
  • @RudolfOlah正确的答案是文档建议的,即创建一个新的记录器。动态更改默认记录器(或任何其他已创建的日志记录实例)的日志级别已在温斯顿的 github 问题中讨论过无数次,结果在大多数情况下 - 虽然它可能适用于大多数甚至最近/当前版本 - 到不这样做。不要仅仅因为某个答案更符合您的个人偏好而称其为“正确”。然而,winston 周围有一些库提供了此功能。 (2认同)

bry*_*mac 22

看起来在这里涵盖的选项中有一个级别选项

从那个文档:

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

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

这应该导致类似于:

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

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


Che*_*hen 8

winston中有6个默认级别:silly = 0(最低),debug = 1,verbose = 2,info = 3,warn = 4,error = 5(最高)

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

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })
Run Code Online (Sandbox Code Playgroud)

上面的代码将日志级别设置为warn,这意味着silly,verbose并且info不会输出到somefile.log warn,debug而且error将会.

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

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');
Run Code Online (Sandbox Code Playgroud)

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

  • 对不起,但是@Chen错了.调试低于详细.建议编辑. (3认同)