今天我想起了一年前写的一个Python项目,在其中我广泛使用了logging
。我记得在内部循环场景(即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
当然,你应该谨慎地使用它,可能只在已经显示出logging
是瓶颈代码对象上使用。有人知道类似的东西吗?
注意:由于动态类型和延迟绑定等原因,这些操作更难以高效执行。例如,任何调用名为debug
的方法都可能需要用if not isinstance(log,Logger)
进行包装。无论如何,我假设所有次要细节都可以克服,或者通过绅士协议或一些运行时检查来解决。 :-)