解决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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的Python logging模块使用案例: ```python import logging # 配置logging模块 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 创建logger对象 logger = logging.getLogger(__name__) # 输出日志信息 logger.debug('这是一个debug级别的日志信息') logger.info('这是一个info级别的日志信息') logger.warning('这是一个warning级别的日志信息') logger.error('这是一个error级别的日志信息') logger.critical('这是一个critical级别的日志信息') ``` 在这个案例中,首先使用`basicConfig`方法配置了logging模块,设置了日志输出的级别为DEBUG,并指定了日志输出的格式。 然后,创建了一个名为`logger`的logger对象,并使用`__name__`作为参数。这里使用`__name__`是为了确保日志输出的名称与当前模块的名称相同。 最后,输出了5条不同级别的日志信息。这些日志信息将根据设置的日志级别进行过滤和输出。 输出结果如下: ``` 2021-07-01 15:40:32,678 - __main__ - DEBUG - 这是一个debug级别的日志信息 2021-07-01 15:40:32,678 - __main__ - INFO - 这是一个info级别的日志信息 2021-07-01 15:40:32,678 - __main__ - WARNING - 这是一个warning级别的日志信息 2021-07-01 15:40:32,678 - __main__ - ERROR - 这是一个error级别的日志信息 2021-07-01 15:40:32,678 - __main__ - CRITICAL - 这是一个critical级别的日志信息 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值