首页 > 编程语言 >python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题

python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题

时间:2022-08-24 10:23:00浏览次数:92  
标签:logging log handlers self handler 日志 logger 正确

基于之前日志问题,二次封装日志后,导致日志输出的文件名不对,取到的文件一直都是当前二次封装的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())

标签:logging,log,handlers,self,handler,日志,logger,正确
From: https://www.cnblogs.com/cuitang/p/16618918.html

相关文章