社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

loguru,一个神奇的 Python 库!

python • 2 天前 • 17 次点击  


大家好,今天为大家分享一个神奇的 Python 库 - loguru。

Github地址:https://github.com/Delgan/loguru


loguru是Python生态系统中的现代化日志记录库,由Delgan开发并持续维护。该库旨在解决Python标准logging模块在使用过程中的复杂性和配置繁琐问题,提供了更加直观和用户友好的日志记录体验。loguru的设计理念强调简洁性和功能性的完美结合,使开发者能够以最少的配置获得强大的日志记录功能。

安装

1、安装方法

loguru可以通过Python包管理器pip进行便捷安装,支持Python 3.5及以上版本:




    
pip install loguru

对于需要额外功能支持的环境,可以安装包含可选依赖的完整版本:

pip install "loguru[complete]"

2、验证安装

安装完成后,可以通过以下简单代码验证loguru是否正确安装并正常工作:

from loguru import logger

logger.info("loguru安装验证成功")
logger.success("日志系统初始化完成")

执行上述代码后,控制台将显示带有时间戳、日志级别和彩色输出的日志信息,确认安装成功。

特性

  • 零配置即用:无需复杂的初始化配置,导入后即可直接使用,大幅减少了项目启动时间和配置工作量。

  • 彩色日志输出:自动提供彩色终端输出,不同日志级别使用不同颜色显示,提高了日志信息的可读性和识别度。

  • 线程安全设计:内置线程安全机制,支持多线程和异步环境下的并发日志记录,确保日志信息的完整性和一致性。

  • 灵活的格式化:支持字符串插值、结构化日志和自定义格式模板,满足不同场景的日志格式需求。

  • 智能文件轮转:提供基于时间、文件大小和条件的自动日志文件轮转功能,有效管理磁盘空间使用。

  • 异常跟踪增强:自动捕获和记录异常堆栈信息,提供比标准库更详细的错误诊断信息。

基本功能

1、基础日志记录

loguru的核心优势在于其简洁的使用方式和丰富的日志级别支持。开发者无需进行复杂的配置即可开始记录日志,同时框架提供了从调试到错误的完整日志级别体系。

from loguru import logger

# 不同级别的日志记录
logger.debug("调试信息:变量值检查")
logger.info("应用程序启动完成")
logger.warning("配置文件使用默认值")
logger.error("数据库连接失败")
logger.critical("系统内存不足")

# 新增的日志级别
logger.success("用户注册成功")
logger.trace("详细的执行轨迹信息")

# 带参数的日志记录
user_id = 12345
action = "登录"
logger.info("用户 {} 执行 {} 操作", user_id, action)

2、文件日志配置

loguru提供了灵活的文件日志配置机制,支持自定义日志格式、文件路径和轮转策略。通过简单的配置,可以实现日志文件的自动管理,包括按时间或大小进行文件轮转,确保日志系统在长期运行中的稳定性和可维护性。

from loguru import logger

# 移除默认处理器
logger.remove()

# 添加文件日志处理器
logger.add(
    "application.log",
    format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name}:{function}:{line} | {message}",
    level="INFO",
    rotation="10 MB",
    retention="30 days",
    compression="zip"
)

# 添加控制台输出
logger.add(
    sys.stderr,
    format="{time:HH:mm:ss} | {level} | {message}",
    level="DEBUG"
)

logger.info("配置完成,开始记录日志")

3、结构化日志

结构化日志是现代应用程序监控和分析的重要基础,loguru支持将上下文信息绑定到日志记录中,便于后续的日志分析和处理。

from loguru import logger

# 绑定上下文信息
logger = logger.bind(user_id=12345, request_id="req-abc-123")

# 记录带有上下文的日志
logger.info("处理用户请求")
logger.warning("请求处理超时")

# 使用with语句临时绑定上下文
with logger.contextualize(operation="data_processing"):
    logger.info("开始处理数据")
    logger.success("数据处理完成")

# 结构化数据记录
user_data = {"name""张三""age"30"department""技术部"}
logger.info("用户信息更新", extra=user_data)

高级功能

1、自定义过滤器和处理器

loguru支持高度定制化的日志处理流程,开发者可以根据业务需求创建自定义过滤器和处理器。通过精细化的控制机制,可以确保日志系统在满足合规要求的同时提供最大的诊断价值。

from loguru import logger
import sys

def sensitive_filter(record):
    """过滤敏感信息"""
    message = record["message"]
    # 过滤包含密码的日志
    if"password"in message.lower():
        returnFalse
    returnTrue

def error_handler(record):
    """错误日志特殊处理"""
    if record["level"].name == "ERROR":
        # 发送错误通知或写入特殊文件
        with open("error_alerts.log""a"as f:
            f.write(f"ALERT: {record['time']} - {record['message']}\n")

# 配置带过滤器的处理器
logger.add(
    "filtered.log",
    filter=sensitive_filter,
    format="{time} | {level} | {message}",
    level="INFO"
)

# 配置错误处理器
logger.add(
    error_handler,
    level="ERROR",
    format="{time} | {level} | {name} | {message}"
)

# 测试日志
logger.info("用户登录成功")
logger.warning("用户密码即将过期")  # 将被过滤
logger.error("数据库连接异常")  # 触发错误处理

2、异步日志和性能优化

loguru提供了异步日志记录功能,能够将日志写入操作从主执行路径中分离,避免I/O阻塞对应用性能的影响。同时,框架支持批量写入和缓冲机制,进一步提高了日志系统的吞吐量,确保在高负载环境下仍能保持良好的性能表现。

from loguru import logger
import asyncio
import time

# 配置异步日志处理器
logger.add(
    "async.log",
    format="{time} | {level} | {message}",
    enqueue=True,  # 启用异步队列
    backtrace=True,
    diagnose=True
)

asyncdef async_operation():
    """异步操作示例"""
    logger.info("开始异步操作")
    await asyncio.sleep(0.1)
    logger.success("异步操作完成")

def performance_test():
    """性能测试"""
    start_time = time.time()
    
    for i in range(1000):
        logger.info("性能测试日志 {}", i)
    
    end_time = time.time()
    logger.info("1000条日志记录耗时: {:.3f}秒", end_time - start_time)

# 运行异步操作
asyncio.run(async_operation())

# 执行性能测试
performance_test()

总结

loguru作为现代化的Python日志记录解决方案,通过简洁的API设计和强大的功能特性,显著改善了传统日志系统的使用体验。其零配置启动、彩色输出、线程安全和灵活的定制能力,使得开发团队能够快速构建高质量的日志系统,提高应用程序的可观测性和可维护性。loguru不仅提供了丰富的基础功能,更通过其先进的设计理念和实用的高级特性,为各种规模的项目提供了可靠的日志记录基础设施。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

我们还为大家准备了Python资料,感兴趣的小伙伴快来找我领取一起交流学习哦!

图片

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Beautiful Soup快速上手指南,从入门到精通(PDF下载)

Python基础学习常见的100个问题.pdf(附答案)

124个Python案例,完整源代码!

30 个Python爬虫的实战项目(附源码)

从入门到入魔,100个Python实战项目练习(附答案)!

80个Python数据分析必备实战案例.pdf(附代码),完全开放下载

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183307
 
17 次点击