当前位置:

首页 > 编程开发 > Python最强日志打印库loguru安装到高级用法逐步详解

Python最强日志打印库loguru安装到高级用法逐步详解

loguru是一款开箱即用的Python日志库,替代标准logging模块。支持多输出目标、日志旋转、异常捕获等高级功能。安装简单,通过全局logger对象即可记录不同级别日志,并可自定义格式、过滤器及异步写入。

聊到Python的日志处理,现在大家首选的工具应该就是loguru了。这个库主打的就是“开箱即用”,目标很明确——替代Python标准库里那个用起来有点繁琐的logging模块。它用了一个全局的logger对象,把日志记录这件事变得异常简单,同时支持多种输出目标、日志旋转、异常捕获这些高阶功能。接下来,让我们从最基础的安装开始,一步步解锁它的高级特性。

一、Python日志打印库loguru详解

1、 介绍

loguru由Delgan开发,核心理念就是“开箱即用”。说白了,就是让你少写那些重复的日志配置代码。跟Python内置的logging模块相比,它最大的优点是不用再费劲去配置各种handler。主要优点很明确: * **简洁性**:一行代码就能搞定日志处理器。 * **灵活性**:自定义格式、过滤器和输出目标,都支持得很好。 * **易用性**:异常捕获和上下文管理这些功能都是内置的,用起来非常顺手。 无论是小脚本还是大型项目,loguru都能高效处理日志。

2、安装

安装过程没什么好说的,老规矩,一条pip命令搞定:
pip install loguru
装完之后,直接在你的Python脚本里导入就能用了。

3、基本用法

loguru上手最爽的地方就在于,导入后直接用,不需要任何额外配置。默认情况下,日志会输出到标准错误流(stderr),而且已经带上了时间戳、日志级别这些关键信息。 * **导入logger**:
from loguru import logger
* **记录日志**: loguru支持标准的日志级别:DEBUG、INFO、WARNING、ERROR 和 CRITICAL。直接调用对应的方法就行:
logger.debug("这是一条调试信息")
logger.info("这是一条普通信息")
logger.warning("这是一条警告信息")
logger.error("这是一条错误信息")
logger.critical("这是一条严重错误信息")
跑一下这段代码,控制台就会输出日志,格式类似:[2023-10-05 12:34:56] INFO: 这是一条普通信息。 * **日志级别控制**: 默认情况下,所有级别的日志都会被输出(因为默认级别是DEBUG)。但你可以调整级别,比如只记录INFO及以上的:
logger.remove()  # 移除默认处理器
logger.add(sys.stderr, level="INFO")  # 添加新处理器,设置级别为INFO
这里logger.remove()是用来清除默认配置的,logger.add()则是添加自定义处理器的入口。

4、配置输出目标

日志只写在控制台肯定不够,loguru允许你添加多个处理器,把日志同时输出到文件、控制台,甚至网络服务。核心就是靠logger.add()这个方法。 * **输出到文件**: 最简单的文件日志配置,一行代码:
logger.add("app.log")  # 日志输出到app.log文件
日志文件会自动创建,内容是追加的。 * **日志旋转**: 文件一直写下去,肯定会越来越大。loguru内置了日志旋转功能,可以按时间或者按文件大小自动切割。这是非常实用的功能:
# 按文件大小旋转:当文件超过1MB时,创建新文件,最多保留3个备份
logger.add("app.log", rotation="1 MB", retention=3)

# 按时间旋转:每天午夜旋转日志
logger.add("app.log", rotation="00:00")
rotation参数指定旋转条件,retention参数控制保留多少个备份文件。 * **输出到控制台**: 默认已经输出到stderr了,但如果你想自定义格式,可以这样写:
logger.add(sys.stdout, format="{time} | {level} | {message}")
format参数里可以塞进时间、级别、消息这些基础信息,还能加上进程ID、线程ID,甚至用花括号指定时间格式。

