Сколько раз вызывался logging.error ()? - PullRequest
11 голосов
/ 01 мая 2009

Может быть, его просто не существует, так как я не могу найти его в pydoc. Но используя пакет журналирования Python, есть ли способ запросить Logger, чтобы узнать, сколько раз была вызвана определенная функция? Например, сколько ошибок / предупреждений было сообщено?

Ответы [ 3 ]

13 голосов
/ 01 мая 2009

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

class CallCounted:
    """Decorator to determine number of calls for a method"""

    def __init__(self,method):
        self.method=method
        self.counter=0

    def __call__(self,*args,**kwargs):
        self.counter+=1
        return self.method(*args,**kwargs)


import logging
logging.error = CallCounted(logging.error)
logging.error('one')
logging.error('two')
print(logging.error.counter)

Выход:

ERROR:root:one
ERROR:root:two
2
10 голосов
/ 30 июня 2015

Вы также можете добавить новый обработчик в регистратор, который считает все вызовы:

class MsgCounterHandler(logging.Handler):
    level2count = None

    def __init__(self, *args, **kwargs):
        super(MsgCounterHandler, self).__init__(*args, **kwargs)
        self.level2count = {}

    def emit(self, record):
        l = record.levelname
        if (l not in self.level2count):
            self.level2count[l] = 0
        self.level2count[l] += 1

После этого вы можете использовать dict для вывода количества вызовов.

1 голос
/ 01 мая 2009

Есть модуль warnings, который - в некоторой степени - делает часть этого.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...