Ведение журнала многопоточного приложения.[Errno 24] Слишком много открытых файлов - PullRequest
0 голосов
/ 22 апреля 2019

5 потоков совместно используют один и тот же экземпляр класса logger и файл журнала, поднять [Errno 24] Too many open files

Пытался переопределить logging методы для закрытия file handler каждый раз после того, как была сделана запись.

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, 8mb
        handler = RotatingFileHandler(logfile, maxBytes=8000000, backupCount=5)
        handler.setFormatter(formatter)
        self.logger.setLevel(logging.DEBUG)
        self.logger.addHandler(handler)
        self.logger.setLevel(logging.DEBUG)
        self.logger.propagate = False
        return self.logger

    # patch for excluding 'too many opened files' error
    def handler_close(self):
        handlers = self.logger.handlers
        for handler in handlers:
            handler.close()

    # override commands
    def info(self, msg):
        self.logger.info(msg)
        self.handler_close()

    def debug(self, msg):
        self.logger.debug(msg)
        self.handler_close()

    def error(self, msg):
        self.logger.error(msg)
        self.handler_close()

    def warning(self, msg):
        self.logger.warning(msg)
        self.handler_close()

    def critical(self, msg):
        self.logger.warning(msg)
        self.handler_close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...