5、 日志格式化和过滤器

loguru提供了强大的格式化能力,你可以随心所欲地自定义消息结构,还能添加上下文信息。 * **自定义格式**: 除了基本格式,你还可以加上{process}(进程ID)、{thread}(线程ID)等变量。比如:
logger.add("app.log", format="{time} | {level} | {process} | {thread} | {message}")
可用的变量包括:{time}(时间戳)、{level}(日志级别)、{message}(日志消息)、{file}(文件名)、{line}(代码行号)、{function}(函数名)。甚至可以用{time:YYYY-MM-DD HH:mm:ss}这种格式字符串来精确控制时间的显示。 * **添加过滤器**: 过滤器就像个阀门,只有符合条件的日志才能通过。比如,你只想记录消息里包含“important”的日志:
def my_filter(record):
    return "important" in record["message"]  # 只包含消息中带"important"的日志
logger.add("app.log", filter=my_filter)
这里的record是一个字典,包含了日志的所有信息。

6、 高级特性

loguru还有一些高阶功能,能让日志记录更实用、更可靠。 * **异常捕获**: 这是最实用的功能之一。用@logger.catch装饰器,函数里的异常会被自动捕获,并记录详细的堆栈信息,排查问题非常方便:
@logger.catch
def risky_function():
    return 1 / 0  # 会触发异常

risky_function()
当异常发生,loguru会记下错误消息和完整的堆栈跟踪。 * **上下文变量**: 可以给日志打上额外的标签,比如用户名、请求ID,这在多用户系统里特别有用。用bind()方法:
logger.add("app.log", format="{extra[user]} | {message}")

user_logger = logger.bind(user="admin")  # 绑定用户上下文
user_logger.info("用户登录成功")  # 输出: admin | 用户登录成功
* **异步日志**: 如果担心日志写入拖慢主程序的速度,可以开启异步队列:
logger.add("app.log", enqueue=True)  # 启用异步队列
设置enqueue=True后,日志写入不会阻塞主线程,性能会有明显提升。 * **自定义处理器**: 除了文件和控制台,你还可以把日志发送到远程服务器。写一个自定义的“sink”函数就行:
def custom_sink(message):
    # 模拟发送到网络
    print(f"发送日志: {message}")

logger.add(custom_sink)

7、代码示例

下面是一个完整的示例,囊括了配置、使用和异常捕获:
from loguru import logger
import sys

# 配置日志:输出到文件和控制台,设置格式和旋转
logger.remove()  # 移除默认处理器
logger.add("app.log", rotation="1 MB", retention=3, format="{time} | {level} | {message}")
logger.add(sys.stdout, format="{time} | {level} | {message}")

# 记录不同级别日志
logger.info("应用程序启动")
logger.warning("磁盘空间不足")

# 使用异常捕获
@logger.catch
def divide(a, b):
    return a / b

try:
    divide(10, 0)
except Exception:
    logger.error("发生除法错误")

# 添加上下文
user_logger = logger.bind(user="Alice")
user_logger.info("用户操作完成")

Python最强日志打印库loguru安装到高级用法逐步详解

8、与标准库logging比较

loguru和标准库logging比起来,优势非常直观: * **配置简化**:不用再创建什么handlers、formatters、filters,一行logger.add()全部搞定。 * **API直观**:全局logger对象拿来就用,学习成本极低。 * **功能丰富**:日志旋转、异常捕获这类功能都是内置的,不需要额外找第三方扩展。 但话说回来,如果你的项目对日志架构有极其复杂的自定义需求,标准库logging可能会更合适。不过对绝大多数场景来说,loguru已经绰绰有余了。

9、总结

loguru是一个非常高效的Python日志库,尤其适合快速开发和日常维护。通过上述详解,它的核心功能应该已经清楚了: * 基本日志记录和级别控制。 * 输出目标配置(文件、控制台)。 * 高级特性如日志旋转、异常捕获和上下文绑定。

