当前位置: 首页 > news >正文

Django 用 Loguru 完美替换标准 Logging,实现优雅的日志管理方案

Django 用 Loguru 完美替换标准 Logging,实现优雅的日志管理方案

这篇文章将详细拆解如何将强大的loguru库深度集成到 Django 项目中,彻底解决原生logging配置冗长、难以维护的痛点。


为什么要进行方案替换

Django 默认的日志配置通过LOGGING字典实现,嵌套层级多且语法繁琐。相比之下,loguru提供了更直观的 API 和自动化的日志轮转管理。

核心技术要点

  • 全量拦截:通过自定义InterceptHandler类,将 Django 内置、Gunicorn 容器以及第三方库产生的标准logging消息全部重定向至loguru

  • 精准溯源:利用sys._getframe动态查找调用栈,确保日志中显示的文件名和行号是真实的业务逻辑位置,而非拦截器本身。

  • 自动化策略:配置文件输出时,只需一行代码即可实现凌晨定时切割日志(rotation)和 30 天自动清理(retention)。

  • 并发安全:开启enqueue=True选项,利用多线程/进程安全的队列机制,防止高并发下日志写入冲突。

部署实践:一键接管 Django 日志

在项目中创建日志工具模块后,只需在settings.py顶部导入,并设置LOGGING_CONFIG = None即可禁用 Django 原生逻辑。

Python

import os import sys import logging from pathlib import Path from loguru import logger # 路径初始化 BASE_DIR = Path(__file__).resolve().parent.parent log_dir = os.path.join(BASE_DIR, "logs") log_file_path = os.path.join(log_dir, "dt_test.log") if not os.path.exists(log_dir): os.makedirs(log_dir) # 拦截器定义:核心在于深度(depth)的计算 class InterceptHandler(logging.Handler): def emit(self, record): try: level = logger.level(record.levelname).name except ValueError: level = record.levelno frame, depth = sys._getframe(6), 6 while frame and frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage()) # 彻底接管配置 LOGGING_CONFIG = None def setup_loguru(debug_mode: bool = True): logger.remove() log_format = "{time:YYYY-MM-DD HH:mm:ss,SSS} | {level: <8} | {name} [{module}.{function}:{line}] | {message}" # 控制台调试输出 if debug_mode: logger.add(sys.stdout, level="DEBUG", format=log_format, enqueue=True) # 文件持久化配置:支持每天凌晨切割与压缩 logger.add( log_file_path, level="DEBUG", format=log_format, rotation="00:00", retention="30 days", encoding="utf-8", enqueue=True, compression="zip" ) # 重定向系统级日志 logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True) for name in ["django", "django.server", "gunicorn.access", "gunicorn.error"]: _log = logging.getLogger(name) _log.handlers = [InterceptHandler()] _log.propagate = False setup_loguru()

放在settings.py顶部或者原来日志配置信息全部删除后的地方

效果

http://www.jsqmd.com/news/294485/

相关文章:

  • 2026小学辅导机构实测TOP4|宝妈必藏!精准选机构不踩雷
  • 2026年广州节日定制礼盒公司推荐:广州甄选食材有限公司,精品礼盒定制/定制礼盒/礼盒包装定制/包装礼盒定制/高档礼盒定制公司精选
  • 小学辅导机构怎么选?这3个硬指标帮你避坑
  • 2026年保健食品集合店优选:供应链实力大比拼,进口保健食品/保健食品/进口热销品集合店,保健食品集合店加盟代理有哪些
  • 【Django毕设源码分享】基于 Python 的考研学习系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Django毕设源码分享】基于Python的毕业生去向反馈调查平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2026济南雅思培训学校深度测评TOP5:高分提分方案谁更靠谱?
  • 【Django毕设源码分享】基于django的学生选课系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 避坑指南:如何选择靠谱的雅思培训?2026季度综合评分排行榜出炉
  • 救命神器8个AI论文网站,专科生搞定毕业论文不求人!
  • 认识 Promise
  • WebApp 本地部署全景指南(实战版)
  • 雅思课培训机构深度测评排行榜:从行业痛点解析到优选方案(2026版)
  • 吐血推荐!10个AI论文网站测评:本科生毕业论文必备工具
  • 实测封神!2026高中线上补习班TOP5:选对1家,提分少走3年弯路
  • 连接数据库并部署到Linux上使用Docker Compose编排的go语言网络聊天室
  • 性价比高的太原文创伴手礼定制厂家
  • 工程化思维破解协同与锁死难题:Java企业的AI集成新思路
  • 2025年商业邮件诈骗攻击趋势深度解析
  • ijkplayer相关实用链接
  • 云上 + 私有化:Java 企业 AI 模型调用的双向适配方
  • 名校冲刺攻略:揭秘2026高提分培优机构
  • 2026济南雅思培训学校深度测评TOP榜:济南优质机构口碑排名与高效提分方案解析
  • 2026沪上培优大揭秘:这些机构凭实力出圈
  • 全网最全9个一键生成论文工具,自考学生必备!
  • 【2026最新榜单】济南雅思培训机构谁更强?全网深度测评与高分提分方案拆解
  • 一种交互式可解释人工智能方法,用于改进数字细胞病理学癌症亚型分类中的人机协作|文献速递-文献分享 - 教程
  • MATLAB代码:考虑多种天气条件下光伏电站太阳能辐射量预测 关键词:辐射量预测 光伏预测 多...
  • 2026全网雅培训机构深度测评TOP5:高分提分方案权威推荐
  • 完整教程:未来之窗昭和仙君(二十八)商业收银开发音频播放——东方仙盟筑基期