Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,如何避免对低于当前级别的日志语句进行参数求值_Python_Logging_Optimization_Arguments - Fatal编程技术网

Python,如何避免对低于当前级别的日志语句进行参数求值

Python,如何避免对低于当前级别的日志语句进行参数求值,python,logging,optimization,arguments,Python,Logging,Optimization,Arguments,假设我有一个这样的陈述 logging.debug('%r', do_really_expensive_computation()) or logging.debug('%r', find_my_object().do_really_expensive_computation()) 当日志级别设置为高于DEBUG时,它将不会记录日志,但在调用logging.DEBUG()和执行do\u really\u昂贵的计算()以及find\u my\u object()之前,它仍然会计算参数 当低于当前

假设我有一个这样的陈述

logging.debug('%r', do_really_expensive_computation())
or
logging.debug('%r', find_my_object().do_really_expensive_computation())
当日志级别设置为高于
DEBUG
时,它将不会记录日志,但在调用
logging.DEBUG()
和执行
do\u really\u昂贵的计算()
以及
find\u my\u object()
之前,它仍然会计算参数


当低于当前级别时,是否存在跳过日志记录中涉及的所有计算的良好模式?

一种方法是使用返回给定回调函数值的
\uuuu repr\uuu
方法创建一个帮助器类,并向记录器传递一个lambda函数,其中包含helper类的实例作为延迟计算的返回值:

class r:
    def __init__(self, callback):
        self.callback = callback

    def __repr__(self):
        return repr(self.callback())
以便:

import logging

def expensive():
    print('this is expensive')
    return 1

print('debug:')
logging.debug('%r', r(lambda: expensive()))
print('error:')
logging.error('%r', r(lambda: expensive()))
产出:

debug:
error:
this is expensive
ERROR:root:1

if logger.isenablefor(logging.DEBUG):do\u explicate()
。有关更多详细信息,请查看官方python文档,谢谢,这可能是最不痛苦的方式。看起来这已经被问过好几次了,只是措辞不同。