Python 中日志记录新技能

本文介绍了Python日志库Loguru,它简化了logging模块的配置,提供了更友好的日志输出。Loguru的主要特点是易于使用,支持自定义日志输出位置、格式和颜色。通过`add`函数,可以方便地控制日志级别、文件大小、时间旋转和异常追踪。文章通过实例展示了Loguru如何实现文件日志、日志分割、时间格式自定义以及异常堆栈跟踪等功能,是提升Python日志管理效率的好工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般情况下我们记录日志经常用到的是 logging 模块,在使用前我们需要配置模板,设置 Handler、Formatter 来预处理,例如日志输出位置、输出格式、日志分块和备份等。在不同项目使用日志时,前期需要进行 logger 的配置工作,相比较今天得到 的新技能个人感觉配置较繁琐。

新技能就是"Delgan/loguru",Loguru是一个旨在在Python中带来愉快日志记录的库。

本篇我们从四方面介绍 Loguru:

1、与 logging 区别,为什么 loguru"香"

2、安装

3、快速使用

4、高阶用法简介

一、与 logging 区别,为什么 loguru"香"

伐木洛古鲁
相同提供简洁、灵活地事件记录功能
不同需要显式实例化logger,并使用Handler,Formatte,Filter减少配置步骤,add函数统治所有

二、安装

老规矩,第一步安装库,在 python3 环境下,直接 pip3 安装即可:

pip3 install loguru

三、快速使用

安装成功之后,我们就可以开始啦

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.<span style="color:#78a960">debug</span>(<span style="color:#880000">"This is Debug"</span>)</span></span>

不需要繁琐的配置,开箱即"食",so easy

loguru 中主要对象就是 logger,有且只有 loguru,为何不需要配置就可使用呢,那是因为这些配置已经前置啦,输出格式化,文本颜色等,控制台输出如下:

输出内容包括时间、级别、模块名、行号以及日志信息,另外其输出还是彩色的,看起来会更加友(xuan)好(ku)

那如何 DIY 个性化定制专属日志呢,我们看看下一章吧

四、高阶用法简介

我们主要看看 loguru.logger 的"万能"add()

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>def</strong></span> <span style="color:#880000"><strong>add</strong></span>(
        self,
        sink,
        *,
        level=_defaults.LOGURU_LEVEL,
        format=_defaults.LOGURU_FORMAT,
        filter=_defaults.LOGURU_FILTER,
        colorize=_defaults.LOGURU_COLORIZE,
        serialize=_defaults.LOGURU_SERIALIZE,
        backtrace=_defaults.LOGURU_BACKTRACE,
        diagnose=_defaults.LOGURU_DIAGNOSE,
        enqueue=_defaults.LOGURU_ENQUEUE,
        catch=_defaults.LOGURU_CATCH,
        **kwargs
    ):
  <span style="color:#333333"><strong>pass</strong></span></span></span>

从源码中可以看出,add 参数很多,如 level、format、filter、color 等等,我们重点看看 sink 参数

接收器 :|类似文件的对象|_、|str|、|路径|、|可调用|_、|coroutine 函数|_ 或 |处理程序|

负责接收格式化的日志记录消息并将其传播到

适当的终结点。

(1)支持文件对象

(2)可以直接传入一个 字符串或者 对象strpathlib.Path

(3)可以是一个 logging 模块中的 Handler

(4)可以是一个类或方法

下面我们就试试吧

(一)保存输出日志到文件

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>)  <span style="color:#888888"># 在add定义输出的文件名</span>

logger.<span style="color:#78a960">debug</span>(<span style="color:#880000">"This is Debug"</span>)</span></span>

控制台输出

文件输出到当前工程目录下

文件内容

(二)支持日志大小分割、日志保留时间定义

按日志大小、时间(小时、周)创建

旋转 : |str|, |int|, |time|, |timedelta|或|可调用|_,可选

指示何时应关闭当前日志文件和应关闭新文件的条件

开始。

配置日志保留最长时间

保留 : |str|, |int|, |timedelta|或|可调用|_,可选

一个指令,用于筛选在旋转或结束时应删除的旧文件

