目录
日志输出的重要性不言而喻,不仅可以观测执行过程,更重要的是在发生bug时可以快速的定位到问题所在, Pytest 是出色的测试框架,但它不会自动显示 print 语句或日志的输出,这在尝试调试失败的测试或了解流程时可能会成为问题。同时也是支持设置日志级别,记录日志的到指定的文件
自定义日志记录器和内置的日志记录器
日志记录器的重要性在于可以随时设置不同级别的日志,python内置的日志记录器分类了5类的日志级别。标识日志的严重级别:
- - 未设置 NOTSET(0):此级别捕获所有消息,无论其严重性如何。
- - 调试 Debug(10):此级别用于任何可以帮助识别潜在问题的内容,例如变量值或程序执行的步骤。
- - 信息 Infor(20):此级别用于确认事情是否按预期工作。
- - 警告 Warning (30):此级别表示发生了意外情况,或者在不久的将来可能会出现一些问题(例如“磁盘空间不足”)。但是,该软件仍按预期工作。
- - 错误 Error(40):此级别表示存在更严重的问题,导致软件无法执行某项功能。
- - 严重 Critical(50):此级别表示一个非常严重的错误,可能会阻止程序继续运行。
自定义记录器允许您更方便地定义和处理这些级别,从而进一步提高记录过程的精度和控制。
基于以上的目标,本文旨在学习在python中设置 pytest 日志记录的过程。因此我们将探讨如何在 Pytest 中输出日志、如何禁用日志以及如何在单个测试级别更改日志级别。
项目代码
项目目录树
temperature_convertor
├── requirements.txt
├── src
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-310.pyc
│ │ └── custom_logger.cpython-310.pyc
│ ├── custom_logger.py
│ └── temp_convertor.py
└── tests
├── __init__.py
└── test_temp_convertor.py
运行环境:
% which python3
/usr/local/bin/python3
macOS 14.0
自定义日志记录器
我们使用了一个自定义记录器,配置为在级别显示日志消息。DEBUG
,
通过创建自己的记录器,您可以控制记录器的行为,从而可以自定义它以满足您的特定要求。
src/custom_logger.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This module is ***
# @Time : 2024/6/9 10:25
# @Author :
# function :
# @File : custom_logger.py
import logging
from enum import Enum
class LogLevel(Enum):
DEBUG = logging.DEBUG
INFO = logging.INFO
WARNING = logging.WARNING
ERROR = logging.ERROR
CRITICAL = logging.CRITICAL
def console_logger(name:str, level:LogLevel) -> logging.Logger:
logger = logging.getLogger(f"__{name}__")
logger.setLevel(level.value)
# Create a console