7

私は現在、いくつかの I/O を実行するいくつかの Python モジュールを作成しています。

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

logging モジュールを使用し、標準エラー出力にログを表示するように StreamHandler をセットアップしましたが、うまく機能しました。ただし、これらのログをカスタマイズ可能にする方法がわかりません。明らかに、開発者が私のクラスを使用するときに、それらのログが標準出力に書き込まれることを強制したくありません。理想的には、彼に独自のハンドラーを追加させるか、ログが必要ない場合はまったく追加させないようにするかを選択したいと思います。

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

要するに、どのようにそれを行うのか、そしてその理由は?

ありがとう。

4

2 に答える 2

2

ライブラリとして使用することを目的としたモジュールがハンドラー(ライブラリのトップレベルロガーへのNullHandlerインスタンス以外)を追加しないことを確認してください。

ベストプラクティスは、モジュールレベルでロガーを使用することです。

logger = logging.getLogger(__name__)

必要に応じて、このロガーの子ロガーを使用します。

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

スクリプトとして実行することを目的としたものにハンドラーを追加してもかまいません。

ユーザーがそれらのAPIを呼び出すかどうかを制御できる限り、ロガーにハンドラーを追加するための便利なAPIがあっても問題ありません。

于 2012-06-13T13:01:19.727 に答える
1

Pythonのロギングモジュールに関する非常に優れたチュートリアルがあります

http://docs.python.org/howto/logging.html

于 2012-06-13T13:01:12.637 に答える