深入详解Python日志配置模板的全攻略
作者:哆啦de梦
这篇文章主要为大家详细介绍了Python一个完整项目日志配置模板,包括YAML配置, Python加载脚本和使用示例,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
下面是一个 完整项目日志配置模板(含 YAML 配置 + Python 加载脚本 + 使用示例),支持:
- 多 handler(控制台 + 文件)
- 统一日志格式
- 模块化 logger
propagate=True,日志可传递- 支持日志轮转(按大小)
- 可热重载(通过
dictConfig)
项目结构建议
project/
├── config/
│ └── logging.yaml # 日志配置文件
├── src/
│ ├── __init__.py
│ ├── app/
│ │ ├── __init__.py
│ │ ├── api.py
│ │ └── db.py
│ └── main.py
├── logs/
│ └── app.log # 自动创建
└── requirements.txt
1.config/logging.yaml
version: 1
formatters:
standard:
format: "%(asctime)s | %(name)s | %(levelname)s | %(funcName)s:%(lineno)d | %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S"
simple:
format: "%(name)s | %(levelname)s | %(message)s"
handlers:
console:
class: logging.StreamHandler
level: INFO
formatter: simple
stream: ext://sys.stderr
file:
class: logging.handlers.RotatingFileHandler
level: DEBUG
formatter: standard
filename: logs/app.log
maxBytes: 10485760 # 10MB
backupCount: 5 # 保留 5 个旧日志文件
loggers:
app:
level: DEBUG
handlers: [console, file]
propagate: true # 重要:让日志传给 root
app.api:
level: DEBUG
handlers: [console, file]
propagate: true
app.db:
level: DEBUG
handlers: [console, file]
propagate: true
app.utils:
level: INFO
handlers: [console, file]
propagate: true
root:
level: DEBUG
handlers: [console, file]
propagate: false # 一般不建议设为 false,除非你明确不想传
说明:
RotatingFileHandler自动轮转日志,避免文件过大propagate: true确保子 logger 日志能传给 rootroot的propagate: false是为了防止日志无限循环(安全做法)
2.src/main.py—— 启动入口配置日志
import logging.config
import yaml
import os
# 确保 logs 目录存在
os.makedirs("logs", exist_ok=True)
# 加载 YAML 配置
def setup_logging(config_path="config/logging.yaml"):
with open(config_path, "r", encoding="utf-8") as f:
config = yaml.safe_load(f)
logging.config.dictConfig(config)
print("✅ 日志系统已配置完成!")
# 启动时调用
if __name__ == "__main__":
setup_logging()
logger = logging.getLogger("app")
logger.info("🚀 应用启动成功!")
logger.debug("调试信息:初始化完成")
3.src/app/api.py—— 模块内使用日志
import logging
logger = logging.getLogger("app.api") # 模块化命名
def get_user(user_id: int):
logger.debug("开始查询用户,user_id=%d", user_id)
try:
# 模拟数据库查询
user = {"id": user_id, "name": "张三"}
logger.info("成功查询用户: %s", user)
return user
except Exception as e:
logger.error("查询用户失败,user_id=%d, 错误: %s", user_id, str(e))
raise
4.requirements.txt
PyYAML>=6.0
输出效果示例
运行 python src/main.py 输出:
✅ 日志系统已配置完成!
2026-02-06 15:10:22 | app | INFO | __main__:<module> | 🚀 应用启动成功!
查看 logs/app.log:
2026-02-06 15:10:22 | app.api | DEBUG | get_user:10 | 开始查询用户,user_id=123
2026-02-06 15:10:22 | app.api | INFO | get_user:13 | 成功查询用户: {'id': 123, 'name': '张三'}
5.模板亮点总结
| 亮点 | 说明 |
|---|---|
| 一个 root + 多子 logger | 模块清晰,便于追踪 |
| YAML 配置,可读性强 | 易于维护、团队协作 |
| 日志轮转(10MB) | 防止日志文件过大 |
| 统一日志格式 | 便于 ELK/Sentry 等工具解析 |
| 仅配置一次,全局生效 | 安全,无重复 handler |
| 支持 loguru 的平滑迁移 | 如后续改用 loguru,只需替换 logging 调用即可 |
到此这篇关于深入详解Python日志配置模板的全攻略的文章就介绍到这了,更多相关Python日志配置模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
