Python日志记录-如何检查记录仪是否为空

Enr*_*rdo 5 python logging is-empty

我只是在应用程序中实现了登录功能,所以我想知道是否有一种方法可以检查记录器是否为空。

我要记住的是在脚本中设置两个处理程序:

  • 一台带水平控制台 WARNING
  • 一个带级别的文件 DEBUG

在脚本末尾,我需要检查CONSOLElogger是否为空。这意味着在运行期间,level >= WARNING记录了一些消息,在这种情况下,我想将调试级别的日志文件发送smtp到我的邮箱。

是否可以在python脚本本身内部进行此检查,而无需将Shell重定向到文件?

Mik*_*ike 4

有一种通用方法可以使用装饰器来计算函数被调用的次数,您可以在此处查看

如果您将此装饰器包装在您感兴趣的类调用周围,您可以找出每个成员函数被调用的次数,如下所示:

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

接下来,只需像其他记录器一样设置您的记录器并像平常一样使用它:

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

您需要装饰所有您想要计数的类,例如异常、调试等。