クラス/サブクラス/モジュール間でログを共有するためのベスト プラクティス アプローチを見つけようとしています。次のクラスは、同じファイルにあるか、パッケージ/モジュール全体に分散している可能性があります。
例えば
-- 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')。ただし、これらのクラスは同じパッケージまたはパッケージ階層にある必要はないため、常に意味があるとは限りません。
最善のアプローチは何ですか?