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

Python 日志神器 Loguru 超详细使用教程

前言
在 Python 开发中,日志记录是排查问题、监控程序运行的核心工具,但原生 logging 库配置繁琐、语法复杂,新手很难快速上手。Loguru是一款极简、强大、开箱即用的第三方日志库,无需复杂配置,一行代码就能实现专业级日志记录,完美解决原生 logging 的痛点。

Loguru 简介
核心优势:开箱即用、语法简洁、支持彩色输出、自动日志轮转、多进程安全、格式化灵活
适用场景:脚本调试、Web 项目、爬虫、数据分析、生产环境日志监控
替代原生 logging:无需手动创建 Logger、Handler、Formatter,零配置起步

基础使用

  1. 快速输出日志
    从 loguru 导入 logger 对象,直接调用不同级别日志方法,无需任何配置:
fromloguruimportlogger# 不同日志级别(从低到高)logger.trace("这是 trace 级别日志")logger.debug("这是 debug 级别日志")logger.info("这是 info 级别日志")logger.success("这是 success 级别日志")logger.warning("这是 warning 级别日志")logger.error("这是 error 级别日志")logger.critical("这是 critical 级别日志")

运行效果:
控制台自动彩色输出,不同级别日志颜色不同,辨识度拉满
自动包含时间、级别、代码行号、日志内容,信息完整

进阶使用
生产环境中,我们需要将日志写入文件、自动切割日志、自定义格式,Loguru 一行代码就能实现。

  1. 日志写入文件
    使用 logger.add() 方法,指定文件路径即可:
fromloguruimportlogger# 日志写入文件(默认追加模式)logger.add("runtime.log")# 测试日志logger.info("程序启动成功")logger.error("测试错误日志")

运行后,项目根目录会生成 runtime.log 文件,所有日志自动持久化存储。

  1. 自动日志轮转
    避免日志文件过大,Loguru 支持按文件大小、按时间、按日期自动切割日志,无需手动处理:
fromloguruimportlogger# 1. 按文件大小轮转:超过 10MB 自动切割新文件logger.add("size_log.log",rotation="10 MB")# 2. 按时间轮转:每天 0 点生成新日志logger.add("time_log.log",rotation="00:00")# 3. 按时间间隔轮转:每 1 小时切割一次logger.add("interval_log.log",rotation="1 hour")# 4. 保留日志天数:自动删除 7 天前的日志logger.add("retention_log.log",retention="7 days")# 5. 日志文件压缩:自动压缩为 zip 格式logger.add("compress_log.log",compression="zip")
  1. 自定义日志格式
    通过 format 参数自定义日志输出格式,支持时间、级别、文件名、行号、进程 / 线程 ID 等:
fromloguruimportlogger# 自定义日志格式logger.add("format_log.log",format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name}:{line} | {message}",encoding="utf-8"# 解决中文乱码)logger.info("自定义格式日志")logger.error("中文测试:接口请求失败")

格式参数说明:
{time}:日志时间(可自定义格式化)
{level}:日志级别
{name}:模块名
{line}:代码行号
{message}:日志内容
{process}:进程 ID
{thread}:线程 ID

  1. 过滤日志级别
    只输出指定级别的日志,过滤无关信息:
fromloguruimportlogger# 只写入 WARNING 及以上级别的日志到文件logger.add("warning_log.log",level="WARNING")# 控制台仍输出所有级别,文件只记录警告/错误logger.info("这条不会写入文件")logger.warning("这条会写入文件")logger.error("这条会写入文件")

高级特性

  1. 结构化日志
    对接日志分析平台(如 ELK)时,需要结构化日志,Loguru 直接支持:
fromloguruimportlogger# 输出 JSON 格式日志logger.add("json_log.log",serialize=True# 序列化为JSON)logger.info("用户登录",user_id=1001,username="test")
  1. 多文件分类输出
    不同级别日志写入不同文件,方便分类排查:
fromloguruimportlogger# 普通信息日志logger.add("info.log",level="INFO",filter=lambdax:x["level"].name=="INFO")# 错误日志logger.add("error.log",level="ERROR")logger.info("普通业务日志")logger.error("系统错误日志")
  1. 关闭控制台输出
    生产环境无需控制台输出,关闭默认处理器:
