日志管理模块 ❀ loguru
一、前言
Python logging模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。
程序开发过程中,很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误、告警等信息输出,Python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志记录提供了一组便利功能,用于简单的日志记录用法。
使用Python Logging模块的主要好处是所有的Pyhon模块都可以参与日志记录,logging模块提供了大量具有灵活性的功能。
为什么要使用loguru?
简单且方便的帮助我们输出需要的日志信息:
使用 Python 来写程序或者脚本的话,常常遇到的问题就是需要对日志进行删除。一方面可以帮助我们在程序出问题的时候排除问题,二来可以帮助我们记录需要关注的信息。
但是,使用自带自带的 logging 模块的话,则需要我们进行不同的初始化等相关工作。对应不熟悉该模块的同学来说,还是有些费劲的,比如需要配置 Handler/Formatter 等。 随着业务的复杂度提升, 对日志收集有着更高的要求, 例如: 日志分类, 文件存储, 异步写入, 自定义类型等等
loguru 是一个 Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。
二、logguru的安装
2.1 pip的安装
pip install loguru
2.2 Pycharm下安装
2.3 功能特性介绍
有很多优点,以下列举了其中比较重点的几点:
- 开箱即用,无需准备
- 无需初始化,导入函数即可使用
- 更容易的文件日志记录与转存/保留/压缩方式
- 更优雅的字符串格式化输出
- 可以在线程或主线程中捕获异常
- 可以设置不同级别的日志记录样式
- 支持异步,且线程和多进程安全
- 支持惰性计算
- 适用于脚本和库
- 完全兼容标准日志记录
- 更好的日期时间处理
三、logguru的功能详解
3.1 开箱即用,无需准备
from loguru import logger
logger.debug("日志信息1")
上面的日志记录语句,默认向stderr(控制台)打印了一条输出语句,输出结果如下所示:
可以看出,loguru默认配置了一套日志输出格式,有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好。所以我们不需要提前配置什么,直接用就可以。
3.2 add()函数
无需初始化,导入函数即可使用,那么你肯定要问,如何解决一下问题?
- 如何添加处理程序(handler)呢?
- 如何设置日志格式(logs formatting)呢?
- 如何过滤消息(filter messages)呢?
- 如何设置级别(log level)呢?
logger.add(sys.stderr, \
format="{time} {level} {message}",\
filter="my_module",\
level="INFO")
3.3 更容易的文件日志记录与转存/保留/压缩方式
# 日志文件记录
logger.add("file_{time}.log")
# 日志文件转存
logger.add("file_{time}.log", rotation="500 MB")
logger.add("file_{time}.log", rotation="12:00")
logger.add("file_{time}.log", rotation="1 week")
# 多次时间之后清理
logger.add("file_X.log", retention="10 days")
# 使用zip文件格式保存
logger.add("file_Y.log", compression="zip")
通过配置rotaion参数,指定文件疼记录的条件
rotation=“500 MB” 可以实现每500MB存储一个日志文件
rotation=“12:00” 每天中午12点创建一个新的日志文件
rotation=“1 week” 每周创建一个新的日志文件
通过配置retention参数,可以指定日志的保留时长
retention=“10 days” 每隔10天就会清理旧的日志,这样就不会造成内存的浪费
通过配置compression参数可以指定日志文件的压缩格式
compression=“zip” 可以指定日志文件的压缩格式为zip格式,可以节省存储空间
3.4 日志插件推荐-Ideolog(高亮显示日志)
3.4.1 Pycharm自带插件,安装即可
3.4.2 Ideolog配置
进入.log文件中,点击Configure log,通过正则表达式进行匹配需要高亮的关键字,一般错误ERROR关键字进行高亮显示
效果展示:
3.5 异常捕获
最让我感到loguru模块功能强大的地方就是它的异常捕获功能。如果程序在运行过程出现崩溃或错误,记录日志是我们回溯程序执行过程的一个重要方式,但是很多时候,根据日志并不知道程序为什么出错或者看不出来程序具体出错在哪些地方,此时如果我们能在日志中记录当异常发生时的情况或者信息,那么多我们解决程序问题来说,简直事半功倍。
在loguru模块中,异常的捕获有两种方式
3.5.1 catch装饰器方法
from loguru import logger
logger.add("runtime.log")
@logger.catch
def my_function(x, y, z):
return 1 / (x + y + z) # An error? It's caught anyway!
my_function(0, 0, 0)
上面的代码中,通过catch装饰器对函数my_function进行装饰,这样,当该函数出现异常时,就会打印出异常日志信息,如下所示:
在日志信息中,不仅指明了异常出现的地方,而且把参数的值也记录下来了。
3.5.2 exception方法
from loguru import logger
logger.add("runtime.log")
def my_function1(x, y, z):
try:
return 1 / (x + y + z)
except ZeroDivisionError:
logger.exception("What?!")
my_function1(0, 0, 0)
记录的日志信息如下所示:
3.6 关闭console输出
logger.remove(handler_id=None)
好辣🌶, 关于loguru的介绍就介绍到这里, 喜欢本篇博文记得点赞收藏哦~ ❤☕️