Loguru是一个功能强大且易于使用的开源Python日志记录库。它建立在Python标准库中的logging模块之上,并提供了更加简洁直观、功能丰富的接口。Logging模块的使用见: Python日志记录库logging总结。Loguru官方仓库见: loguru,loguru官方文档见: loguru-doc。
Loguru的主要特点包括:
- 简单易用:无需复杂的配置和定制即可实现基本的日志记录和输出。
- 灵活的日志格式:支持自定义日志格式,并提供丰富的格式化选项。
- 丰富的日志级别:支持多种日志级别,例如DEBUG、INFO、WARNING、ERROR和CRITICAL。
- 多种日志目标:可以将日志输出到终端、文件、电子邮件、网络服务器等目标。
- 强大的日志处理功能:支持日志过滤、格式化、压缩、旋转等功能。
- 支持异步日志记录:能够极大地提升日志记录的性能。
- 支持跨进程、跨线程的日志记录:可以安全地记录多进程、多线程应用程序的日志。
Loguru与logging是Python中常用的两个日志记录库,但两者在功能和易用性方面存在一些差异,如下所示:
特性 | Loguru | logging |
---|---|---|
易用性 | 更简单易用 | 相对复杂 |
日志格式 | 更灵活 | 较简单 |
日志级别 | 更丰富 | 较少 |
日志目标 | 更多种类 | 较少 |
日志处理功能 | 更强大 | 较弱 |
异步日志记录 | 支持 | 不支持 |
跨进程、跨线程支持 | 支持 | 支持 |
总的来说,loguru在易用性、功能性和性能方面都优于logging。如果要一个简单、强大且易于使用的日志系统,loguru是一个很好的选择。而如果只是需要快速输出一些调试信息,print可能就足够了。不过,对于生产环境,使用loguru或其他日志系统通常会更加合适。
Loguru安装命令如下:
pip install loguru
[toc]
1 使用说明
1.1 基础用法
简单使用
Loguru的核心概念是只有一个全局的日志记录器,也就是logger。这个设计使得日志记录变得非常简洁和一致。使用Loguru时,你不需要创建多个日志实例,而是直接使用这个全局的logger来记录信息。这不仅减少了配置的复杂性,也使得日志管理更加集中和高效。
输出:
Loguru日志输出默认格式如下:
- 时间戳:表示日志记录的具体时间,格式通常为年-月-日 时:分:秒.毫秒。
- 日志级别:表示这条日志的严重性级别。
- 进程或线程标识:表示日志来自哪个模块或脚本。
__main__
表示日志来自主模块。如果是其他文件会显示文件名。 - 文件名和行号:记录日志消息的函数名和行号。
- 日志消息:实际的日志内容,此外loguru支持使用颜色来区分不同的日志级别,使得日志输出更加直观.
日志等级
Loguru可以通过简单的函数调用来记录不同级别的日志,并自动处理日志的格式化和输出。这一特点可以让使用者专注于记录重要的信息,而不必关心日志的具体实现细节。Loguru支持的日志级别,按照从最低到最高严重性排序:
- TRACE: 最详细的日志信息,用于追踪代码执行过程。Loguru默认情况下使用DEBUG级别作为最低日志记录级别,而不是TRACE级别。这是因为TRACE级别会产生大量的日志信息。
- DEBUG: 用于记录详细的调试信息,通常只在开发过程中使用,以帮助诊断问题。
- INFO: 用于记录常规信息,比如程序的正常运行状态或一些关键的操作。
- SUCCESS: 通常用于记录操作成功的消息,比如任务完成或数据成功保存。
- WARNING: 用于记录可能不是错误,但需要注意或可能在未来导致问题的事件。
- ERROR: 用于记录错误,这些错误可能会影响程序的某些功能,但通常不会导致程序完全停止。
- CRITICAL: 用于记录非常严重的错误,这些错误可能会导致程序完全停止或数据丢失。
输出:
1.2 日志配置
在loguru中,add函数用于添加日志处理器。这个函数用于指定日志消息应该被发送到何处,例如控制台、文件或其他自定义的目的地。add函数主要参数介绍如下:
sink
: 定义日志消息的输出位置,可以是文件路径、标准输出(stdout)、标准错误(stderr,默认)或其他自定义的输出位置。format
: 指定日志消息的格式,可以是简单的字符串,也可以是格式化字符串,支持各种字段插值。level
: 设置处理程序处理的日志消息的最低级别。比如设置为DEBUG,则处理程序将处理所有级别的日志消息。filter
: 可选参数,用于添加过滤器,根据特定的条件过滤掉不需要的日志消息。colorize
: 布尔值,指定是否对日志消息进行着色处理,使日志在控制台中更易于区分。serialize
: 布尔值,指定是否对日志消息进行序列化处理,通常与enqueue=True
一起使用,以确保多线程安全。enqueue
: 布尔值,指定是否将日志消息放入队列中处理,用于多线程应用中避免阻塞。backtrace
: 布尔值或字符串,指定是否记录回溯信息,默认为False
。diagnose
: 布尔值,启用后,会在处理程序内部出现错误时记录诊断信息。rotation
: 日志文件轮换的配置,支持按大小或时间进行日志文件的轮换。retention
: 用于设置日志文件的保留时间。compression
: 布尔值,指定是否对轮换后的日志文件进行压缩处理。
输出:
当连续两次调用 add 函数时,loguru 会将新的日志处理器添加到处理器列表中,而不是覆盖之前的处理器。这意味着所有添加的处理器都会接收到日志消息,并且按照它们被添加的顺序来处理这些消息。
如果想删除所有已添加的日志处理器,loguru运行使用 logger.remove()方法不带任何参数来移除所有日志处理器。
注意调用logger.remove()之后的所有日志将不会被记录,因为没有处理器了。
如果希望移除某些日志处理器,而不是从所有日志器中移除,代码如下:
如果想将日志输出到日志台,代码如下:
时间自定义
可以使用datatime库来自定义日志时间格式。
日志轮换
1.3 进阶使用
异常捕获
@logger.catch装饰器可以用来装饰my_function函数,并将这些异常信息记录到日志中。
过滤
使用loguru库进行Python日志记录时,可以通过自定义的filter函数来筛选并记录特定的日志信息。此函数接收一个记录对象作为参数,根据日志消息内容(message)、级别(level)或其他日志属性,返回布尔值以决定是否记录该条日志。如果函数返回True,则日志被记录;若返回False,则忽略该日志。
此外可以结合bind方法进行过滤,bind方法用于向日志记录器添加额外的上下文信息。这些信息将被包含在每条日志消息中,但不会改变日志消息本身。如下所示: