【转】loguru,一个神奇的 python 库

发布时间 2023-10-11 10:32:13作者: Tynam.Yang

转载来源:微信公众号:程序员学长  https://mp.weixin.qq.com/s/csxPONEaUbTdoRMd9opuMw

大家好,我是小寒。

今天给大家分享一个神奇的 python 库,loguru

https://github.com/Delgan/loguru

Loguru 是一个旨在为 Python 带来愉快的日志记录的库,它可以完全增强你的日志记录体验,并且非常易于使用。

初体验

库的安装

安装 Loguru 也非常简单,可以直接使用 pip 进行安装。

pip install loguru

在 Loguru 中,如果需要将调试日志输出到终端,可以执行以下操作。

from loguru import logger
logger.debug("That's it, beautiful and simple logging!")

如果需要将日志输出到文件中,只需这样做。

from loguru import logger
logger.add("file_{time}.log")
logger.debug("That's it, beautiful and simple logging!")

这将在当前运行的文件夹中生成 file_current time.log 的日志文件。

滚动日志和压缩

使用 Loguru 你可以轻松实现滚动日志。

按时间滚动

比如要按时间滚动,只需要在 logger.add 参数中添加一个 rotation 参数即可。

from loguru import logger
logger.add("file_2.log", rotation="12:00") # Create new file at 12AM
logger.debug("That's it, beautiful and simple logging!")

这样,如果当前时间超过了这个设定的时间,就会生成一个新的日志文件。如果没有,请使用原始日志文件。

按大小滚动

除了按时间滚动日志外,Loguru 还可以按日志大小滚动。

from loguru import logger
logger.add("file_1.log", rotation="1 MB")
logger.debug("That's it, beautiful and simple logging!")

这样,一旦日志文件大小超过1MB,就会生成一个新的日志文件。

压缩日志

如果你不想删除原来的日志文件,Loguru 还支持直接压缩日志。

from loguru import logger
logger.add("file_Y.log", compression="zip")

其它特性

定制颜色

Loguru 支持自定义颜色,如果你不喜欢它的默认颜色,你可以这样更改。

logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")
多进程安全

Loguru 默认是线程安全的,但它不是多进程安全的。

但如果你需要多进程/异步日志记录,它也支持,只需添加一个 enqueue 参数即可。

logger.add("somefile.log", enqueue=True)
回溯支持

对于日志来说,没有错误栈的日志是没有灵魂的。Loguru 允许你显示整个堆栈信息以帮助你发现问题(包括变量)。例如:

def func(a, b):
    return a / b

def nested(c):
    try:
        func(5, c)
    except ZeroDivisionError:
        logger.exception("What?!")

nested(0)
电子邮件提醒

Loguru 可以与强大的电子邮件通知模块结合使用,以便在程序意外失败时接收电子邮件,或发送许多其他类型的通知。

import notifiers

params = {
    "username": "test@gmail.com",
    "password": "abc123",
    "to": "test@gmail.com"
}

# Initialize email
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)

# Email alert for error
from notifiers.logging import NotificationHandler

handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")

这样配置后,每次产生 Error 日志时,程序都会自动向你的邮箱发送警报,真是方便。除了这些功能之外,Loguru 还支持与 Python 原生 Logging 模块的兼容,你可以将原始标准记录器记录的所有信息转移到 Loguru 中。你还可以基于 Loguru 自定义新的日志级别,并自定义你喜欢的结构化数据。