程序。

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.<span style="color:#333333"><strong>add</strong></span>(<span style="color:#880000">"test_loguru_{time}.log"</span>, rotation=<span style="color:#880000">"1MB"</span>)   <span style="color:#1f7199"># 每个文件大小1MB.超过创建新文件</span>

logger.<span style="color:#333333"><strong>add</strong></span>(<span style="color:#880000">"test_loguru_{time}.log"</span>, rotation=<span style="color:#880000">"12:00 "</span>)   <span style="color:#1f7199"># 每天12点创建新文件</span>

logger.<span style="color:#333333"><strong>add</strong></span>(<span style="color:#880000">"test_loguru_{time}.log"</span>, rotation=<span style="color:#880000">"1 week"</span>)   <span style="color:#1f7199"># 每周创建新文件</span></span></span>

(三)支持日志时间自定义

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>, format=<span style="color:#880000">"{time:YYYY-MM-DD A HH:mm:ss.SSSS} | {level} | {name} | {message}"</span>,level=<span style="color:#880000">"DEBUG"</span>, rotation=<span style="color:#880000">"500MB"</span>, retention=<span style="color:#880000">"1 days"</span>)

logger.<span style="color:#78a960">info</span>(<span style="color:#880000">"This is INFO"</span>)</span></span>

(四)支持代码异常追踪

回溯跟踪(bool,可选) – 格式化的异常跟踪是否应向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。

诊断(bool,可选)– 异常跟踪是否应显示变量值以简化调试。在生产环境中,这应设置为 False,以避免泄露敏感数据。

1、在 add 参数中设置

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru <span style="color:#333333"><strong>import</strong></span> logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>, format=<span style="color:#880000">"{time} | {level} | {name} | {message}"</span>, level=<span style="color:#880000">"DEBUG"</span>,
           rotation=<span style="color:#880000">"1 KB"</span>, retention=<span style="color:#880000">"10 seconds"</span>, encoding=<span style="color:#880000">"utf-8"</span>, backtrace=<span style="color:#333333"><strong>True</strong></span>, diagnose=<span style="color:#333333"><strong>True</strong></span>)


<span style="color:#333333"><strong>def</strong></span> <span style="color:#880000"><strong>test</strong></span>(num_list):
    <span style="color:#333333"><strong>try</strong></span>:
        <span style="color:#333333"><strong>for</strong></span> num <span style="color:#333333"><strong>in</strong></span> num_list:
            logger.info(f<span style="color:#880000">"This Number is "</span> + num)
    <span style="color:#333333"><strong>except</strong></span> Exception <span style="color:#333333"><strong>as</strong></span> e:
        logger.exception(e)


<span style="color:#333333"><strong>if</strong></span> __name__ == <span style="color:#880000">"__main__"</span>:
    l = [<span style="color:#880000">1</span>, <span style="color:#880000">2</span>, <span style="color:#880000">3</span>]
    test(num_list=l)</span></span>

控制台输出

日志文件内容

2、使用装饰器直接 Traceback 记录

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru <span style="color:#333333"><strong>import</strong></span> logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>, format=<span style="color:#880000">"{time} | {level} | {name} | {message}"</span>, level=<span style="color:#880000">"DEBUG"</span>,
           rotation=<span style="color:#880000">"1 KB"</span>, retention=<span style="color:#880000">"10 seconds"</span>, encoding=<span style="color:#880000">"utf-8"</span>)


<span style="color:#1f7199">@logger.catch</span>
<span style="color:#333333"><strong>def</strong></span> <span style="color:#880000"><strong>test</strong></span>(num_list):
    <span style="color:#333333"><strong>for</strong></span> num <span style="color:#333333"><strong>in</strong></span> num_list:
        logger.info(f<span style="color:#880000">"This Number is "</span> + num)


<span style="color:#333333"><strong>if</strong></span> __name__ == <span style="color:#880000">"__main__"</span>:
    l = [<span style="color:#880000">1</span>, <span style="color:#880000">2</span>, <span style="color:#880000">3</span>]
    test(num_list=l)</span></span>

控制台输出

文件输出

至此,我们可以看出 Loguru 是很强大的,应用简洁,调试追踪直观,当然它还有很多强大功能,大家可以前往官网学习哈

参考资料:

github: https:// github.com/Delgan/logur u

loguru 帮助手册: https:// loguru.readthedocs.io/e n/stable/index.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值