
































Loguru是一个功能强大且易于使用的开源Python日志记录库。本文记录相关内容。
Loguru是一个功能强大且易于使用的开源Python日志记录库。它建立在Python标准库中的logging模块之上,并提供了更加简洁直观、功能丰富的接口。
Loguru的主要特点包括:
Loguru与logging是Python中常用的两个日志记录库,但两者在功能和易用性方面存在一些差异,如下所示:
| 特性 | Loguru | logging |
|---|---|---|
| 易用性 | 更简单易用 | 相对复杂 |
| 日志格式 | 更灵活 | 较简单 |
| 日志级别 | 更丰富 | 较少 |
| 日志目标 | 更多种类 | 较少 |
| 日志处理功能 | 更强大 | 较弱 |
| 异步日志记录 | 支持 | 不支持 |
| 跨进程、跨线程支持 | 支持 | 支持 |
总的来说,loguru在易用性、功能性和性能方面都优于logging。如果要一个简单、强大且易于使用的日志系统,loguru是一个很好的选择。
1 | |
Loguru的核心概念是只有一个全局的日志记录器,也就是 logger。这个设计使得日志记录变得非常简洁和一致。使用Loguru时,你不需要创建多个日志实例,而是直接使用这个全局的logger来记录信息。这不仅减少了配置的复杂性,也使得日志管理更加集中和高效。
1 | |
Loguru日志输出默认格式如下:
__main__ 表示日志来自主模块。如果是其他文件会显示文件名。Loguru可以通过简单的函数调用来记录不同级别的日志,并自动处理日志的格式化和输出。这一特点可以让使用者专注于记录重要的信息,而不必关心日志的具体实现细节。Loguru支持的日志级别,按照从最低到最高严重性排序:
1 | |
由于在 loguru 中有且仅有一个对象:logger。所以loguru是可以在多块module文件中使用的,而且不会出现冲突。
所有添加至logger的sink默认都是线程安全的,所以loguru也可以很安全的在多线程的情形下使用。
1 | |
在 loguru 中,add函数用于添加日志处理器。这个函数用于指定日志消息应该被发送到何处,例如控制台、文件或其他自定义的目的地。add函数主要参数介绍如下:
sink: 定义日志消息的输出位置,可以是文件路径、标准输出(stdout)、标准错误(stderr,默认)或其他自定义的输出位置。format: 指定日志消息的格式,可以是简单的字符串,也可以是格式化字符串,支持各种字段插值。level: 设置处理程序处理的日志消息的最低级别。比如设置为DEBUG,则处理程序将处理所有级别的日志消息。filter: 可选参数,用于添加过滤器,根据特定的条件过滤掉不需要的日志消息。colorize: 布尔值,指定是否对日志消息进行着色处理,使日志在控制台中更易于区分。serialize: 布尔值,指定是否对日志消息进行序列化处理,通常与enqueue=True一起使用,以确保多线程安全。enqueue: 布尔值,指定是否将日志消息放入队列中处理,用于多线程应用中避免阻塞。backtrace: 布尔值或字符串,指定是否记录回溯信息,默认为False。diagnose: 布尔值,启用后,会在处理程序内部出现错误时记录诊断信息。rotation: 日志文件轮换的配置,支持按大小或时间进行日志文件的轮换。retention: 用于设置日志文件的保留时间。compression: 布尔值,指定是否对轮换后的日志文件进行压缩处理。1 | |
当连续两次调用 add 函数时,loguru 会将新的日志处理器添加到处理器列表中,而不是覆盖之前的处理器。这意味着所有添加的处理器都会接收到日志消息,并且按照它们被添加的顺序来处理这些消息。
1 | |
如果想删除所有已添加的日志处理器,loguru运行使用 logger.remove()方法不带任何参数来移除所有日志处理器。
1 | |
注意调用logger.remove()之后的所有日志将不会被记录,因为没有处理器了。
1 | |
如果希望移除某些日志处理器,而不是从所有日志器中移除,代码如下:
1 | |
如果想将日志输出到日志台,代码如下:
1 | |
1 | |
通过配置rotation参数,指定日志文件滚动记录的条件
1 | |
通过这样的配置我们就可以实现每 500MB 存储一个文件,每个 log 文件过大就会新创建一个新的 log 文件。我们可以在创建文件的时候加一个(time)占位符,这样在生成时可以自动将时间替换进去,生成一个文件名包含时间的 log 文件。
1 | |
通过上面的配置,可以实现没填中午12:00创建一个log文件输出了。
1 | |
通过上面的配置可以实现每隔1周创建一个新的log文件输出了。
通过配置retention参数,可以指定日志的保留时长:
1 | |
通过上面的配置,就可以指定日志最多保留10天,每隔10天之后就会清理旧的日志,这样就不会造成内存浪费。
通过配置compression参数可以指定日志文件的压缩格式:
1 | |
通过上面的配置,可以指定日志文件的压缩格式为zip格式,可以节省存储空间。
1 | |
@logger.catch 装饰器可以用来装饰my_function函数,并将这些异常信息记录到日志中。
1 | |
exception
通过exception方法也可以实现异常的捕获与记录:
1 | |
输出日志:
1 | |
loguru允许我们自定义日志级别,可以通过logger.level()函数来添加自定义日志级别。例如,我们可以添加一个名为TRACE的日志级别,并将其显示.
1 | |
在上面的示例中,我们使用
logger.level()函数添加了一个名为TRACE的日志级别,并将其显示为蓝色并带有一个小虫子图标。然后,我们使用logger.trace()方法输出了一条自定义级别的日志信息。
使用loguru库进行Python日志记录时,可以通过自定义的filter函数来筛选并记录特定的日志信息。此函数接收一个记录对象作为参数,根据日志消息内容(message)、级别(level)或其他日志属性,返回布尔值以决定是否记录该条日志。如果函数返回True,则日志被记录;若返回False,则忽略该日志。
1 | |
此外可以结合bind方法进行过滤,bind方法用于向日志记录器添加额外的上下文信息。这些信息将被包含在每条日志消息中,但不会改变日志消息本身。如下所示:
1 | |
还可以使用lambda函数直接配置filter参数,一个完整的例子:
1 | |
logger.bind()方法用于绑定参数到日志记录器中,这些参数可以在日志信息中引用。例如,我们可以使用logger.bind()方法绑定一个user_id参数,并在日志信息中引用该参数,示例如下:
1 | |
在上面的示例中,我们使用logger.bind()方法绑定了一个user_id参数,并使用logger.info()方法输出了一条带有user_id参数的日志信息。
logger.sink()方法用于将日志记录器的输出发送到指定的目标,例如文件、网络等。例如,我们可以使用logger.sink()方法将日志记录器的输出发送到一个网络套接字中,示例如下
1 | |
在上面的示例中,我们创建了一个网络套接字,并使用
logger.add()方法将日志记录器的输出发送到该套接字中。接着,我们使用logger.info()方法输出了一条日志信息,该信息将被发送到网络套接字中。
因为logger是默认输出至stderr的,所以只需要在之前把它给remove掉就好了:
1 | |
https://blog.csdn.net/baidu_41879652/article/details/129478912
https://blog.csdn.net/bailang_zhizun/article/details/107863671
文章链接:
https://www.zywvvd.com/notes/coding/python/python-loguru/python-loguru/
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。