仅在某些全局条件下执行日志记录调试

时间:2016-03-10 08:18:32

标签: python debugging

我有调试语句,如: logging.debug('来自scan的输出:',输出[0]) 事情是在标志为True之前输出不存在。 因此,即使logging.Level不是debug,它也会执行此行,尽管它不会保存。

只有当flag为True时才能执行此语句。

我想避免在每个调试语句之前检查标志,而是在运行时不应该执行这些调试语句来处理这种情况。

1 个答案:

答案 0 :(得分:0)

我强烈建议不要在不了解变量的情况下工作。话虽如此,如果你有一个用例,Python将提供。

我在这里可能做的是将对cal.debug的调用包装在可调用的后面。同样,我不确定您的用例是什么,但这是一个简短的概念验证。

import logging

some_condition = True
logging.basicConfig(level=logging.DEBUG)

def lazy_log(callable):
    if logging.getLogger('').isEnabledFor(logging.DEBUG):
        logging.debug(callable())

def main():
    if some_condition:
        outputs = [1,2,3,4]
    lazy_log(lambda: "Outputs from scan: {}".format(outputs[1]))

main()

通过使用lambda,我们推迟记录字符串的计算,直到我们知道需要它为止。这样做的另一个好处是,如果我想用一个非常慢的东西制作一个调试日志,比如一个数据库查询,我的调试语句根本不会减慢我的生产程序。

我在火车上感到无聊,于是把这件东西变成了一个图书馆。 https://github.com/Ymbirtt/python-lazylog。我还没有把它用于任何东西,但它可能会为你节省一些工作。