Python logging模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。
程序开发过程中,很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误、告警等信息输出,Python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志记录提供了一组便利功能,用于简单的日志记录用法。
使用Python Logging模块的主要好处是所有的Pyhon模块都可以参与日志记录,logging模块提供了大量具有灵活性的功能。
为什么要使用loguru?
简单且方便的帮助我们输出需要的日志信息:
使用 Python 来写程序或者脚本的话,常常遇到的问题就是需要对日志进行删除。一方面可以帮助我们在程序出问题的时候排除问题,二来可以帮助我们记录需要关注的信息。
但是,使用自带自带的 logging 模块的话,则需要我们进行不同的初始化等相关工作。对应不熟悉该模块的同学来说,还是有些费劲的,比如需要配置 Handler/Formatter 等。 随着业务的复杂度提升, 对日志收集有着更高的要求, 例如: 日志分类, 文件存储, 异步写入, 自定义类型等等
loguru 是一个 Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。
pip install loguru
有很多优点,以下列举了其中比较重点的几点:
from loguru import loggerlogger.debug("日志信息1")
上面的日志记录语句,默认向stderr(控制台)打印了一条输出语句,输出结果如下所示:
可以看出,loguru默认配置了一套日志输出格式,有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好。所以我们不需要提前配置什么,直接用就可以。
无需初始化,导入函数即可使用,那么你肯定要问,如何解决一下问题?
logger.add(sys.stderr, \ format="{time} {level} {message}",\ filter="my_module",\ level="INFO")
# 日志文件记录
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格式,可以节省存储空间
进入.log文件中,点击Configure log,通过正则表达式进行匹配需要高亮的关键字,一般错误ERROR关键字进行高亮显示
效果展示:
最让我感到loguru模块功能强大的地方就是它的异常捕获功能。如果程序在运行过程出现崩溃或错误,记录日志是我们回溯程序执行过程的一个重要方式,但是很多时候,根据日志并不知道程序为什么出错或者看不出来程序具体出错在哪些地方,此时如果我们能在日志中记录当异常发生时的情况或者信息,那么多我们解决程序问题来说,简直事半功倍。
在loguru模块中,异常的捕获有两种方式
from loguru import loggerlogger.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进行装饰,这样,当该函数出现异常时,就会打印出异常日志信息,如下所示:
在日志信息中,不仅指明了异常出现的地方,而且把参数的值也记录下来了。
from loguru import loggerlogger.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)
记录的日志信息如下所示:
logger.remove(handler_id=None)
好辣🌶, 关于loguru的介绍就介绍到这里, 喜欢本篇博文记得点赞收藏哦~ ❤☕️
上一篇:P1347 排序