1. ホーム
  2. python

[解決済み] ロギングレベルを設定する

2022-03-12 04:06:37

質問

自分のコードをデバッグするために、標準ライブラリを使おうとしています。

これは問題なく動作します。

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('message')

下位レベルのロガーが動作しないのですが。

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info('message')

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('message')

どちらも反応がないのですが。

どのように解決するのですか?

Pythonのバージョンは?私は3.4で動作しています。しかし、次のことに注意してください。 ベーシックコンフィグ() は、ルートハンドラがすでにセットアップされている場合は影響を与えません。

この関数は、ルートロガーにすでにハンドラが設定されている場合は何もしません。

rootに明示的にレベルを設定するには、次のようにします。 logging.getLogger().setLevel(logging.DEBUG) . ただし basicConfig() の前に、ルートロガーが最初に何らかのセットアップを行うようにします。すなわち

import logging
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger('foo').debug('bah')
logging.getLogger().setLevel(logging.INFO)
logging.getLogger('foo').debug('bah')

また、quot;Loggers" とその Handlers" はそれぞれ独立したログレベルを持っていることに注意してください。ですから、もしあなたが以前にPythonスクリプトで複雑なロガー設定を明示的にロードし、それがルートロガーのハンドラを混乱させた場合、これは影響を与える可能性がありますし、ロガーのログレベルを logging.getLogger().setLevel(..) は機能しないかもしれません。これは、付属のハンドラが独立してログレベルを設定している可能性があるためです。このようなケースはほとんどなく、通常、心配する必要はありません。