python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题
基于之前日志问题,二次封装日志后,导致日志输出的文件名不对,取到的文件一直都是当前二次封装的log的文件名,基于这个问题,做了优化,详细看
https://www.cnblogs.com/cuitang/p/16547816.html
存在问题:
封装模块名log_print
1、项目A依赖项目B的模块A,项目B的模块A使用的是项目B的log_print,里面配置的filehandler地址是不同的;在项目A使用时,默认取到了项目B模块的filehandler,导致将项目A的日志写到了项目B里面,这个是不对的;-- 产生问题的原因,handlers没有被关闭
2、使用pytest框架,执行测试用例,日志没有输出到控制台,也没有输出到文件
原来的日志模块设计:检测了当前没有日志的handlers,才会去创建,但pytest框架是有自带的loghandler, 所以在使用pytest执行用例时,来到创建这一步,判断已经存在,不会去创建我们自定义的log日志输出和写 入的handlers,所以最后执行完,控制台和日志文件都没有日志输出;-- 产生这个问题原因,也是 因为没有正确的关闭原有的handler,来重新创建自定义的handlers
代码优化:在初始化二次封装logging模块时,获取目前所有的handler,然后循环将其关闭;继续往下设计日志输出模式,然后重新创建,就可以避免以上的问题
def __init__(self): self.logger = logging.getLogger() # print(f"获取当前的日志logger: {self.logger.handlers}") # === 1、 在添加handlers之前,先将已存在的移除,后面再重新创建,可以防止日志重复 === while self.logger.hasHandlers(): for handler in self.logger.handlers: self.logger.removeHandler(handler) self.logger.setLevel("DEBUG") # === 2、 设置日志输出格式 === self.log_colors_config = { 'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'red', } self.color_fmt = colorlog.ColoredFormatter( '%(log_color)s%(asctime)s 【%(levelname)s】 [%(filename)s:%(funcName)s:%(lineno)s]-日志信息: %(message)s', log_colors=self.log_colors_config) self.formatter = logging.Formatter( '%(asctime)s 【%(levelname)s】 [%(filename)s:%(funcName)s:%(lineno)s]-日志信息: %(message)s') # === 3、 添加日志收集器: 控制台和文件输出 self.logger.addHandler(self.get_console_handler()) self.logger.addHandler(self.get_file_handler())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!