我是靠谱客的博主 秀丽大米,这篇文章主要介绍解决python使用logging模块出现的重复日志问题,现在分享给大家,希望可以做个参考。

       最近一个在研项目需要做一个原型系统,为方便高效的保存处理过程,采用python的logging库实现日志功能。原型系统程序包含主函数文件和几个功能文件,每个文件中都实例化了自己封装好的日志类,但是出现了一个问题,每条日志会重复打印好几次。查了相关的资料,说是日志实例具备继承关系。

        解决办法就是在创建handler之前判断一下logger是否已经具备句柄了,若已存在,则不要再次创建。

import logging


# 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件
class Logger:
    def __init__(self, logger_id=1, logFile='Logs/xxx.log'):
        """
           指定保存日志的文件路径,日志级别,以及调用文件
           将日志存入到指定的文件中
        """
        # 创建一个logger
        self.logger = logging.getLogger("xxx_" + str(logger_id))
        self.logger.setLevel(logging.DEBUG)
        # self.logger.propagate = False

        # 先判断logger是否存在文件句柄,若不存在则进行创建,否则会出现日志重复打印的问题
        if not self.logger.handlers:
            # 创建一个handler,用于写入日志文件
            fh = logging.FileHandler(logFile)
            fh.setLevel(logging.DEBUG)

            # 再创建一个handler,用于输出到控制台
            # ch = logging.StreamHandler()
            # ch.setLevel(logging.DEBUG)

            # 定义handler的输出格式
            formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(funcName)s - %(message)s')
            fh.setFormatter(formatter)
            # ch.setFormatter(formatter)

            # 给logger添加handler
            self.logger.addHandler(fh)
            # self.logger.addHandler(ch)

    def getlog(self):
        return self.logger

最后

以上就是秀丽大米最近收集整理的关于解决python使用logging模块出现的重复日志问题的全部内容,更多相关解决python使用logging模块出现内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(230)

评论列表共有 0 条评论

立即
投稿
返回
顶部