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

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

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

看起来像这里通过的选项中有一个级别的选项

从那个文件:

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

现在,这些示例将选项对象中的传递级别显示给控制台传输。 当你使用文件传输,我相信你会传递一个选项对象,不仅包含文件path,而且还包括关卡。

这应该导致类似于:

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

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

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

将日志级别设置为“debugging”。 (用winston 0.7.3testing)

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

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

 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个预定义级别,以防某些地方使用了预定义的级别。

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

 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'; 

我想,它的工作方式类似的文件,但我没有尝试过。

如果您想要dynamic更改日志级别。 就像你需要在短时间内追踪生产问题; 然后恢复到错误日志级别。 您可以使用dynamiclogging器,只要您可以在Web上公开服务https://github.com/yannvr/Winston-dynamic-loglevel