Python Logging - 如何检查 Logger 是否为空

标签 python logging is-empty

我刚刚在我的应用程序中实现了日志记录,我想知道是否有一种方法可以检查记录器是否为空。

我的想法是在我的脚本中设置两个处理程序:

  • 一台用于带级别的控制台 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/

    相关文章:

    python - 在 Python 中将 .csv 值作为单个列表导入

    ios - 如果没有在 Swift 中的 TextField 中输入文本,则使 UIButton 处于非事件状态

    if-statement - is if x <> empty 与 if not isempty(x) 相同

    python - Skimage.draw.ellipse 生成两条不需要的线

    python - 通过自定义函数创建 2 列并将其附加到数据框 - Python 3.x

    iis - 经典 ASP 上的 500 服务器错误 - 无法获得更多详细信息

    php - 在 PHP : Scribe, Chukwa 中记录/跟踪,log4php?

    javascript - InDesign CS6 套接字返回空

    python - 如何在 Python 中按行的总和对矩阵进行升序排序?

    javascript - 简单的 Javascript 更新 HTML 中的长计算进度