Winstonjs单个Console传输下如何为不同日志级别设置不同格式
你的需求可以通过Winston原生的自定义格式功能实现,不需要提交issue,有两种常用实现方式:
方案1:同一传输器内按级别动态切换格式
直接在format中插入自定义判断逻辑,针对header级别单独启用全量染色,其余级别保持默认染色规则。
修改后的完整代码如下:
import Winston, { createLogger, format, transports } from 'winston'; const levels = { levels: { info: 0, header: 1, warn: 2, error: 3, }, colors: { info: 'green', header: 'bold black', warn: 'yellowBG', error: 'red', }, }; // 自定义条件格式 const conditionalFormat = format.combine( format.align(), // 插入自定义判断逻辑 format((info, opts) => { if (info.level === 'header') { // header级别全量染色 return format.colorize({ all: true }).transform(info, opts); } // 其余级别仅染色level字段 return format.colorize().transform(info, opts); })() ); const logger = createLogger({ levels: levels.levels, transports: [ new transports.Console({ level: 'error', format: conditionalFormat }) ] }); Winston.addColors(levels.colors);
方案2:单条日志自定义专属格式
如果仅需要少数特殊日志单独设置格式,可以在调用日志方法时直接传入format参数,该格式仅对当前日志生效:
// 普通header日志用默认规则 logger.header('普通header日志'); // 需要特殊格式的header日志单独传入format配置 logger.log({ level: 'header', message: '需要全量加粗的header日志', format: format.colorize({ all: true }) });
两种方案都可以实现你要的效果,优先推荐方案1,统一在全局配置规则,后续不需要在打日志时额外传参。
内容的提问来源于stack exchange,提问作者Seth Lutske
相关产品推荐
相关产品推荐

