Loguru 更易使用的日志模块

发布时间 2023-08-31 22:03:43作者: 工作手记

1 关于Loguru

在python中,和Logging一样,Loguru也是用来记录日志的,但是Loguru使用起来更加简单,更容易上手

在Loguru中,要知道的唯一的概念就是logger, 通过logger, 几乎就能完成你想要记录日志的所有事情,不像Logging,记录日志需要添加Handler、Formattet、Filter

2 Loguru的用法

2.1 基础用法

Loguru是第三方包,使用前需要安装

pip install loguru	#安装
pip show logure 	#安装后,查看相关信息

image

image
如上,直接用logger调用不同级别的方法的方法即可, 不需要像logging要去创建logger
默认情况下,Loguru是通过sys.stderr将标准错误输出输出到控制台,当然,输出目的可以配置更改的

2.2 logger.add()和logger.remove(): 定义日志输出时的行为

要达到logging中的Handler(日志输出地)、Formattetr(日志输出格式)、Filter(过滤输出的日志数据的效果,以及定义输出日志级别等等,全都可以在logger.add()这一个函数中完成
image

控制台
image

文件
image

有add()就有remove(),add()函数定义了日志输出行为后,会返回一个int类型的id,remove()函数通过这个id就可以删除之前在add()函数中所定义的东西

image
控制台
image
文件
文件的日志内容是空白的

remove(handler_id=None): 会删除之前所有add()中自定义的东西,包括Loguru的默认配置
image

控制台现在 不会输出任何数据

文件输出
image

2.2.1 add(xx)中的参数

image

  • sink:可以传入一个 file 对象(file-like object),或一个 str 字符串或者 pathlib.Path 对象,或一个方法(coroutine function),或 logging 模块的 Handler(logging.Handler)。
  • level (int or str, optional) :应将已记录消息发送到接收器的最低严重级别。
  • format (str or callable, optional) :格式化模块,在发送到接收器之前,使用模板对记录的消息进行格式化。
  • filter (callable, str or dict, optional) :用于决定每个记录的消息是否应该发送到接收器。
  • colorize (bool, optional) – 是否应将格式化消息中包含的颜色标记转换为用于终端着色的Ansi代码,或以其他方式剥离。如果None,根据水槽是否为TTY自动作出选择。
  • serialize (bool, optional) :在发送到接收器之前,记录的消息及其记录是否应该首先转换为JSON字符串。
  • backtrace (bool, optional) :格式化的异常跟踪是否应该向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。
  • diagnose (bool, optional) :异常跟踪是否应该显示变量值以简化调试。在生产中,这应该设置为“False”,以避免泄漏敏感数据。
  • enqueue (bool, optional) :要记录的消息在到达接收器之前是否应该首先通过多进程安全队列。当通过多个进程将日志记录到文件中时,这是非常有用的。这还具有使日志调用非阻塞的优点。
  • catch (bool, optional) :是否应该自动捕获接收器处理日志消息时发生的错误。如果True上显示异常消息 sys.stderr。但是,异常不会传播到调用者,从而防止应用程序崩溃

如果当接收器(sink)是文件路径( pathlib.Path )时,可以应用下列参数

  • rotation:分隔日志文件,何时关闭当前日志文件并启动一个新文件的条件,;例如,"500 - MB"、"0.5 GB"、"1 month 2 weeks"、"10h"、"monthly"、"18:00"、"sunday"、"monday at 18:00"、"06:15"
  • retention (str, int, datetime.timedelta or callable, optional) ,可配置旧日志的最长保留时间,例如,"1 week, 3 days"、"2 months"
  • compression (str or callable, optional) :日志文件在关闭时应转换为的压缩或归档格式,例如,"gz"、"bz2"、"xz"、"lzma"、"tar"、"tar.gz"、"tar.bz2"、"tar.xz"、"zip"
  • delay (bool, optional):是否应该在配置了接收器之后立即创建文件,或者延迟到第一个记录的消息。默认为' False '。
  • mode (str, optional) :与内置open()函数一样的打开模式。默认为' "a"(以附加模式打开文件)。
  • buffering (int, optional) :内置open()函数的缓冲策略,它默认为1(行缓冲文件)。
  • encoding (str, optional) :文件编码与内置的' open() '函数相同。如果' None ',它默认为'locale.getpreferredencoding()

image

参数具体见文档
具体见 https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add

2.2.1.1 add()中format参数: 定义日志输出格式

image
控制台输出
image
如上,format参数字段的值是一个字符串模板,模板中可用的字段如下,字段与字段间的连接符可自定义
image

2.2.1.2 add()filter参数: 定义输出或不输出哪些日志数据

filter可接受一个字符串、函数、字典

字符串
loguru_a.py
image
loguru_b.py
image
控制台输出
image
如上,只是输出了b文件的日志数据,filter为字符串时,只会输出指定模块和指定模块的子模块中的数据

字典
loguru_b.py
image
控制台输出:
image
如上,为字典时, 可指定每个的输出标准,标准为True或False,表示输出或不输出该模块的日志
,标准为日志级别时,表示该模块输出日志的最低级别
如果字典中key为空字符串"",表示所有模块,它的值即为所有模块的默认值

函数
loguru_b.py
image
控制台输出
image
如上,所有的日志数据都作为参数record传递进去,函数返回值为True的数据会被输出,为False则不输出

2.2.1.3 add()中的level参数: 定义输出日志的最低级别

loguru_b.py
image
控制台输出
image

2.3 @logger.catch: 在日志中记录异常

image
如上,利用装饰器@logger.catch不仅能将一场自动记录在日志,还能将发生异常除的相关数据记录下来供我们判断