本文目录导读:

我来介绍几种在Python中输出彩色日志的方法:
使用ANSI转义码(最基础方法)
import logging
class ColoredFormatter(logging.Formatter):
"""自定义彩色日志格式器"""
# ANSI颜色码
COLORS = {
'DEBUG': '\033[94m', # 蓝色
'INFO': '\033[92m', # 绿色
'WARNING': '\033[93m', # 黄色
'ERROR': '\033[91m', # 红色
'CRITICAL': '\033[95m', # 紫色
}
RESET = '\033[0m'
def format(self, record):
log_color = self.COLORS.get(record.levelname, self.RESET)
message = super().format(record)
return f"{log_color}{message}{self.RESET}"
# 设置日志
handler = logging.StreamHandler()
handler.setFormatter(ColoredFormatter('%(asctime)s - %(levelname)s - %(message)s'))
logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
# 测试
logger.debug("调试信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("严重错误")
使用colorlog库(推荐)
首先安装:
pip install colorlog
import logging
import colorlog
def setup_colored_logging():
"""配置彩色日志"""
# 创建彩色格式化器
formatter = colorlog.ColoredFormatter(
"%(log_color)s%(asctime)s - %(levelname)-8s - %(message)s%(reset)s",
datefmt="%Y-%m-%d %H:%M:%S",
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
},
secondary_log_colors={},
style='%'
)
# 设置处理器
handler = colorlog.StreamHandler()
handler.setFormatter(formatter)
# 配置日志器
logger = colorlog.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger
# 使用
logger = setup_colored_logging()
logger.debug("这是一条调试信息")
logger.info("这是一条普通信息")
logger.warning("这是一条警告信息")
logger.error("这是一条错误信息")
logger.critical("这是一条严重错误")
使用rich库(功能更强大)
安装:
pip install rich
from rich.logging import RichHandler
from rich.console import Console
import logging
# 配置rich日志
logging.basicConfig(
level="NOTSET",
format="%(message)s",
datefmt="[%X]",
handlers=[RichHandler(rich_tracebacks=True)]
)
logger = logging.getLogger("rich")
logger.debug("调试信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("严重错误")
高级示例:自定义彩色日志类
import logging
import sys
from datetime import datetime
class CustomColoredFormatter(logging.Formatter):
"""自定义高级彩色日志格式器"""
# ANSI颜色代码
COLORS = {
'DEBUG': '\033[36m', # 青色
'INFO': '\033[32m', # 绿色
'WARNING': '\033[33m', # 黄色
'ERROR': '\033[31m', # 红色
'CRITICAL': '\033[35m', # 紫色
}
# 背景色
BG_COLORS = {
'CRITICAL': '\033[41m', # 红色背景
'ERROR': '\033[101m', # 亮红色背景
}
# 文本样式
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
RESET = '\033[0m'
def format(self, record):
# 获取颜色
level_color = self.COLORS.get(record.levelname, '')
bg_color = self.BG_COLORS.get(record.levelname, '')
# 格式化时间
record.asctime = self.formatTime(record, '%Y-%m-%d %H:%M:%S')
# 构建带颜色的消息
level_name = f"{level_color}{bg_color}{self.BOLD}{record.levelname:8}{self.RESET}"
message = f"{level_color}{record.getMessage()}{self.RESET}"
return f"{record.asctime} - {level_name} - {message}"
def setup_logger(name=__name__):
"""设置彩色日志系统"""
# 创建日志器
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
# 创建控制台处理器
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.DEBUG)
# 设置格式化器
formatter = CustomColoredFormatter()
console_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(console_handler)
return logger
# 使用示例
if __name__ == "__main__":
logger = setup_logger(__name__)
logger.debug("数据库查询完成")
logger.info("用户登录成功")
logger.warning("磁盘空间不足,还剩10%")
logger.error("无法连接到数据库")
logger.critical("系统崩溃,需要立即修复!")
Windows兼容方案
Windows终端可能不支持ANSI颜色码,可以使用colorama库:
pip install colorama
import logging
from colorama import init, Fore, Back, Style
# 初始化colorama(Windows支持)
init(autoreset=True)
class ColoramaFormatter(logging.Formatter):
def format(self, record):
# 根据不同级别设置颜色
if record.levelno == logging.DEBUG:
prefix = Fore.CYAN
elif record.levelno == logging.INFO:
prefix = Fore.GREEN
elif record.levelno == logging.WARNING:
prefix = Fore.YELLOW
elif record.levelno == logging.ERROR:
prefix = Fore.RED
else:
prefix = Fore.MAGENTA + Back.RED
message = super().format(record)
return f"{prefix}{message}{Style.RESET_ALL}"
# 配置
handler = logging.StreamHandler()
handler.setFormatter(ColoramaFormatter('%(asctime)s - %(levelname)s - %(message)s'))
logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info("彩色日志输出成功!")
推荐选择
- 简单需求:使用ANSI转义码
- 标准方案:使用
colorlog库 - 功能丰富:使用
rich库 - Windows兼容:使用
colorama
选择哪种方法取决于你的具体需求和项目环境。colorlog通常是最好的平衡点,既简单又功能完善。