二、代码示例

1、源码分享

下面是一个更贴近实战的完整示例,包含了复杂格式、多文件输出、动态级别修改、多线程测试等场景,可以直接拿去用:
import sys
from loguru import logger
from datetime import datetime
import threading
import time

# -------------------------- 1. 自定义日志格式(复杂格式) --------------------------
# 格式说明:时间 | 进程ID | 线程名 | 日志级别 | 模块名 | 函数名 | 日志内容
LOG_FORMAT = (
    "{time:YYYY-MM-DD HH:mm:ss.SSS} | "
    "{process.id} | "
    "{thread.name} | "
    "{level: <8} | "
    "{name}:{function}:{line} - "
    "{message}"
)

# -------------------------- 2. 配置多文件日志输出(分级别/分场景) --------------------------
# 清空默认控制台输出(按需保留)
logger.remove()

# 2.1 控制台输出:彩色日志,只输出 INFO 及以上级别
logger.add(
    sink=sys.stdout,
    format=LOG_FORMAT,
    level="INFO",
    enqueue=True,  # 异步输出,提升性能
    colorize=True  # 彩色日志
)

# 2.2 错误日志单独文件:只保存 ERROR/CRITICAL 级别,自动压缩
logger.add(
    sink="logs/error_{time:YYYY-MM-DD}.log",  # 按天分割文件
    format=LOG_FORMAT,
    level="ERROR",
    encoding="utf-8",
    rotation="00:00",  # 每天凌晨分割新文件
    retention="30 days",  # 保留30天日志
    compression="zip",  # 旧日志自动压缩为zip
    enqueue=True,
    backtrace=True,  # 完整异常堆栈
    diagnose=True  # 开发环境开启变量诊断,生产环境建议关闭
)

# 2.3 全量日志文件:保存所有级别日志,文件大小超过100MB自动分割
logger.add(
    sink="logs/all_{time:YYYY-MM-DD}.log",
    format=LOG_FORMAT,
    level="DEBUG",
    encoding="utf-8",
    rotation="100 MB",  # 按文件大小分割
    retention="15 days",
    enqueue=True
)


# -------------------------- 3. 自定义日志过滤(精准过滤日志) --------------------------
def filter_debug_only(record):
    """仅保留DEBUG级别日志"""
    return record["level"].name == "DEBUG"


# 单独保存DEBUG级别日志
logger.add(
    sink="logs/debug.log",
    format=LOG_FORMAT,
    filter=filter_debug_only,
    encoding="utf-8",
    enqueue=True
)

# -------------------------- 4. 上下文绑定(统一添加日志字段) --------------------------
# 全局绑定公共字段:请求ID、用户ID
logger = logger.bind(request_id="REQ_123456", user_id="UID_789")


# -------------------------- 5. 高级功能:异常捕获、结构化日志、多线程测试 --------------------------
def demo_business_logic(num: int):
    """模拟业务逻辑"""
    try:
        # 分级日志打印
        logger.debug(f"开始执行业务逻辑,参数: {num}")
        logger.info(f"业务逻辑执行中,当前时间: {datetime.now()}")

        if num < 0:
            # 手动抛出异常,测试异常日志
            raise ValueError("数字不能为负数!")

        # 结构化日志(JSON格式,方便日志平台解析)
        logger.bind(biz_type="order").info("订单创建成功", extra={"order_id": "ORDER_001", "amount": 99.9})

        logger.success("业务逻辑执行完成✅")
    except Exception as e:
        # 自动捕获完整异常堆栈
        logger.exception("业务逻辑执行失败:")


def multi_thread_test():
    """多线程日志测试"""
    threads = []
    for i in range(3):
        t = threading.Thread(target=demo_business_logic, args=(i,), name=f"Thread-{i}")
        threads.append(t)
        t.start()

    # 测试异常线程
    error_thread = threading.Thread(target=demo_business_logic, args=(-1,), name="Thread-Error")
    error_thread.start()

    for t in threads:
        t.join()
    error_thread.join()


