loguru 是一个为简化 Python 日志记录而设计的第三方库,其核心优势是开箱即用,无需复杂配置即可开始记录日志。
它旨在让日志记录变得和print()一样简单,同时又具备生产环境所需的强大功能。
注意: 我们在进行python开发的时候, 经常会在代码中写print(xxx), 因为我们想在代码执行的时候, 打印一些信息, 帮助我们进行判断. 但是print()这个函数确实功能比较单一. 而且对于任何的信息没有区分性.
1/Loguru 的核心特点
下表是它相较于 Python 标准 logging 模块的主要优势:
| 特点 | 说明 |
|---|---|
| 开箱即用 | 导入后无需配置处理器、格式化器,可直接记录日志。 |
| 强大的文件管理 | 支持按时间、文件大小滚动日志,自动压缩、定时删除旧文件。 |
| 优雅的格式化 | 默认输出带颜色的高亮日志,使用 {} 进行更清晰的字符串格式化。 |
| 更好的异常捕获 | 通过装饰器自动捕获并记录异常完整的堆栈跟踪信息,包括变量值。 |
| 结构化日志 | 支持输出为 JSON 格式,便于后续用工具解析和分析。 |
| 完全兼容标准 logging | 可与 Python 原生的 logging 模块互操作。 |
| 线程/进程安全 | 默认线程安全,通过参数也可支持多进程或异步环境。 |
2/快速上手使用
1. 安装
pip install loguru
2. 基础使用
from loguru import logger
logger.debug("这是一条调试信息")
logger.info("程序启动成功")
logger.warning("磁盘空间不足")
logger.error("连接数据库失败")
logger.success("操作成功!") # Loguru 独有的级别
运行后,终端会输出带颜色、时间、等级和代码位置的信息。
3. 将日志写入文件
from loguru import logger
# 添加一个文件日志 sink,日志将同时输出到终端和文件
logger.add("my_app.log")
logger.info("这条信息会被记录到文件里")
4. 设置日志滚动与保留
# 按大小滚动:超过 10 MB 创建新文件
logger.add("app.log", rotation="10 MB")
# 按时间滚动:每天中午创建新文件
logger.add("app.log", rotation="12:00")
# 保留策略:最多保留 7 个旧日志文件
logger.add("app.log", retention=7)
# 自动压缩:滚动后的旧日志自动压缩为 .zip
logger.add("app.log", compression="zip")
5. 捕获异常
使用 @logger.catch 装饰器,可以自动记录函数内发生的异常及其完整堆栈。
@logger.catch
def risky_operation(x, y):
return x / y
risky_operation(1, 0) # 会自动记录 ZeroDivisionError
3/进阶使用技巧
- 自定义格式:通过
format参数可以完全控制日志输出的样式。 - 结构化日志:添加
serialize=True参数,日志会以 JSON 格式输出,方便集成到日志分析系统(如 ELK)。 - 上下文绑定:使用
logger.bind(user_id=123)可以为一系列日志添加固定的上下文信息。 - 在库中使用:如果你是库的开发者,应使用
logger.disable(__name__)来默认禁用日志,将控制权交给应用的使用者。
4/如何选择:loguru 还是 logging?
- 选择 Loguru:如果你追求快速上手、配置简单、功能强大,或者厌倦了
logging模块的复杂配置,loguru 是绝佳选择。它特别适合脚本、中小型应用和需要快速实现可靠日志的场景。 - 使用标准 logging:如果你的项目深度依赖或必须遵循复杂的现有 logging 配置,或者是一个需要极其精细控制底层日志流程的大型框架或平台。
总结来说,loguru 通过极简的API封装了强大的功能,能显著提升开发效率和日志可读性。