コードでオプションのロガーを実装する 質問する

コードでオプションのロガーを実装する 質問する

関数内にオプションのロガーを実装したいと思います。次のようなものです:

def foo(arg1, arg2, arg3, logger=None):
    logger = logger or (lambda *x: None)

    ...
    self.logger.debug("The connection is lost.")

ロガーが存在する場合にログ記録が行われるようにしたいです。そうでない場合、ロガーのデバッグは何も行いません。

基本的に、これを実現する簡単な方法は、すべてのデバッグ ステートメントをブロック内にネストすることですif loggerが、デバッグ ステートメントが多数ある場合は面倒に思えます。

ベストアンサー1

いくつかのオプション:

ダミーロガーを作成します(私のお気に入りです):

logger = logger or logging.getLogger('dummy') #  without configuring dummy before.

null1レベルの効果を持つダミーオブジェクトを作成する:

class DummyObject(object):
    def __getattr__(self, name):
        return lambda *args, **kwargs: None

logger = logger or DummyObject()

すべてのデバッグ ステートメントをブロック内にネストします。

if logger:
    logger.debug("abc")

おすすめ記事