gpt4 book ai didi

python - 如何在不注释掉 Python 日志调用的情况下剥离它们?

转载 作者:IT老高 更新时间:2023-10-28 22:12:13 28 4
gpt4 key购买 nike

今天我正在考虑我一年前写的一个 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 成为瓶颈的代码对象。有人知道这样的事吗?

注意:由于动态类型和后期绑定(bind),有几件事会使以高性能方式执行此操作变得更加困难。例如,对名为 debug 的方法的任何调用都可能必须用 if not isinstance(log, Logger) 包装。无论如何,我假设所有的小细节都可以通过君子协议(protocol)或一些运行时检查来克服。 :-)

最佳答案

使用 logging.disable 怎么样? ?

我还发现我必须使用 logging.isEnabledFor如果日志消息的创建成本很高。

关于python - 如何在不注释掉 Python 日志调用的情况下剥离它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/522730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com