上一小节我们讲解了文件读写方法的封装方法,本小节我们完成一下框架日志的封装方法。
首先我们讲解一下日志封装和日志记录有哪些用处?
- 更加方便的设置日志的格式和输出方式
- 全局方法可以各个类/函数中都能统一调用
- 分类记录接口用例执行日志,方便嵌入测试报告
- 错误日志提示,方便代码调试或者做群消息告警
新建log.py
#log.py
import logging
import os
from datetime import datetimeclass LoggerHandler(logging.Logger):def __init__(self, name, level, format_string=None):super().__init__(name, level=level)self._set_format(format_string)self._add_file_handler(level)self._add_stream_handler(level)def _set_format(self, format_string):"""设置日志格式"""formatter = logging.Formatter(format_string or "%(asctime)s - %(levelname)s - %(message)s")for handler in self.handlers:handler.setFormatter(formatter)def _add_file_handler(self, level):"""添加文件处理器"""# 获取脚本所在目录的根路径root = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__))))# 创建日志目录log_directory = os.path.join(root, "logs")os.makedirs(log_directory, exist_ok=True)# 获取当前时间戳,并格式化为字符串current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 构造日志文件名log_file_name = f"{current_time}.log"log_file_path = os.path.join(log_directory, log_file_name)file_handler = logging.FileHandler(log_file_path, mode="w", encoding='utf-8')file_handler.setLevel(level)self.addHandler(file_handler)def _add_stream_handler(self, level):"""添加流处理器"""stream_handler = logging.StreamHandler()stream_handler.setLevel(level)self.addHandler(stream_handler)# 初始化LoggerHandler
logger = LoggerHandler(name="Logger",level=logging.INFO,format_string="%(asctime)s -- %(levelname)s -- %(filename)s -- %(funcName)s -- %(message)s"
)# 示例:记录一条日志
logger.info("This is an info message.")
代码逻辑讲解如下:
- 一个类LoggerHandler继承python自带的logging模块
- _set_format方法用于设置日志的格式,日志格式是一个字符串
- _add_file_handler方法用于将日志输出到log文件中记录,具体逻辑是先创建输出的目录路径,再是设置日志文件的名称,最后添加到文件处理器中即可self.addHandler(file_handler)
- _add_stream_handler方法用于将日志输出到终端控制台,添加流处理器即可 self.addHandler(stream_handler)
以上就是框架日志的封装方法,大家也可以自己打印一些日志,练习一下!