如何在Python中完全禁用昂贵的日志记录任务

如何在Python中完全禁用昂贵的日志记录任务,python,python-3.x,logging,Python,Python 3.x,Logging,对于较大的对象,我用于记录字典的Python的pprint函数非常慢。我无法找到使用标准日志库完全关闭该函数处理的方法。以下面的代码为例: logging.disable(50) logging.log(msg=sum(range(20000000)), level=0) 即使结果没有显示,总和仍然是明确计算出来的(放大范围内的数字,看看我的意思)。日志模块中是否有标准方法完全禁用计算?如果没有,也欢迎其他建议。问题是,任何根级别的内容(包括函数中的参数,而不是函数内部的参数)都会在pytho

对于较大的对象,我用于记录字典的Python的pprint函数非常慢。我无法找到使用标准日志库完全关闭该函数处理的方法。以下面的代码为例:

logging.disable(50)
logging.log(msg=sum(range(20000000)), level=0)

即使结果没有显示,总和仍然是明确计算出来的(放大范围内的数字,看看我的意思)。日志模块中是否有标准方法完全禁用计算?如果没有,也欢迎其他建议。

问题是,任何根级别的内容(包括函数中的参数,而不是函数内部的参数)都会在python看到后立即计算(即在python调用log函数之前计算)。。。为了解决这个问题,你可以把你的逻辑放在一个函数中。。。然后仅在适当的情况下执行逻辑

def lazy_log(callable_fn,log_name,log_level):
    logger = logging.getLogger(log_name)
    if logger.getEffectiveLevel() > log_level:
        return
    logger.log(msg=str(callable_fn()),level=log_level)
我想可能对你有用

lazy_log(lambda : sum(range(1000000)), None, 51)

在这种情况下,将始终计算总和,在传递给函数之前计算总和