Loguru,一个 Python 日志神器

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

一个简单的库,也许能够开启我们的智慧之门,
一个普通的方法,也许能在危急时刻挽救我们于水深火热,
一个新颖的思维方式,也许能激发我们无尽的创造力,
一个独特的技巧,也许能成为我们的隐形盾牌……


神奇的 Python 库之旅,第 8

一、为什么选择 Loguru?

在程序开发中,日志记录是一个不可或缺的一环,日志记录就像程序运行过程的的“生活轨迹”。而在众多的日志记录工具中,有一个第三方库脱颖而出,它就是——Loguru。今天,让我们一起探索它的强大与魅力。

安装 Loguru:

pip install loguru -i https://pypi.doubanio.com/simple

Github 项目地址:

https://github.com/Delgan/loguru

你或许会问,为什么要选择 Loguru?Python 标准库里已经有了 logging,难道不够用吗?

其实,Loguru 的出现正是为了简化和优化 logging 的使用体验。它的设计理念是简单、强大且易用。让我们从几个方面来看看它的优势。

易用性
首先,Loguru 不需要复杂的配置文件和初始化步骤。你只需简单地导入并使用它,就可以立即记录日志:

from loguru import logger

logger.info("这是一个简单的日志消息")

自动化的日志轮转
Loguru 支持自动化的日志文件轮转,这意味着你不需要担心日志文件过大而导致的问题。只需一行配置,就可以轻松实现日志轮转:

logger.add("file.log", rotation="500 MB")  # 日志文件超过500 MB时自动轮转

丰富的日志格式化
Loguru 提供了丰富的日志格式化选项,让你可以自定义日志的输出格式,使其更加美观和易读:

logger.add("file.log", format="{time} {level} {message}")

。。。

二、快速上手 Loguru

日志文件轮转
如前所述,Loguru 支持日志文件轮转,这对于长时间运行的应用程序尤为重要:

logger.add("app.log", rotation="1 week")  # 每周轮转一次

多种日志级别
Loguru 支持多种日志级别,包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL。你可以根据需要记录不同级别的日志:

logger.debug("这是一个调试日志")
logger.info("这是一个信息日志")
logger.warning("这是一个警告日志")
logger.error("这是一个错误日志")
logger.critical("这是一个致命错误日志")

异步日志记录
对于异步应用程序,Loguru 也能完美支持。你可以轻松地将日志记录到异步文件中:

from loguru import logger
import asyncio

async def main():
    logger.add("async.log", enqueue=True)
    logger.info("这是一个异步日志")

asyncio.run(main())

。。。

三、Loguru 的实战应用

说了这么多,还是得实际操作一下。接下来,我们通过几个实际案例,看看 Loguru 如何在真实应用中大显身手。

案例一 | Web 应用日志
在 Web 应用中,日志记录是调试和监控的重要手段。我们以 Flask 应用为例,看看 Loguru 如何帮助我们记录日志。

首先,安装 Flask:

pip install flask

然后创建一个简单的 Flask 应用,并集成 Loguru:

from flask import Flask
from loguru import logger

app = Flask(__name__)

logger.add("webapp.log", rotation="10 MB")

@app.route('/')
def hello_world():
    logger.info("访问首页")
    return 'Hello, Loguru!'

if __name__ == '__main__':
    app.run(debug=True)

在这个简单的 Flask 应用中,我们每次访问首页时,都会记录一条日志到 webapp.log 文件中,并且设置了日志轮转,当日志文件超过 10 MB 时会自动轮转。

案例二 | 批处理任务日志
在数据处理或定时任务中,日志记录同样重要。我们来看一个批处理任务的例子:

from loguru import logger
import time

logger.add("batch.log", rotation="1 day", retention="7 days")

def process_data(data):
    logger.info(f"处理数据:{data}")
    time.sleep(2)
    logger.success(f"数据处理完成:{data}")

if __name__ == "__main__":
    for i in range(5):
        process_data(f"数据集{i}")

这个脚本模拟了一个简单的批处理任务,每次处理数据时都会记录日志。日志文件每天轮转一次,并且只保留最近 7 天的日志。

案例三 | 分布式系统日志
在分布式系统中,集中化的日志管理是个挑战。Loguru 可以结合其他工具,帮助我们实现集中化日志管理。

我们使用 Graylog 作为集中化日志管理工具,首先需要安装 graypy:

pip install graypy

然后在 Loguru 中配置 Graylog:

from loguru import logger
import graypy

handler = graypy.GELFUDPHandler('localhost', 12201)
logger.add(handler)

logger.info("这是发送到 Graylog 的日志")

这样,我们就可以将日志发送到 Graylog,实现集中化的日志管理和分析。

在这里插入图片描述

四、Loguru 的更多技巧

自定义过滤器
你可以使用自定义过滤器来筛选特定条件下的日志消息:

def filter_debug(record):
    return record["level"].name == "DEBUG"

logger.add("debug.log", filter=filter_debug)
logger.debug("这是一条调试日志")  # 这条日志会记录到 debug.log
logger.info("这是一条信息日志")  # 这条日志不会记录到 debug.log

这样一来,只有 debug 等级的日志会被写入到日志文件中

日志上下文
有时,我们希望在日志中包含更多上下文信息。Loguru 提供了一种简单的方法来实现这一点:

from loguru import logger

def task():
    with logger.contextualize(task_id="12345"):
        logger.info("处理任务")

task()

这样一来,日志消息中就会包含 task_id 信息,方便我们追踪特定任务的日志。

更多功能、详细用法可参考官方文档:

https://loguru.readthedocs.io/en/stable

。。。

五、总结

Loguru 作为一个现代化的日志记录工具,简化了日志记录的过程,并提供了强大的功能和灵活的配置选项。无论是在 Web 应用、批处理任务还是分布式系统中,Loguru 都能大显身手。

通过本文的介绍和示例,相信你已经对 Loguru 有了深入的了解。希望你在使用 Loguru 的过程中,能够感受到它的便利与强大,为你的 Python 开发之路增添更多乐趣和效率。

在这里插入图片描述

六、作者Info

Author:小鸿的摸鱼日常

Goal:让编程更有趣! 专注于 Web 开发、爬虫,游戏开发,数据分析、自然语言处理,AI 等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载,侵权必究!

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鸿的摸鱼日常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值