python优秀第三方异步日志库loguru介绍_loguru python-CSDN博客
Loguru:一个超省事的Python库 - 知乎 (zhihu.com)
Intro
在编写调试Python代码过程中,我们经常需要记录日志,通常我们会采用python自带的内置标准库logging,但是使用该库,配置较为繁琐。为了提升编程效率,本文重点介绍最近发现的一个宝藏第三方日志库Loguru,该库名字来自于印度语,含义为日志大师。
优点
开箱即用,直达专业水平,相比于系统自带logging就是大学水平
-
设置Handler,Formatter,Filter 都只用一个add函数。
-
如果你认识这三个英文单词,但是不知道他们在log里面起什么作用。没关系,有了loguru你不需要知道。
-
debug显示黄色,info蓝色,warn显示红色,这些基本的人类需求,自带的logging竟然没有。loguru提供了,依然开箱即用,依然很专业。
-
时间戳格式,自动给你设置好
-
还有你想不到的,比如记录哪段代码哪行触发的log
依然很灵活,可以配置适用各种需求
-
log文件想控制在100MB?
-
log文件每天凌晨新建一个?老的自动备份
-
log文件保留10天,太老的就删了吧
-
log文件压缩压缩,太占空间
真正的做到了开箱即用
from loguru import logger
# 直接输出一行日志
logger.debug("That's it, beautiful and simple logging!")
# 添加log文件
logger.add("file_name.log")
logger.debug("msg msg msg!")
"""
控制台打印:
2024-05-09 10:43:47.380 | DEBUG | __main__:<module>:4 - That's it, beautiful and simple logging!
2024-05-09 10:43:47.382 | DEBUG | __main__:<module>:8 - msg msg msg!
日志文件 file_name.log 中的内容:
2024-05-09 10:46:39.292 | DEBUG | __main__:<module>:10 - msg msg msg!
"""
日志保存
我们可以通过简单的配置,来让日志保存更加人性化。比如我们想要删除老的日志,或者我们希望自动压缩保存好的日志,可以参考一下命令:
logger.add("file_1.log", rotation="500 MB") # 文件过大(超过500M)就会重新生成一个文件
logger.add("file_2.log", rotation="12:00") # 每天12点创建新文件
logger.add("file_3.log", rotation="1 week") # 文件时间过长就会创建新文件
logger.add("file_4.log", retention="10 days") # 一段时间后会清空
logger.add("file_5.log", compression="zip") # 保存zip格式
详解ADD函数
基本参数释义:
-
sink:可以是一个 file 对象,例如
sys.stderr
或open('file.log', 'w')
,也可以是str
字符串或者pathlib.Path
对象,即文件路径,也可以是一个方法,可以自行定义输出实现,也可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等,还可以是 coroutine function,即一个返回协程对象的函数等。 -
level:日志输出和保存级别。
-
format:日志格式模板。
-
filter:一个可选的指令,用于决定每个记录的消息是否应该发送到 sink。
-
colorize:格式化消息中包含的颜色标记是否应转换为用于终端着色的 ansi 代码,或以其他方式剥离。 如果没有,则根据 sink 是否为 tty(电传打字机缩写) 自动做出选择。
-
serialize:在发送到 sink 之前,是否应首先将记录的消息转换为 JSON 字符串。
-
backtrace:格式化的异常跟踪是否应该向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。
-
diagnose:异常跟踪是否应显示变量值以简化调试。建议在生产环境中设置
False
,避免泄露敏感数据。 -
enqueue:要记录的消息是否应在到达 sink 之前首先通过多进程安全队列,这在通过多个进程记录到文件时很有用,这样做的好处还在于使日志记录调用是非阻塞的。
-
catch:是否应自动捕获 sink 处理日志消息时发生的错误,如果为
True
,则会在sys.stderr
上显示异常消息,但该异常不会传播到 sink,从而防止应用程序崩溃。
当且仅当 sink 是文件路径时,以下参数适用:
-
rotation:一种条件,指示何时应关闭当前记录的文件并开始新的文件。
-
retention *:过滤旧文件的指令,在循环或程序结束期间会删除旧文件。
-
compression:日志文件在关闭时应转换为的压缩或存档格式。
-
delay:是在配置 sink 后立即创建文件,还是延迟到第一条记录的消息时再创建。默认为
False
。 -
mode:内置
open()
函数的打开模式,默认为a
(以追加模式打开文件)。 -
buffering:内置
open()
函数的缓冲策略,默认为1
(行缓冲文件)。 -
encoding:内置
open()
函数的文件编码,如果None
,则默认为locale.getpreferredencoding()
。 -
kwargs:其他传递给内置
open()
函数的参数。
这么多参数可以见识到 add()
函数的强大之处,仅仅一个函数就能实现 logging 模块的诸多功能,接下来介绍几个比较常用的方法。
[文章导入自 http://qzq-go.notion.site/2869fff05ca7494daf734f236a4d2857 访问原文获取高清图片]