如何使用loguru实现Python pytest接口自动化测试的日志管理?

摘要:python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细)。 但logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理,则容易出现日志丢失或记录错乱的情况。 p
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中直接提供了一个日志记录对象logger,拿来即用; loguru默认的输出格式为:时间 | 级别 | 模块名 | 行号 | 日志信息; 不同级别的日志在控制台显示颜色不一样。 当然,在实际项目中我们还需要日志管理器有更丰富的配置,loguru中的add()方法便具有强大的配置功能,接下来介绍add()方法提供的常用配置功能。 add()常用参数说明 loguru模块源码中add()方法的参数如下: sink(官方文档简单翻译如下): 可以传入类file对象,如sys.stderr或者open('test.log', 'w')。 可以传入文件路径str或pathlib,如示例代码中的写入日志文件路径。路径可以使用一些附加参数对其进行参数化,如test_{time}.log,{time}即时间参数,创建文件时文件名称中会加入时间。 可以传入像lambda这样的可调用函数的简单函数,如lambda msg:print(msg)。这允许完全由用户偏好和需求定义日志记录过程。 还可以是使用async def语句定义的异步协程函数。该函数返回的协程对象将使用loop.create_task()添加到事件循环中。在使用complete()结束循环之前,应该等待这些任务。 也支持传入logging模块的Handler,如FileHandler、StreamHandler等,Loguru记录会自动转换为日志模块预期的结构。 level:发送到sink的日志消息的最低日志级别,即输出的最低日志级别。 format:定义日志的输出格式。 filter:过滤日志。 colorize:终端日志输出的颜色。 serializer:bool值,输出日志时是否先格式化成JSON数据格式。 backtrace:bool值,是否进行异常跟踪(即backtrace信息记录)。 diagnose:bool值,异常跟踪是否应显示变量值以简化调试。在生产中应将其设置为False,以避免泄漏敏感数据。 enqueue:bool值,日志消息输出之前是否先通过多进程安全队列,多进程多线程运行写入日志时需用到,避免日志记录丢失或混乱。 catch:bool值,是否自动捕获接收器处理日志消息时发生的错误。如果为True,则在sys上显示异常消息。 继续看loguru模块源码,如下: 即我们需要将日志写入指定的文件时,可以使用截图中新增的参数。常用的参数说明如下: rotation:指定日志文件记录条件,日志输出太多需要隔一段时间写入新文件时适用。
阅读全文