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文档,谢谢,这可能是最不痛苦的方式。看起来这已经被问过好几次了,只是措辞不同。