# -------------------------- 6. 日志级别动态修改 --------------------------
def change_log_level(new_level: str):
    """动态修改日志级别"""
    logger.remove()
    # 重新添加处理器,修改level参数
    logger.add(sys.stdout, format=LOG_FORMAT, level=new_level, colorize=True)
    logger.add("logs/error.log", format=LOG_FORMAT, level="ERROR", encoding="utf-8")
    logger.info(f"日志级别已修改为: {new_level}")


# -------------------------- 主程序入口 --------------------------
if __name__ == "__main__":
    # 自动创建logs文件夹(loguru会自动创建)
    logger.info("=== Loguru 高级示例启动 ===")

    # 执行业务逻辑
    demo_business_logic(10)

    # 执行多线程测试
    logger.info("=== 开始多线程日志测试 ===")
    multi_thread_test()

    # 动态修改日志级别为WARNING(仅输出警告及以上)
    logger.info("=== 动态修改日志级别为 WARNING ===")
    change_log_level("WARNING")

    # 测试级别修改效果
    logger.debug("这条DEBUG日志不会输出")
    logger.warning("这条WARNING日志会输出")

    logger.critical("=== 程序运行结束,关键日志已全部保存 ===")

三、运行结果

C:Users徐鹏Desktop55.venvScriptspython.exe C:Users徐鹏Desktop55main.py 
2026-04-02 09:02:25.883 | 25844 | MainThread | INFO     | __main__::128 - === Loguru 高级示例启动 ===
2026-04-02 09:02:25.884 | 25844 | MainThread | INFO     | __main__:demo_business_logic:83 - 业务逻辑执行中,当前时间: 2026-04-02 09:02:25.884706
2026-04-02 09:02:25.884 | 25844 | MainThread | INFO     | __main__:demo_business_logic:90 - 订单创建成功
2026-04-02 09:02:25.884 | 25844 | MainThread | SUCCESS  | __main__:demo_business_logic:92 - 业务逻辑执行完成✅
2026-04-02 09:02:25.884 | 25844 | MainThread | INFO     | __main__::134 - === 开始多线程日志测试 ===
2026-04-02 09:02:25.885 | 25844 | Thread-0 | INFO     | __main__:demo_business_logic:83 - 业务逻辑执行中,当前时间: 2026-04-02 09:02:25.885793
2026-04-02 09:02:25.885 | 25844 | Thread-1 | INFO     | __main__:demo_business_logic:83 - 业务逻辑执行中,当前时间: 2026-04-02 09:02:25.885793
2026-04-02 09:02:25.885 | 25844 | Thread-0 | INFO     | __main__:demo_business_logic:90 - 订单创建成功
2026-04-02 09:02:25.886 | 25844 | Thread-1 | INFO     | __main__:demo_business_logic:90 - 订单创建成功
2026-04-02 09:02:25.886 | 25844 | Thread-2 | INFO     | __main__:demo_business_logic:83 - 业务逻辑执行中,当前时间: 2026-04-02 09:02:25.886883
2026-04-02 09:02:25.886 | 25844 | Thread-Error | INFO     | __main__:demo_business_logic:83 - 业务逻辑执行中,当前时间: 2026-04-02 09:02:25.886883
2026-04-02 09:02:25.886 | 25844 | Thread-0 | SUCCESS  | __main__:demo_business_logic:92 - 业务逻辑执行完成✅
2026-04-02 09:02:25.886 | 25844 | Thread-1 | SUCCESS  | __main__:demo_business_logic:92 - 业务逻辑执行完成✅
2026-04-02 09:02:25.887 | 25844 | Thread-2 | INFO     | __main__:demo_business_logic:90 - 订单创建成功
2026-04-02 09:02:25.887 | 25844 | Thread-2 | SUCCESS  | __main__:demo_business_logic:92 - 业务逻辑执行完成✅
2026-04-02 09:02:25.887 | 25844 | Thread-Error | ERROR    | __main__:demo_business_logic:95 - 业务逻辑执行失败:
Traceback (most recent call last):

  File "E:Pythonpyhon3.8.2libthreading.py", line 890, in _bootstrap
    self._bootstrap_inner()
    │    └ 
    └ 

  File "E:Pythonpyhon3.8.2libthreading.py", line 932, in _bootstrap_inner
    self.run()
    │    └ 
    └ 

  File "E:Pythonpyhon3.8.2libthreading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
    │    │        │    │        │    └ {}
    │    │        │    │        └ 
    │    │        │    └ (-1,)
    │    │        └ 
    │    └ 
    └ 

