今天我在考虑我一年前写的一个 Python 项目,我在该项目中使用logging
得非常广泛。hotshot
我记得由于开销(表明这是我最大的瓶颈之一),不得不在类似内部循环的场景(90% 的代码)中注释掉很多日志调用。
我现在想知道是否有一些规范的方法可以以编程方式去除 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
当然,您可能希望谨慎地使用它,并且可能以每个函数的粒度- 仅用于已显示logging
为瓶颈的代码对象。有人知道这样的事情吗?
注意:由于动态类型和后期绑定,有一些事情使得以高性能方式执行此操作更加困难。例如,对名为的方法的任何调用都debug
可能必须用if not isinstance(log, Logger)
. 无论如何,我假设所有的小细节都可以通过君子协议或一些运行时检查来克服。:-)