今日、私は1年ほど前に書いたPythonプロジェクトについて考えていました。そこでは、logging
かなり広範囲に使用していました。hotshot
オーバーヘッド(これが私の最大のボトルネックの1つであることを示しています)のために、内部ループのようなシナリオ(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)
ます。いずれにせよ、紳士協定または実行時チェックのいずれかによって、細部のすべてを克服できると思います。:-)