当前位置: 代码网 > it编程>前端脚本>Python > 深入详解Python日志配置模板的全攻略

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

2026年03月03日 Python 我要评论
下面是一个 完整项目日志配置模板(含 yaml 配置 + python 加载脚本 + 使用示例),支持:多 handler(控制台 + 文件)统一日志格式模块化 loggerpropagate=tru

下面是一个 完整项目日志配置模板(含 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 日志能传给 root
  • rootpropagate: 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日志配置模板内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com