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

如何使用Winston为日志中的变量设置不同显示颜色?

Winston实现日志消息与变量不同颜色的方法

要让Winston日志里的消息和变量显示不同颜色,核心是在格式化环节单独对变量应用颜色样式,再与消息拼接输出。以下是具体实现方案:

1. 准备依赖(可选)

如果需要更丰富的颜色样式,可以安装chalk:

npm install chalk

如果用Winston自带的颜色工具,无需额外安装。

2. 修改Winston配置,添加变量着色逻辑

假设你已有包含自定义级别、时间格式化的基础配置,直接修改格式化部分即可:

方案一:使用chalk实现变量着色

const winston = require('winston');
const chalk = require('chalk');

// 自定义日志级别
const customLevels = {
  levels: {
    error: 0,
    warn: 1,
    info: 2,
    debug: 3
  },
  colors: {
    error: 'red',
    warn: 'yellow',
    info: 'green',
    debug: 'blue'
  }
};

winston.addColors(customLevels.colors);

const logger = winston.createLogger({
  levels: customLevels.levels,
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.printf(({ timestamp, level, message, ...vars }) => {
      // 消息用对应级别的颜色
      const coloredMessage = winston.config.colorize(level, message);
      // 变量统一用青色(可自行调整)
      let coloredVars = '';
      if (Object.keys(vars).length > 0) {
        coloredVars = chalk.cyan(` ${JSON.stringify(vars)}`);
      }
      return `[${timestamp}] ${coloredMessage}${coloredVars}`;
    })
  ),
  transports: [
    new winston.transports.Console({
      // 确保控制台支持颜色输出
      format: winston.format.colorize({ all: false })
    })
  ]
});

// 测试调用
logger.info('用户登录成功', { userId: 123, username: 'john_doe' });
logger.warn('磁盘空间不足', { used: '85%', total: '100GB' });

方案二:使用Winston内置颜色工具

不想额外安装依赖的话,直接用Winston自带的colorize方法:

// 其他配置与方案一一致,仅修改printf部分
winston.format.printf(({ timestamp, level, message, ...vars }) => {
  const coloredMessage = winston.config.colorize(level, message);
  let coloredVars = '';
  if (Object.keys(vars).length > 0) {
    // 用内置的cyan颜色给变量上色
    coloredVars = winston.config.colorize('cyan', ` ${JSON.stringify(vars)}`);
  }
  return `[${timestamp}] ${coloredMessage}${coloredVars}`;
})

关键细节

  • 变量提取:通过...vars解构出所有额外传入的变量参数,确保所有需要着色的内容都被捕获
  • 颜色开关:控制台传输器里设置colorize({ all: false }),避免全局颜色覆盖我们自定义的样式
  • 颜色自定义:可根据需求调整变量颜色,比如chalk支持chalk.magenta()、chalk.whiteBright(),Winston内置支持的颜色包括'red'、'yellow'、'green'、'blue'、'cyan'、'magenta'等

内容的提问来源于stack exchange,提问作者Lauty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:43:15