fromloguruimportlogger# 关闭默认控制台输出logger.remove()# 仅写入文件logger.add("prod.log")logger.info("生产环境日志,仅写入文件")

生产环境完整实战配置
这是企业项目中最常用的 Loguru 配置,直接复制即可使用:

fromloguruimportloggerimportsys# 1. 关闭默认控制台输出logger.remove()# 2. 控制台输出(彩色,DEBUG级别)logger.add(sys.stdout,level="DEBUG",format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level:8s}</level> | {name}:{line} | {message}",colorize=True)# 3. 文件输出(按天轮转,保留7天,压缩,UTF-8编码)logger.add("logs/app.log",# 建议放在logs文件夹下level="INFO",rotation="00:00",# 每天零点切割retention="7 days",# 保留7天compression="zip",# 压缩历史日志encoding="utf-8",enqueue=True# 多进程安全)# 测试日志if__name__=="__main__":logger.debug("调试模式启动")logger.info("服务启动成功")logger.success("数据库连接完成")logger.warning("磁盘空间不足")logger.error("接口请求超时")

常见问题解决
中文乱码:添加 encoding=“utf-8” 参数
日志不输出:检查是否执行了 logger.remove() 且未添加新处理器
多进程日志丢失:添加 enqueue=True 参数
日志文件不切割:检查 rotation 格式是否正确(如 10 MB、00:00)

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

相关文章:

  • 避坑指南:用Pixhawk 4飞控连接Nooploop TOFSense激光雷达,这些线序错误千万别犯
  • OpenCLI vs agent-browser :小白也能懂的浏览器自动化指南
  • Anthropic 曝光 Claude“绝望代码“:2026 年,这 5 个 AI 创业机会正在闷声发大财
  • 职业院校智慧校园系统采购,为什么要把校企合作项目放在前面?
  • OpenClaw高Token消耗优化:Qwen3-32B私有镜像成本对比
  • 论文阅读:ICLR 2026 Towards Safe Reasoning in Large Reasoning Models via Corrective Intervention
  • RKNN量化终极指南:如何用YOLOv11模型实现嵌入式端最优性能(附Firefly板卡实测)
  • unknown
  • H-第一周
  • CentOS7下CDP7.1.1集群部署全攻略:从系统调优到MySQL配置避坑指南
  • 2026年,揭秘顶尖三角洲俱乐部陪玩:实力与服务的双重艺术
  • OpenClaw+gemma-3-12b-it:24小时监控网站更新并自动通知
  • Python爬虫老被‘踢下线’?试试这个免费的proxy_pool代理池,亲测有效!
  • OpenClaw对接Qwen2.5-VL-7B图文模型:多模态自动化任务实战
  • C++聊天室项目:注册登录接口与 Redis 缓存
  • 2026横向对比5款H5工具,产品介绍页制作,哪款出片更高级?
  • Windows10下YOLOv8-Pose(8.2.10)从零部署:自定义数据集训练与工程化推理实战
  • 3D点云检测实战-Nuscenes数据集解析与Python工具链深度指南
  • Unity HDRP水系统性能避坑指南:从脚本交互到水下渲染,让你的游戏帧率稳如泰山
  • JVM学习-基础篇-垃圾回收
  • OpenClaw浏览器自动化:Qwen3-14B驱动无头爬虫实战
  • 从零开始用JavaScript Canvas画彩虹:理解arc()绘图与颜色渐变
  • HTB——Oopsie
  • Java SpringBoot+Vue3+MyBatis Web在线考试系统系统源码|前后端分离+MySQL数据库
  • 我的CSDN第一篇
  • OpenClaw+千问3.5-35B-A3B-FP8:自动化商品描述生成器
  • TimeGPT新手必看:5分钟搞定token获取与AirPassengers数据集预测实战
  • OpenClaw性能优化:Qwen3-14B镜像的并发请求控制策略
  • Unity2018中SpriteAtlas与AB包的高效集成实践
  • c++如何利用C++23的std--expected重构文件操作的错误管理代码【实战】