logging.error()被调用了多少次?
也许这个功能根本就不存在,因为我找不到它。不过,使用Python的日志记录包,有没有办法查询一个日志记录器,看看某个特定的函数被调用了多少次?比如说,有多少个错误或警告被记录了?
4 个回答
16
你还可以给日志记录器添加一个新的处理器,用来统计所有的调用次数:
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
然后你可以使用这个字典来输出调用的次数。
22
看起来,日志模块并不支持这个功能。从长远来看,你可能更好地选择创建一个新的模块,通过继承现有日志模块中的项目来添加你需要的功能。不过,你也可以很简单地用一个装饰器来实现这个效果:
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