複数のモジュールでログを使用する 質問する

複数のモジュールでログを使用する 質問する

次のような構造を持つ小さな Python プロジェクトがあります -

Project 
 -- pkg01
   -- test01.py
 -- pkg02
   -- test02.py
 -- logging.conf

デフォルトのロギングモジュールを使用して、メッセージを標準出力とログファイルに出力する予定です。ロギングモジュールを使用するには、いくつかの初期化が必要です。

import logging.config

logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')

logger.info('testing')

現在、メッセージのログ記録を開始する前に、すべてのモジュールでこの初期化を実行しています。プロジェクト全体でログ記録することで同じ設定が再利用されるように、この初期化を 1 か所で 1 回だけ実行することは可能ですか?

ベストアンサー1

ベストプラクティスとしては、各モジュールで次のようにロガーを定義することです。

import logging
logger = logging.getLogger(__name__)

モジュールの先頭近くで、モジュール内の他のコードで次のようにします。

logger.debug('My message with %s', 'variable data')

モジュール内でログ活動を細分化する必要がある場合は、例えば次のようにします。

loggerA = logging.getLogger(__name__ + '.A')
loggerB = logging.getLogger(__name__ + '.B')

loggerA必要に応じて、およびにログインしますloggerB

メインプログラムでは、例えば次のようにします。

def main():
    "your program code"

if __name__ == '__main__':
    import logging.config
    logging.config.fileConfig('/path/to/logging.conf')
    main()

または

def main():
    import logging.config
    logging.config.fileConfig('/path/to/logging.conf')
    # your program code

if __name__ == '__main__':
    main()

見るここ複数のモジュールからのログ記録、およびここ他のコードによってライブラリ モジュールとして使用されるコードのログ設定用。

更新:を呼び出すときに、 Python 2.6以降を使用しているかどうかfileConfig()を指定する必要があるかもしれません(disable_existing_loggers=Falseドキュメントを参照してください)。デフォルト値はTrue下位互換性のためであり、既存のfileConfig()ロガーまたはその祖先が構成で明示的に指定されていない限り、すべての既存のロガーが によって無効になります。値を に設定すると、既存のロガーはそのまま残ります。Python 2.7/Python 3.2 以降を使用している場合は、よりも優れた APIFalseを検討してください。これにより、構成をより細かく制御できます。dictConfig()fileConfig()

おすすめ記事