更好的解决方案是使用具有格式功能的单个记录器作为“级别过滤器”,以指定哪个传输记录哪个特定级别。这是解决方案(请注意,
levelFilter可以很容易地扩展以接受一系列可接受的级别)。
关键见解是,如果
info格式化程序链未返回任何对象,则不会记录任何内容。
const { createLogger, format, transports } = require('winston');const levelFilter = (level) => format((info, opts) => { if (info.level != level) { return false; } return info; })();const logger = createLogger({ transports: [ new transports.Console({ format: format.combine( levelFilter("info"), format.json() ) }), new transports.File({ filename: "test.log", format: format.combine( levelFilter("error"), format.json() ) }), ]});// onLY is logged to test.loglogger.log({ level: 'error', message: 'abcd'});// onLY is logged to consolelogger.log({ level: 'info', message: '1234'});


