在我的系统中,我放置了大量的 log_debug(...)
函数调用。
log_debug
函数实现为:
def log_debug(*args):
print("log:",*args)
当系统处于生产状态时,最好停用 log_debug
,例如,如下所示:
def log_debug(*args):
pass # DEACTIVATED print("log:",*args)
剩下两个问题:
- 仍然会调用
log_debug
,但成本很小 - 所有已创建并发送到
log_debug
的字符串仍在创建中,其成本可能比第 1 点高得多。
第 2 点在诸如以下昂贵的字符串形成等情况下会出现问题:
log_debug("foo: {}, bar: {}".format(foo,bar))
在某些情况下,第 2 点的成本要高得多,例如:
log_debug("useful insights: {}".format(some_expensive_debug_data_retrieval()))
一厢情愿的想法:如果这是 C,log_debug
可以定义为预处理器宏并在某些头文件中完全停用,以便 log_debug
甚至没有被评估
关于如何以优雅的方式解决这个问题有什么想法吗?
最佳答案
我已经用全局 bool 值完成了此操作,虽然不是最漂亮的,但它是有效的。
它只需要执行 if DEBUG:
而不是之后执行昂贵的 log_debug()
。示例:
DEBUG = True
def log_debug(*args):
print("log:",*args)
def function1(*args):
if DEBUG: log_debug("foo: {}, bar: {}".format(foo,bar))
#somecode
pass
def function2(*args):
if DEBUG: log_debug("useful insights: {}".format(some_expensive_debug_data_retrieval()))
#somecode
pass
或者,您可以传递命令行参数并设置 DEBUG 变量。 我确信还有更多Pythonic方法来实现这一点。我只是想简单一点。
关于python - 如果 python 有一个预处理器,那么停用调试日志记录的成本就会低得多。还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41719636/