确定根记录器是不是在 Python 中设置为 DEBUG 级别?

Posted

技术标签:

【中文标题】确定根记录器是不是在 Python 中设置为 DEBUG 级别?【英文标题】:Determining if root logger is set to DEBUG level in Python?确定根记录器是否在 Python 中设置为 DEBUG 级别? 【发布时间】:2010-12-31 13:01:35 【问题描述】:

如果我使用如下命令行参数将日志记录模块设置为 DEBUG:

if (opt["log"] == "debug"):
  logging.basicConfig(level=logging.DEBUG)

我以后如何判断记录器是否设置为调试?我正在写一个装饰器 如果 True 标志传递给它,将计时一个函数,如果没有给出标志,它默认 当 root logger 设置为 DEBUG 时打印计时信息。

【问题讨论】:

您最终会想要使用特定的东西而不是将其耦合到记录器,例如 opt["time_functions"](根据其他选项,您可能会默认为 True/False)。跨度> 【参考方案1】:
logging.getLogger().getEffectiveLevel()

logging.getLogger() 不带参数获取根级别记录器。

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel

【讨论】:

太好了,谢谢!我正在做类似的事情(除了将显式“root”传递给getLogger),但我是在我的装饰器的 init 函数中进行的,在记录器设置为调试之前:\ 如果你想要级别的名称,而不是数字,你可以使用它来将数字转换为字符串(如'INFO'):logging.getLevelName() @guettli,getLevelName() 需要一个参数,其中包含您想要获取其文本表示的级别。所以这个电话实际上是这个野兽:logging.getLevelName(logging.getLogger().getEffectiveLevel())。当你想要的只是当前关卡的字符串时,最好有一个更简单的语法。 将级别整数转换为名称:docs.python.org/3/library/logging.html#levels【参考方案2】:

其实还有一个更好的方法:使用代码logging.getLogger().isEnabledFor(logging.DEBUG)。我在尝试了解如何处理 getEffectiveLevel() 的结果时发现了它。

以下是日志模块本身使用的代码。

def getEffectiveLevel(self):
    """
    Get the effective level for this logger.

    Loop through this logger and its parents in the blogger hierarchy,
    looking for a non-zero logging level. Return the first one found. 
    """
    logger = self
    while logger:
        if logger.level:
            return logger.level
        logger = logger.parent
    return NOTSET

def isEnabledFor(self, level):
    """
    Is this logger enabled for level ‘level’?
    """
    if self.manager.disable >= level:
        return 0
    return level >= self.getEffectiveLevel()

【讨论】:

这应该是公认的答案,因为它的运行时复杂度较低。【参考方案3】:

只是

logging.getLogger().level == logging.DEBUG

【讨论】:

这是一个糟糕的答案;它仅适用于检查 exact 级别,而不是像其他地方的评论那样有效isEnabledFor() 就是因为这个原因而存在的!

以上是关于确定根记录器是不是在 Python 中设置为 DEBUG 级别?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?

从 DB 获取数据以在下拉 HTML/CSS/MYSQL/PHP 中设置为默认值

在 asynctask 类中设置为 listView

Barrier 未在约束布局中设置为 referenceIds?

如何在iOS中设置为按钮选择的图像选择器图像

PayPal 订单在 Magento 中设置为“可疑欺诈”状态