Pytest中利用logging模块记录日志的完整指南
本文详细介绍如何在Pytest测试中使用Python内置的logging模块记录日志。内容涵盖日志级别的设置与切换、将日志输出至文件、控制文件写入模式(追加或覆盖),以及自定义包含时间戳、文件名和行号的日志格式,帮助开发者构建清晰的测试日志体系。
logging模块基础与日志级别
logging是Python语言中专门用于处理日志记录的模块。日志级别通常划分为debug、info、warning、error和critical五个等级。在默认情况下,日志级别设定为warning,这意味着低于该级别的日志不会被输出。在调试或测试阶段,建议将日志级别调整为debug或info以便获取更多信息;而在生产环境上线后,通常保持为warning或error级别以减少干扰。接下来,我们将通过创建一个名为demo.py的Python文件来快速体验logging模块的基本用法。在该文件中,我们可以调用logging模块对各个日志级别分别输出一条日志,具体代码如下所示。
import logging
logging.debug("this is debug log")
logging.info("this is info log")
logging.warning("this is warning log")
logging.error("this is error log")
logging.critical("this is critical log")执行上述demo.py文件后,观察控制台输出结果可以发现,仅打印了warning、error和critical级别的日志。这是因为Python中logging模块的默认级别被设定为warning,因此低于warning级别的日志(如debug和info)均不会显示。
(demo-HCIhX0Hq) E:\demo>python demo.py
WARNING:root:this is warning log
ERROR:root:this is error log
CRITICAL:root:this is critical log
(demo-HCIhX0Hq) E:\demo>当然,我们可以在代码中手动修改日志级别。例如,通过配置将日志级别调整为debug级别,具体实现代码如下。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("this is debug log")
logging.info("this is info log")
logging.warning("this is warning log")
logging.error("this is error log")
logging.critical("this is critical log")再次执行demo.py文件后,观察控制台输出,可以看到此时debug和info级别的日志均已正常显示出来,验证了级别修改的有效性。
(demo-HCIhX0Hq) E:\demo>python demo.py
DEBUG:root:this is debug log
INFO:root:this is info log
WARNING:root:this is warning log
ERROR:root:this is error log
CRITICAL:root:this is critical log
(demo-HCIhX0Hq) E:\demo>利用logging模块将日志写入文件同样十分便捷。只需在配置中指定文件路径即可,同时可以设定日志级别。例如,这里仍将级别设置为debug,意味着debug及以上级别的日志都会被写入到指定的日志文件中。具体配置代码如下。
日志文件写入与模式配置
import logging
logging.basicConfig(filename="demo.log",level=logging.DEBUG)
logging.debug("this is debug log")
logging.info("this is info log")
logging.warning("this is warning log")
logging.error("this is error log")
logging.critical("this is critical log")再次执行demo.py文件,此时控制台将不再打印任何日志信息,而是在当前目录下生成一个名为demo.log的文件。该文件的内容如下所示。
DEBUG:root:this is debug log
INFO:root:this is info log
WARNING:root:this is warning log
ERROR:root:this is error log
CRITICAL:root:this is critical log默认情况下,写入日志文件采用的是追加模式。因此,如果再次执行一次脚本,demo.log文件的内容将变为如下所示,即原有内容保留并追加新日志。
DEBUG:root:this is debug log
INFO:root:this is info log
WARNING:root:this is warning log
ERROR:root:this is error log
CRITICAL:root:this is critical log
DEBUG:root:this is debug log
INFO:root:this is info log
WARNING:root:this is warning log
ERROR:root:this is error log
CRITICAL:root:this is critical log除了追加模式,还可以设置日志写入的模式。例如,在配置中将filemode参数设置为'w',表示每次写入日志前会先清空文件内容;若将filemode设置为'a',则保持追加模式。如果不显式设置该参数,默认行为即为追加模式。具体代码示例如下。
import logging
logging.basicConfig(filename="demo.log",filemode='w',level=logging.DEBUG)
logging.debug("this is debug log")
logging.info("this is info log")
logging.warning("this is warning log")
logging.error("this is error log")
logging.critical("this is critical log")再次执行demo.py文件,由于模式被设置为'w',因此demo.log文件的内容会先被清空,然后写入新的日志,最终内容如下所示。
DEBUG:root:this is debug log
INFO:root:this is info log
WARNING:root:this is warning log
ERROR:root:this is error log
CRITICAL:root:this is critical log在查看其他产品的日志时,通常会看到包含文件名、时间、代码行数等详细信息。logging模块也支持这种格式的设置。例如,我们可以直接定义日志格式,并在控制台打印输出。具体配置代码如下。
自定义日志格式输出
import logging
logging.basicConfig(format=("%(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(message)s"),
datefmt="%Y-%m-%d_%H:%M:%S",
level=logging.DEBUG)
logging.debug("this is debug log")
logging.info("this is info log")
logging.warning("this is warning log")
logging.error("this is error log")
logging.critical("this is critical log")执行上述代码后,观察控制台输出结果,可以看到日志中包含了时间戳、日志级别、代码文件名、代码函数名以及日志内容等信息。这种格式基本符合我们对标准日志输出的期望。
(demo-HCIhX0Hq) E:\demo>python demo.py
2022-12-04_22:47:14 | DEBUG | demo.py:6 | this is debug log
2022-12-04_22:47:14 | INFO | demo.py:7 | this is info log
2022-12-04_22:47:14 | WARNING | demo.py:8 | this is warning log
2022-12-04_22:47:14 | ERROR | demo.py:9 | this is error log
2022-12-04_22:47:14 | CRITICAL | demo.py:10 | this is critical log
(demo-HCIhX0Hq) E:\demo>当然,Python中的logging模块还有许多其他高级应用技巧。但在Pytest中使用logging模块时,掌握上述简单用法已足够满足大部分需求,因此这里不再深入介绍logging的其他高级特性。
到此为止,关于在Pytest中使用logging模块记录日志的实例详解已介绍完毕。如需了解更多相关Pytest和logging模块的内容,建议搜索本站以前的文章或继续浏览后续相关文章。希望大家今后能多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









