Python 的 logging 输出如何加颜色?

Python 日志加颜色:colorlog 库一行配置即彩色输出,或自定义 Formatter 插入 ANSI 转义码。注意仅终端启用、写文件时禁用。本文给出两种实现。

最佳实践
Python 的 logging 输出如何加颜色?封面

最省事:装 colorlog 库——ColoredFormatter 按级别自动配色;零依赖方案是自定义 Formatter 塞 ANSI 转义码。

方案一:colorlog(推荐)

pip install colorlog
import colorlog

handler = colorlog.StreamHandler()
handler.setFormatter(colorlog.ColoredFormatter(
    '%(log_color)s%(asctime)s [%(levelname)s]%(reset)s %(message)s',
    log_colors={
        'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'yellow',
        'ERROR': 'red', 'CRITICAL': 'bold_red',
    }))

logger = colorlog.getLogger(__name__)
logger.addHandler(handler)
logger.error('这是红色错误')

方案二:手写 ANSI

import logging

COLORS = {'WARNING': '\033[33m', 'ERROR': '\033[31m'}
RESET = '\033[0m'

class ColorFormatter(logging.Formatter):
    def format(self, record):
        msg = super().format(record)
        return COLORS.get(record.levelname, '') + msg + RESET

h = logging.StreamHandler()
h.setFormatter(ColorFormatter('%(levelname)s: %(message)s'))

重要提醒

写日志文件时不要带颜色——ANSI 码会变成文件里的乱码 [31m。控制台 handler 加颜色,文件 handler 不加。

观测云对照

日志上报观测云后按 status 字段自动着色显示(error 红、warning 黄),无需 ANSI 码。

常见问题(FAQ)

Q:Windows 终端不支持颜色? 新版 Terminal 支持;老 cmd 可先 colorama.init() 转换。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台