> File "C:Users徐鹏Desktop55main.py", line 87, in demo_business_logic
    raise ValueError("数字不能为负数!")

ValueError: 数字不能为负数!
2026-04-02 09:02:25.899 | 25844 | MainThread | INFO     | __main__::138 - === 动态修改日志级别为 WARNING ===
2026-04-02 09:02:25.902 | 25844 | MainThread | WARNING  | __main__::143 - 这条WARNING日志会输出
2026-04-02 09:02:25.902 | 25844 | MainThread | CRITICAL | __main__::145 - === 程序运行结束,关键日志已全部保存 ===

进程已结束,退出代码为 0

Python最强日志打印库loguru安装到高级用法逐步详解

总结

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python
相关文章 更多
langgraph python guide中文入门教程详解
langgraph python guide中文入门教程详解

本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

Windows 安装 Python:从官方入口到虚拟环境的可复现实践
Windows 安装 Python:从官方入口到虚拟环境的可复现实践

面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

了解Python编程领域中最好的就业行业
了解Python编程领域中最好的就业行业

了解Python编程领域中最好的就业行业导语:近年来,Python作为一种易学易用的编程语言,越来越受到企业和开发者的青睐。在Python编程领域中,有许多就业机会,涵盖了各个行业。本文将介绍一些Python编程领域中最好的就业行业,并提供相应的代码示例。数据科学和机器学习数据科学和机器学习是Python编程领域中最热门的行业之一。Python在数据科学和机

python处理csv文件的方法完整实用教程
python处理csv文件的方法完整实用教程

针对Python处理CSV文件时常见的编码报错、内存溢出和数据类型错误,本文对比标准库csv与Pandas库的适用场景,提供可复制的代码示例和因果排查思路,帮助开发者选择最优处理方案。

python字典怎么按值排序用sorted函数实现升降序
python字典怎么按值排序用sorted函数实现升降序

本文介绍如何使用Python的sorted函数对字典按值进行升序和降序排序,结合具体代码示例和应用场景,帮助读者理解排序逻辑及其在数据处理中的实际价值。

python正则匹配修改方法与代码实现教程
python正则匹配修改方法与代码实现教程

深入讲解Python中使用re.sub进行正则匹配与替换的技巧,涵盖基础语法、分组引用及回调函数应用,帮助开发者解决复杂字符串修改需求,提升代码效率与可维护性。

selenium中文安装包下载与安装教程
selenium中文安装包下载与安装教程

详解Selenium在Python环境下的安装步骤,包括使用pip安装库文件、下载对应版本的浏览器驱动以及验证安装是否成功,适合自动化测试初学者参考。

skyvern官网入口及中文版使用教程
skyvern官网入口及中文版使用教程

Skyvern是一款基于大语言模型的开源浏览器自动化框架,目前仅提供英文界面且无官方中文版。本文指导用户通过GitHub获取源码,使用Docker快速部署本地环境,并解释其如何通过DOM树解析与自然语言指令实现网页自动操作,同时提供针对中文用户的配置建议与替代方案。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,