当前位置:   article > 正文

python 重复打印日志问题_python logger 打印两次

python logger 打印两次

问题:在第二次调用自己封装的日志类会出现每条日志打印两次的情况

自己封装的日志工具类:

  1. import logging
  2. import os
  3. from config import project_config as config
  4. # 2.创建日志工具类对象,在其内部 日志对象做初始化
  5. class LoggingUtil(object):
  6. """
  7. 日志工具类,初始化日志对象
  8. """
  9. def __init__(self,name=None,level=logging.INFO) -> None:
  10. self.logger = logging.getLogger(name)
  11. self.logger.setLevel(level)
  12. # 3.定义init_log()方法,用于获取具体的日志对象
  13. def init_log(name=None):
  14. # 创建日志对象
  15. logger = LoggingUtil(name).logger
  16. # 创建日志处理对象
  17. # handler = logging.FileHandler('D:/python_workplace/pythonProject/python_etl/log/my.log/',mode='a',encoding='utf-8')
  18. file_name = os.path.join(config.log_root_path,config.log_file_name)
  19. if not logger.handlers:
  20. handler = logging.FileHandler(file_name,mode='a',encoding='utf-8')
  21. # 创建日志格式对象
  22. fmt = logging.Formatter('%(asctime)s\t [%(levelname)s] \t %(filename)s[%(lineno)d]: \t%(message)s ')
  23. # 配置对象间关系
  24. handler.setFormatter(fmt)
  25. logger.addHandler(handler)
  26. return logger

在其他包中第一次调用,使用init_log创建出logger对象,打印出的日志没有问题

  1. from util import log_uitl
  2. # 创建一个日志对象
  3. logger = log_uitl.init_log()

在第三个包中再次调用init_log并传入名字,会出现一条日志打印两次的问题

  1. from util import log_uitl
  2. # 创建一个日志对象
  3. logger = log_uitl.init_log('by_lucky_dog')

分析原因:

经过查询资料,判断问题所在是通过init_log函数创建出的对象,会创建出两个handler来处理日志,但是已经做了是否存在handler判断,为什么还会有两个handler呢

猜测:第一次没穿参数,第二次传参数了

第一次尝试:将两次调用init_log函数都传入参数,且传入参数一致

结果:日志打印一遍

第二次尝试:两次调用init_log函数都不传入参数

结果:日志打印一遍

第三次尝试:两次调用init_log函数都传入参数,且参数不一致

结果:日志打印一遍

发现:只有一个传参,一个不传参数时候会出现一条日志打印两边的情况

查看源码:

发现传参和不传参走的是两条路径,分析可能是这里导致创建出了两个handler

第四次尝试:第二次导包时直接使用LoggingUtil类创建初始化对象,不调用init_log函数,并一个传入名字参数,一个不传参数

结果:日志打印一遍

解决方法:

方案一:只在第一次导入日志工具类时调用init_log函数,其余使用第四次尝试中的方法创建初始化对象

方案二:在工具类初始化时直接传入一个默认参数,这样创建出的对象都会有一个名字参数,也不会创建出两个handler,就不会有一条日志打印两次的情况了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/963216
推荐阅读
相关标签
  

闽ICP备14008679号