我刚刚在我的应用程序中实现了日志记录,我想知道是否有一种方法来检查记录器是否为空。
我的想法是在我的脚本中设置两个处理程序:
WARNING
DEBUG
在脚本结束时,我需要检查CONSOLE
记录器是否为空。这意味着在运行期间,会记录一些level >= WARNING
的消息,在这种情况下,我想将调试级别为smtp
的日志文件发送到我的邮箱。
是否可以在python
脚本本身内进行此检查,而无需将shell重定向到文件?
答案 0 :(得分:3)
这是一种通用的方法来计算使用装饰器调用函数的次数,您可以查看here
如果你将这个装饰器包装在你感兴趣的类调用中,你可以找出每个成员函数的调用次数,如下所示:
def counted(fn):
def wrapper(*args, **kwargs):
wrapper.called += 1
return fn(*args, **kwargs)
wrapper.called = 0
wrapper.__name__ = fn.__name__
return wrapper
class MyLogger(logging.Logger, object):
@counted
def info(self, *args, **kwargs):
super(MyLogger, self).info(*args, **kwargs)
@counted
def warning(self, *args, **kwargs):
super(MyLogger, self).warning(*args, **kwargs)
接下来,只需设置您的记录器,就像通常那样使用它:
log = my_logger.MyLogger('test_logger')
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
log.addHandler(ch)
log.setLevel(logging.DEBUG)
>>> log.info('no big deal')
no big deal
>>> log.info('harmless message')
harmless message
>>> log.warning('oh no')
oh no
>>> log.info.called
2
>>> log.warning.called
1
你需要装饰你想要计算的所有类,所以异常,调试等。