logging.error()调用了多少次?

Bri*_*ian 11 python logging

也许它只是不存在,因为我在pydoc中找不到它.但是使用python的日志包,有没有办法查询Logger以找出调用特定函数的次数?例如,报告了多少错误/警告?

Mar*_*ddy 13

日志记录模块似乎不支持此功能.从长远来看,您可能最好创建一个新模块,并通过对现有日志记录模块中的项进行子类化来添加此功能以添加所需的功能,但您也可以使用装饰器轻松实现此行为:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

ERROR:root:one
ERROR:root:two
2
Run Code Online (Sandbox Code Playgroud)


Rol*_*olf 10

您还可以向记录器添加新的处理程序,以计算所有呼叫:

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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用dict输出呼叫数.

  • 另外,在示例代码中,level2count 被声明两次:一次作为类变量(稍后不再使用),然后作为实例变量。 (3认同)