#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, которое обслуживает официантка.