2

クラス/サブクラス/モジュール間でログを共有するためのベスト プラクティス アプローチを見つけようとしています。次のクラスは、同じファイルにあるか、パッケージ/モジュール全体に分散している可能性があります。

例えば

-- A.py  
class A:
  def __init__(self):
    self.logger = logging.getLogger(someName)

-- B.py  
class B(A):
  ...

-- C.py  
class C(B):
  def foo(self):
    self.logger.info('Hello from C!')

この場合、基本クラスによって設定されたように、クラス階層全体が同じロガー インスタンスを共有します。

それは良い習慣ですか?または、次のように各 .py ファイルの先頭にグローバル変数を設定する必要があります。

logger = logging.getLogger(__name__)

最初のアプローチは OO のように見え、モジュールのインポートで何もしない (オブジェクトの作成のみ) のを回避しますが、2 番目のアプローチは、各クラスに表示される異なるロガーを作成し、それが含まれているモジュールを反映した名前を付けます。

最初のケースの他の利点は、すべてのクラスで機能する単一のインスタンスにカスタム ログ オプションを設定できることです。一方、2 番目のケースでは、各ロガー名が親/ベース ロガー名を拡張した場合にのみ機能します。 .getLogger('ABC')。ただし、これらのクラスは同じパッケージまたはパッケージ階層にある必要はないため、常に意味があるとは限りません。

最善のアプローチは何ですか?

4

1 に答える 1