Python: logging日志重复的原因是handler叠加了

  1. 使用if not _logger.handlers

    来控制是否操作addHandler,
    假如已有handler,就不需要再次添加了
  2. 实现方法还有很多,

    最笨的就是用不同的object来写不同的日志,但这样一旦需要维护时,成本会很高
  3. 还有一种是

    一直在传递main启动脚本时创建的logging Object到class里使用
    但是这样写class就感觉很怪了,这个class被某个参数给拖住的感觉

殊途同归,它的最终切入点就是搞定记录日志时,handler不会被重复加入

_logger = logging.getLogger(‘Order’)
# print(‘创建_logger时的handlers:[{}]’.format(_logger.handlers))

if not _logger.handlers:
_logger.setLevel(logging.INFO)
_formatter = logging.Formatter(‘%(asctime)s %(name)s/%(levelname)s %(lineno)d: %(message)s’, datefmt=’%m-%d %H:%M:%S’)

_fhDay = logging.FileHandler(filename=_logDay, encoding=”utf-8″)
_fhDay.setLevel(logging.INFO)
_fhDay.setFormatter(_formatter)

_fhAll = logging.FileHandler(filename=_logAll, encoding=”utf-8″)
_fhAll.setLevel(logging.INFO)
_fhAll.setFormatter(_formatter)

_logger.addHandler(_fhDay)
_logger.addHandler(_fhAll)

# print(‘返回_logger时的handlers:[{}]’.format(_logger.handlers))