在接口自动化框架中,日志记录是一个非常重要的部分。它不仅能够帮助我们调试和诊断问题,还能提供重要的运行时信息,以便后续分析和改进。为了更好地管理和使用日志,我们可以进行日志封装。本文将介绍一个基于 Loguru 库的日志封装实现。
在这篇文章中,我们使用了 Loguru 库来实现日志封装。具体的实现如下
1. 初始化日志处理器:
from loguru import logger
from datetime import datetime
import sys
from common.path_util import join_path_with_project_root
from common.config_loader import get_config
class LoguruHandler:
def __init__(self):
# 加载日志配置
self.config = get_config().logging
# 确保日志目录存在,如果不存在则创建
self.BASE_PATH = join_path_with_project_root(self.config.log_dir)
self.BASE_PATH.mkdir(parents=True, exist_ok=True)
# 调用配置日志器的函数
self.setup_logger()
1. 在初始化时,首先加载日志配置并确保日志目录存在。如果不存在,则创建日志目录。
2. 配置日志器:
def setup_logger(self):
# 获取当前日期,用于日志文件名
date_str = datetime.now().strftime("%Y-%m-%d")
# 定义日志格式
log_format = (
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:"
"<cyan>{file.path}</cyan>:<cyan>{line}</cyan> | "
"<magenta>{thread.name}</magenta> - <green><level>{message}</level></green>"
)
# 移除所有已存在的日志处理器
logger.remove()
# 控制台输出配置,使用标准错误流,确保彩色输出
logger.add(sys.stderr, format=log_format, colorize=True, level=self.config.log_level)
# 配置各个级别的日志处理器,记录到不同的文件,并确保对应级别的日志输出到对应级别
logger.add(
self.BASE_PATH / f"debug_{date_str}.log",
rotation=self.config.log_rotation, # 日志文件轮转周期
compression="zip", # 日志文件压缩格式
level="DEBUG", # 日志级别
format=log_format, # 日志格式
retention=self.config.log_retention, # 日志保留周期
filter=lambda record: record["level"].name == "DEBUG" # 仅记录DEBUG级别的日志
)
# 类似配置其他级别的日志处理器
2. 我们定义了一个详细的日志格式,并移除了所有已存在的日志处理器。然后,我们分别为不同的日志级别(DEBUG、INFO、WARNING、ERROR)配置了不同的日志文件处理器,每个处理器只记录相应级别的日志。
3. 获取日志记录函数:
@classmethod
def get_loggers(cls):
# 使用 lambda 函数创建简单的绑定级别的日志函数
return (
lambda message: logger.opt(depth=1).bind(level="DEBUG").debug(message),
lambda message: logger.opt(depth=1).bind(level="INFO").info(message),
lambda message: logger.opt(depth=1).bind(level="WARNING").warning(message),
lambda message: logger.opt(depth=1).bind(level="ERROR").error(message)
)
3. 我们使用 lambda 函数创建了简洁的日志记录函数,并将这些函数与不同的日志级别绑定,方便在代码中直接调用。
优点和好处
1. 日志配置集中管理:
• 通过封装日志配置,可以集中管理日志格式、日志级别、日志输出路径等配置,便于维护和修改。
2. 不同级别日志分文件存储:
• 将不同级别的日志分别存储在不同的文件中,方便查找和分析特定级别的日志信息,提高调试效率。
3. 彩色输出:
• 控制台日志输出使用彩色显示,增强日志的可读性,方便快速定位重要信息。
4. 自动文件轮转和压缩:
• 配置了日志文件的轮转和压缩,可以有效管理日志文件大小,防止日志文件过大导致磁盘空间不足。
5. 灵活的日志记录函数:
• 通过 lambda 函数创建简洁的日志记录函数,使得在代码中记录日志变得非常方便,提升了开发效率。
使用
在实际使用中,只需实例化日志处理器并获取各级别的日志记录函数即可:
# 实例化日志处理器
log_handler = LoguruHandler()
# 获取各级别的日志记录函数
DEBUG, INFO, WARNING, ERROR = log_handler.get_loggers()
# 示例日志记录
DEBUG("这是一个调试日志")
INFO("这是一个信息日志")
WARNING("这是一个警告日志")
ERROR("这是一个错误日志")