関数内にオプションのロガーを実装したいと思います。次のようなものです:
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.
null
1レベルの効果を持つダミーオブジェクトを作成する:
class DummyObject(object):
def __getattr__(self, name):
return lambda *args, **kwargs: None
logger = logger or DummyObject()
すべてのデバッグ ステートメントをブロック内にネストします。
if logger:
logger.debug("abc")