Python несколько дублированных записей - PullRequest
0 голосов
/ 16 мая 2019

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


class RootLogger():

    def __init__(self):
        self.logger = None

    # skeleton for creating custom logger
    # name - name of the logger, string or class/module name
    def set_config(self, name, logfile):
        self.logger = logging.getLogger(name)
        # format of the message
        formatter = logging.Formatter('%(asctime)s - [%(name)s] [%(levelname)s] %(message)s')
        # log file rotation, time
        handler = RotatingFileHandler(filename=logfile,
                                      maxBytes=8000000,
                                    backupCount=5,
                                    encoding='utf-8')
        #handler = StreamHandler()
        handler.setFormatter(formatter)
        self.logger.setLevel(logging.DEBUG)
        self.logger.addHandler(handler)
        self.logger.setLevel(logging.DEBUG)
        return self.logger

    # patch for excluding 'too many opened files' error
    def __del__(self):
        if self.logger:
            for hdlr in self.logger.handlers:
                #hdlr.flush()
                hdlr.close()
    # override commands
    def info(self, msg):
        self.logger.info(msg)
        self.__del__()
    def debug(self, msg):
        self.logger.debug(msg)
        self.__del__()
    def error(self, msg):
        self.logger.error(msg)
        self.__del__()
    def warning(self, msg):
        self.logger.warning(msg)
        self.__del__()
    def critical(self, msg):
        self.logger.warning(msg)
        self.__del__()

1 Ответ

1 голос
/ 16 мая 2019

Вы хотите проверить, существуют ли уже обработчики для регистратора, прежде чем создавать дополнительные обработчики.

self.logger = logging.getLogger(name)
if not self.logger.handlers:
    #Create the handlers    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...