python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python日志配置模板

深入详解Python日志配置模板的全攻略

作者:哆啦de梦

这篇文章主要为大家详细介绍了Python一个完整项目日志配置模板,包括YAML配置, Python加载脚本和使用示例,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

下面是一个 完整项目日志配置模板(含 YAML 配置 + Python 加载脚本 + 使用示例),支持:

项目结构建议

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,除非你明确不想传

说明:

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日志配置模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文