本文目录导读:

Loguru 和 Python 标准库 logging 相比,最大的优势在于 “开箱即用” 和 “零样板代码”,如果你厌倦了 logging 繁琐的配置(Handler、Formatter、Filter),Loguru 几乎是“ICU”级别的救星。
下面从几个核心维度对比它们的好坏:
配置复杂度
-
standard logging:需要手动创建 Logger、Handler、Formatter,并设置级别。
import logging # 标准库需要多行代码 logger = logging.getLogger("my_app") logger.setLevel(logging.DEBUG) handler = logging.StreamHandler() handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.info("Hello") -
Loguru:一行代码搞定。
from loguru import logger logger.info("Hello") # 自带颜色、时间、调用位置胜出点:无需模板代码,
import即可用。
格式化与模板
- standard logging:格式化依赖
%(name)s、%(levelname)s等占位符,很笨重,要输出调用文件和行号,需要额外配置。 - Loguru:默认自带 颜色高亮、时间戳、函数名、行号。
logger.info("User {} logged in from {}", user.name, request.ip) # 自动格式化无需手动拼字符串,传入参数即可,而且还支持 风格(类似
.format()),比 风格更可读。
异常与回溯
-
standard logging:异常回溯默认是一行,很丑,如果想捕获异常堆栈,需要手动设置
exc_info=True。logger.error("Failed", exc_info=True) -
Loguru:自动捕获异常,并且输出漂亮的彩色回溯,显示局部变量。
@logger.catch() # 装饰器,自动捕获并记录 def dangerous_function(): 1 / 0只需一个装饰器就能完整记录异常栈和上下文,这在生产排错时非常强大。
动态级别与过滤
- standard logging:过滤通常需要写 Filter 类,比较繁琐。
- Loguru:直接支持 **lambda 过滤 和 Level 动态绑定。
# 仅记录 DEBUG 级别且包含 "DB" 的日志 logger.add("file.log", filter=lambda record: "DB" in record["message"]) # 动态修改某个 sink 的级别 logger.add("debug.log", level="DEBUG")
多 Sink 支持
- standard logging:需要手动实例化
FileHandler、RotatingFileHandler等。 - Loguru:
add()方法直接支持控制台、文件、网络、队列、TCP、UDP 等。logger.add("file_{time}.log", rotation="500 MB") # 自动轮转 logger.add(sys.stdout, colorize=True) logger.add("error.log", level="ERROR", retention="10 days") # 自动删除旧日志rotation和retention是内置参数,无需手动配置时间轮转逻辑。
序列化与结构化
- standard logging:支持 JSON 序列化但需要额外代码。
- Loguru:内置
serialize=True输出 JSON,适合对接 ELK 或日志分析系统。logger.add("log.json", serialize=True) # 每行一个 JSON 对象
多进程/异步支持
- standard logging:多进程写入容易乱序或丢失。
- Loguru:提供了
enqueue=True参数,自动将日志放入队列,由后台线程写入,保证多进程安全。logger.add("file.log", enqueue=True) # 线程/进程安全
性能
- standard logging:在配置复杂时开销较大。
- Loguru:底层的日志核心使用 C 扩展(通过
better_exceptions和优化的 I/O),在高并发下通常比标准库快,不过对于极高频的日志(如每秒百万条),Loguru 的默认装饰器(如@logger.catch)会比标准库稍重,但大多数业务系统远达不到这个量级。
什么时候用 Loguru 更好?
- 中小型项目、脚本、微服务、数据分析:不想写样板代码,希望快速上线。
- 开发调试:颜色、行号、局部变量捕获对开发效率提升巨大。
- 需要美观的可视化日志:比如在 Jupyter Notebook 或终端中。
什么时候用 standard logging 更好?
- 大型企业项目,已经有成熟日志体系(如
logstash、graylog),且遵循标准接口(logging是标准库,兼容性最强)。 - 严格依赖标准库,不想引入第三方依赖(如某些安全受限环境)。
- 需要对日志进行细粒度控制,比如复杂的 Handler 链、自定义 Filter、与 Django/Flask 的默认日志系统深度集成(虽然 Loguru 也支持 patch)。
总结表
| 维度 | standard logging | Loguru |
|---|---|---|
| 上手难度 | 中等(需配置 Handler/Formatter) | 极低(import 即用) |
| 格式化 | 风格,默认无颜色 | 风格,彩色、自动含行号 |
| 异常回溯 | 手动设置 exc_info |
自动捕获,显示局部变量 |
| 文件轮转 | 手动 RotatingFileHandler |
一行 rotation 参数 |
| 多进程安全 | 需额外加锁 | enqueue=True |
| 过滤 | 写 Filter 类 | Lambda 表达式 |
| 性能 | 中等 | 通常更快(C 扩展) |
| 依赖 | 标准库,无依赖 | 需要 pip 安装,仅 1 个依赖 |
一句话总结:Loguru 在“易用性”、“可读性”、“调试友好度”上完胜标准库;如果你不需要与标准库生态深度绑定,Loguru 是更好的选择。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播