2012-06-13 5 views
5

私は現在いくつかのI/Oを実行するいくつかのPythonモジュールを書いています。Pythonモジュールからカスタマイズ可能なログを記録するためのガイドラインは何ですか?

これらのモジュールは、主にテスト目的のために書いた簡単なスクリプトを別の開発者やトラフから直接使用することができます。

私はログ出力モジュールを使用して標準エラー出力にログを表示するようにStreamHandlerを設定しました。しかし、これらのログをカスタマイズ可能にする方法がわかりません。明らかに、私は、開発者が自分のクラスを使用するときに、それらのログを標準出力に書き込ませたくありません。私は選択肢を与えたい、理想的には彼が自分のハンドラーを追加させてもらうか、ログを必要としないなら全くないようにする。

この場合のPythonロギングに関するガイドラインはありますか?すべてのクラスに独自のロガーが必要ですか?

要するに、どうやってそれをやるのですか?

ありがとうございました。

答えて

2

のロギングモジュール上の非常に良いチュートリアルでは、ライブラリとして使用されることを意図したモジュールがトップにNullHandlerインスタンス以外(他のすべてのハンドラを追加していないことを確認してくださいがありますライブラリのレベルロガー)。

ベストプラクティスは、

logger = logging.getLogger(__name__) 

と、必要に応じて使用して、このロガーの子ロガーを使用して、モジュールレベルでロガーを使用することです。

あなたのライブラリーログイベントはPythonパッケージ階層にマップされ、ライブラリーモジュールのユーザーはロギングを使用するかどうか、使用する場合はハンドラーを使用して構成する方法を選択できます。

スクリプトとして実行されるものにハンドラを追加しても問題ありません。

ユーザがAPIを呼び出すかどうかを制御できるのであれば、便利なAPIを使用してロガーにハンドラーを追加することもできます。

+0

ありがとうございました。あなたのアドバイスのおかげで、私のロギングシステムをはるかにクリーンでカスタマイズ可能に修正できました。 – ereOn

1
+0

このチュートリアルをありがとうございました。それは非常に興味深い読書です。私はこの回答も受け入れることができればと思います。公平を期するためにそれを上書きする。 – ereOn