python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python日志管理模块loguru

python+pytest接口自动化之日志管理模块loguru简介

作者:给你一页白纸

python中有一个用起来非常简便的第三方日志管理模块--loguru,不仅可以避免logging的繁琐配置,而且可以很简单地避免在logging中多进程多线程记录日志时出现的问题,甚至还可以自定义控制台输出的日志颜色,接下来我们来学习怎么使用loguru模块进行日志管理

python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细)

logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理,则容易出现日志丢失或记录错乱的情况。

python中有一个用起来非常简便的第三方日志管理模块--loguru,不仅可以避免logging的繁琐配置,而且可以很简单地避免在logging中多进程多线程记录日志时出现的问题,甚至还可以自定义控制台输出的日志颜色。

接下来我们来学习怎么使用loguru模块进行日志管理。

安装

第三方模块,需要先安装,安装命令如下:

pip install loguru

简单示例

简单使用示例如下:

from loguru import logger
# 日志写入文件则需使用add()方法,"../log/test.log"即日志文件路径,可自定义。
# 写入文件的日志里有中文的话,需要加上encoding="utf-8",否则会显示乱码。
logger.add("../log/test.log", encoding="utf-8", rotation="500MB",
           enqueue=True, retention="7 days")
# 打印不同类型的日志
logger.debug("这是一段debug级别日志")
logger.info("这是一段info级别日志")
logger.warning("这是一段warning级别日志")
logger.critical("这是一段critical级别日志")

上面的示例代码运行之后,会在控制台打印如下日志:

同时也会在 "../log/test.log" 路径中写入日志,如下:

由以上结果可以看出:

当然,在实际项目中我们还需要日志管理器有更丰富的配置,loguru中的add()方法便具有强大的配置功能,接下来介绍add()方法提供的常用配置功能。

add()常用参数说明

loguru模块源码中add()方法的参数如下:

sink(官方文档简单翻译如下):

level:发送到sink的日志消息的最低日志级别,即输出的最低日志级别。

format:定义日志的输出格式。

filter:过滤日志。

colorize:终端日志输出的颜色。

serializer:bool值,输出日志时是否先格式化成JSON数据格式。

backtrace:bool值,是否进行异常跟踪(即backtrace信息记录)。

diagnose:bool值,异常跟踪是否应显示变量值以简化调试。在生产中应将其设置为False,以避免泄漏敏感数据。

enqueue:bool值,日志消息输出之前是否先通过多进程安全队列,多进程多线程运行写入日志时需用到,避免日志记录丢失或混乱。

catch:bool值,是否自动捕获接收器处理日志消息时发生的错误。如果为True,则在sys上显示异常消息。

继续看loguru模块源码,如下:

即我们需要将日志写入指定的文件时,可以使用截图中新增的参数。常用的参数说明如下:

rotation:指定日志文件记录条件,日志输出太多需要隔一段时间写入新文件时适用。

# rotation指定日志文件最大为500MB,超过则新建文件记录日志
logger.add("../log/test.log", rotation="500MB")
# 指定每天12:00新建日志记录文件:rotation="12:00"
# 指定每隔10天新建日志记录文件:rotation="10 days"
# 指定每隔一个星期新建日志记录文件:rotation="1 week"
# 指定每隔两个月新建日志记录文件:rotation="2 months"

retention:指定日志保留时长,会清除超过指定时长的数据。

# rotation指定日志保留时长,如"1 week", "3 days", "2 months"
logger.add("../log/test.log", retention="10 days")

compression:配置文件压缩格式。

# rotation指定日志保留时长,如"gz", "bz2", "xz", "lzma", "tar", "tar.gz", "tar.bz2", "tar.xz", "zip"
logger.add("../log/test.log", compression="zip")

encoding:指定写入文件时的编码格式,这在示例代码中已说明。

使用

接下来,我们使用常用的参数来组合定义日志记录方式。

from loguru import logger
import sys
# format建议直接使用默认的格式
logger.add("../log/test_{time}.log", level="INFO", encoding="utf-8", enqueue=True, rotation="500MB", retention="1 week")
# 当然也可以自定义format,如下示例
# logger.add("../log/test_{time}.log", 
			format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name} | {line} | {message}", encoding="utf-8", 				enqueue=True, rotation="500MB", retention="1 week")
# 打印不同类型的日志
logger.debug("这是一段debug级别日志")
logger.info("这是一段info级别日志")
logger.warning("这是一段warning级别日志")
logger.critical("这是一段critical级别日志")

参数说明:

执行代码后,结果如下:

从结果中可以看出来,输出内容中模块部分显示的是如__main__:<module>:20的形式,而并不是我们想要看到的对应的模块名称,这是因为直接执运行了当前文件的文件,如果是其他模块调用执行便会显示对应的模块名称。

到此这篇关于python+pytest接口自动化(15)-日志管理模块loguru简介的文章就介绍到这了,更多相关python日志管理模块loguru内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文