我正在使用Winston日志记录我的Node.js应用程序,并定义了一个文件传输。在我的代码中,我使用 logger.error
,logger.warn
或logger.info
进行日志记录。
我的问题是,如何指定日志级别?是否有配置文件和值可以设置,以便仅记录适当的日志消息?例如,在开发环境中,我希望日志级别为“info”,但在生产环境中为“error”。
如果您正在使用默认记录器,您可以像这样调整日志级别:
const winston = require('winston');
// ...
winston.level = 'debug';
将日志级别设置为“debug”(已在winston 0.7.3中进行了测试,默认日志记录器在3.2.1中仍然存在)。
但是,文档建议创建具有适当日志级别的新日志记录器,然后使用该记录器:
const myLogger = winston.createLogger({
level: 'debug'
});
myLogger.debug('hello world');
如果您已经在代码库中使用了默认记录器,则可能需要将所有用法替换为您正在使用的新记录器: the default logger。const winston = require('winston');
// default logger
winston.log('debug', 'default logger being used');
// custom logger
myLogger.log('debug', 'custom logger being used');
看起来在传递的选项中涵盖了一个级别选项,此处有相关说明。
根据该文档:
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方法来在运行时更改。请查看该文档中的使用日志级别部分。
winston有6个默认日志级别:silly=0(最低),debug=1,verbose=2,info=3,warn=4,error=5(最高)
在创建记录器传输时,您可以指定日志级别,例如:
new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })
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');
您可以通过修改适当传输的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';
我猜文件也是类似的操作,但我还没有尝试过。