1. 项目概述:一个勉强及格的Python日志模块
在Python项目开发中,日志记录是每个开发者都绕不开的基础设施。最近我整理了一个自用的logger_handler.py模块,虽然在小项目中勉强够用,但离工业级解决方案还有不小差距。如果用满分100分来评价,这个模块大概只能得60分 - 它能工作,但远非完美。
这个通用日志模块基于Python标准库的logging模块构建,主要解决了以下痛点:
- 快速初始化基础日志配置
- 统一控制台和文件输出格式
- 简单的日志分级和轮转功能
- 避免在每个文件中重复配置日志
注意:这个模块更适合个人项目或小型应用,对于需要分布式日志收集、结构化日志或高性能场景的企业级应用,建议考虑更专业的方案如loguru或structlog。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心设计解析
2.1 基础架构设计
模块的核心是一个LoggerHandler类,它封装了以下功能:
python复制class LoggerHandler:
def __init__(self,
name: str = 'root',
level: int = logging.INFO,
fmt: str = None,
datefmt: str = None,
filename: str = None,
mode: str = 'a',
max_bytes: int = 10*1024*1024,
backup_count: int = 5):
"""初始化日志处理器"""
self.logger = logging.getLogger(name)
...
参数说明:
name: 日志器名称,默认'root'表示根日志器level: 日志级别,默认INFOfmt: 日志格式字符串datefmt: 日期格式字符串filename: 日志文件名(None表示不写入文件)mode: 文件打开模式max_bytes: 日志轮转大小(字节)backup_count: 保留的日志文件数量
2.2 日志格式设计
默认的日志格式考虑了大多数场景的基本需求:
python复制DEFAULT_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
DEFAULT_DATEFMT = '%Y-%m-%d %H:%M:%S'
这个格式包含了
