如何解脱Python日志调用没有注释掉它们?

今天我正在考虑一个Python项目,我写了一年前,我使用日志相当广泛。我记得有必要注释掉很多内部循环情况下的日志调用(90%的代码),因为开销(hotshot表明它是我最大的瓶颈之一)。

我想知道现在是否有一些规范的方式来编程删除Python应用程序中的日志调用,而不需要注释和取消注释所有的时间。我想你可以使用检查/重新编译或字节码操作来做这样的事情,只针对导致瓶颈的代码对象。这样,您可以添加一个操纵器作为后编译步骤,并使用集中的配置文件,如下所示:

[Leave ERROR and above]
my_module.SomeClass.method_with_lots_of_warn_calls

[Leave WARN and above]
my_module.SomeOtherClass.method_with_lots_of_info_calls

[Leave INFO and above]
my_module.SomeWeirdClass.method_with_lots_of_debug_calls

当然,你想要谨慎使用它,并且可能具有每个函数的粒度 – 只有对于已经显示日志是一个瓶颈的代码对象。任何人都知道这样的东西?

注意:由于动态类型和后期绑定,有一些事情使得更难以以高性能方式执行。例如,对名为debug的方法的任何调用可能必须用if not isinstance(log,Logger)包装。在任何情况下,我假设所有的细节可以通过绅士的协议或一些运行时检查克服。 🙂

使用logging.disable怎么样?

我还发现如果日志消息创建昂贵,我不得不使用logging.isEnabledFor

http://stackoverflow.com/questions/522730/how-can-i-strip-python-logging-calls-without-commenting-them-out

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何解脱Python日志调用没有注释掉它们?