python - 如果 python 有一个预处理器,那么停用调试日志记录的成本就会低得多。还有其他选择吗?

标签 python python-3.x debugging logging preprocessor

在我的系统中,我放置了大量的 log_debug(...) 函数调用。

log_debug函数实现为:

def log_debug(*args):
    print("log:",*args)

当系统处于生产状态时,最好停用 log_debug,例如,如下所示:

def log_debug(*args):
    pass # DEACTIVATED print("log:",*args)

剩下两个问题:

  1. 仍然会调用log_debug,但成本很小
  2. 所有已创建并发送到 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/

相关文章:

Python 多处理信号量不工作

python - PySpark 作业在加载多个文件时失败并且缺少一个

python - pandas 相当于 .rda/.rdata

python - 从数据框 Python 字典中获取单独的数据框

python-3.x - 如何使用 paramiko 或其他方式从 vps ip 获取本地 PC 上的文件?

debugging - 最佳 XSLT 编辑器和|调试器

java - 无法使用 eclipse 调试器进行调试

具有许多属性的python类

python - 在 Python 调试器 pdb 中,如何在不终止调试 session 的情况下退出交互模式

python - python2中的类方法钩子(Hook)装饰器