Дублирование регистрации от официантки с помощью пользовательского регистратора

#python #flask #logging #python-logging #waitress

Вопрос:

У меня есть следующий код, но я все еще вижу дубликаты сообщений от официантки. Я не уверен в причине, почему, если я очистил всех обработчиков. У кого-нибудь есть какие-нибудь мысли? Я создаю экземпляр и использую оболочку EventLogger в других местах кода.

 from typing import (  Any,  Tuple, ) import logging import traceback   class bcolors:  """Colors class for logging"""   HEADER = "33[95m"  OKBLUE = "33[94m"  OKGREEN = "33[92m"  WARNING = "33[93m"  FAIL = "33[91m"  ENDC = "33[0m"   class CustomFormatter(logging.Formatter):  """Custom formatter for our logging module"""   # format = "%(asctime)s %(levelname)-8s [%(name)s] - %(message)s (%(true_filename)s:%(true_lineno)d)"  new_format = "%(asctime)s %(levelname)-8s [%(name)s] - %(message)s "   FORMATS = {  logging.DEBUG: bcolors.OKGREEN   new_format   bcolors.ENDC,  logging.INFO: bcolors.OKBLUE   new_format   bcolors.ENDC,  logging.WARNING: bcolors.WARNING   new_format   bcolors.ENDC,  logging.ERROR: bcolors.FAIL   new_format   bcolors.ENDC,  logging.CRITICAL: bcolors.FAIL   new_format   bcolors.ENDC,  }   def format(self, record: Any) -gt; str: # pylint: disable=function-redefined  log_fmt = self.FORMATS.get(record.levelno)  formatter = logging.Formatter(log_fmt)  return formatter.format(record)   flask_log = logging.getLogger("werkzeug") flask_log.setLevel(logging.CRITICAL) flask_log.disabled = True flask_log.propagate = False  waitress_log = logging.getLogger("waitress") waitress_log.setLevel(logging.CRITICAL) waitress_log.disabled = True waitress_log.propagate = False  logger = logging.getLogger("my_application") logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) ch.setFormatter(CustomFormatter()) logger.handlers = [] logger.addHandler(ch)   class EventLogger:  """Defacto logger for work"""   @staticmethod  def get_custom_attributes() -gt; Tuple[str, int]:  # left out for brevity  pass   @staticmethod  def debug(text: Any) -gt; None:  """Debug log"""  logger.debug(text)   @staticmethod  def error(text: Any) -gt; None:  """Error log"""  ex1, ex2 = EventLogger.get_custom_attributes()  logger.error("%s %s", text, f" ({ex1}:{ex2})")   @staticmethod  def warning(text: Any) -gt; None:  """Warning log"""  ex1, ex2 = EventLogger.get_custom_attributes()  logger.warning("%s %s", text, f" ({ex1}:{ex2})")   @staticmethod  def info(text: Any) -gt; None:  logger.info(text)  

Я не уверен, почему я вижу дубликаты журналов, когда запускаю приложение flask, которое обслуживает официантка.