Python 的 logging 输出如何加颜色?
Python 日志加颜色:colorlog 库一行配置即彩色输出,或自定义 Formatter 插入 ANSI 转义码。注意仅终端启用、写文件时禁用。本文给出两种实现。
最省事:装 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() 转换。