QZQ的小世界!

  • 首页
你好!
这里是QZQ的博客站!
  1. 首页
  2. 未分类
  3. 正文

loguru-python优秀第三方异步日志库

2025年4月4日 341点热度 0人点赞 0条评论

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 访问原文获取高清图片]

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: IT技术 Python Python库介绍 Python第三方库
最后更新:2025年4月3日

QZQ

一只涉猎广泛的技术爱好者,绝赞养猫中~

点赞
< 上一篇
下一篇 >

归档

  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月

分类

  • 技术
  • 未分类

COPYRIGHT © 2024 QZQ的小世界!. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang