You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:45:04