我刚刚在我的应用程序中实现了日志记录,我想知道是否有一种方法可以检查记录器是否为空。
我的想法是在我的脚本中设置两个处理程序:
WARNING
DEBUG
在脚本的末尾,我需要检查是否
CONSOLE
记录器不为空。这意味着在运行期间,一些带有 level >= WARNING
的消息已记录,在这种情况下,我想通过 smtp
发送调试级别的日志文件到我的邮箱。是否可以在
python
内进行此项检查?脚本本身,没有 shell 重定向到文件?
最佳答案
有一种通用方法可以计算使用装饰器调用函数的次数,您可以查看 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
您需要装饰您想要计算的所有类,因此异常、调试等。
关于Python Logging - 如何检查 Logger 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059477/