我刚刚实现了Winston Logging,它可以按预期工作,但是遇到了一些我找不到答案的问题。
据我所知,winston的工作方式是设置的日志级别,以及使用优先级以下的任何东西,例如出错时,它还将包括信息日志等。是否有一种创建特定日志级别的方法可以称之为HTTP还是db,我只将http或db事件记录到日志中,而它们并没有出现在合并的文件或控制台中?
更好的解决方案是使用具有格式功能的单个记录器作为“级别过滤器”,以指定哪个传输记录哪个特定级别。这是解决方案(请注意,levelFilter可以很容易地扩展以接受一系列可接受的级别)。
levelFilter
关键见解是,如果info格式化程序链未返回任何对象,则不会记录任何内容。
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.log logger.log({ level: 'error', message: 'abcd' }); // ONLY is logged to console logger.log({ level: 'info', message: '1234' });