本文目录导读:

我来介绍几种在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通常是最好的平衡点,既简单又功能完善。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播