次の構造を持つ小さなpythonプロジェクトがあります-
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
デフォルトのロギングモジュールを使用して、メッセージをstdoutおよびログファイルに出力する予定です。ロギングモジュールを使用するには、いくつかの初期化が必要です-
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
現在、メッセージのロギングを開始する前に、すべてのモジュールでこの初期化を実行しています。プロジェクト全体にログを記録することで同じ設定が再利用されるように、この初期化を1か所で1回だけ実行することは可能ですか?
package/__init__.py
。これは通常、if __name__ == '__main__'
コードを配置する場所ではありません。また、prostの例は、インポート時に無条件に構成コードを呼び出すように見えますが、私には正しく見えません。通常、設定コードのロギングは1か所で行う必要があり、__ main__をインポートする場合を除いて、インポートの副作用として発生しないようにする必要があります。
if __name__ == '__main__'
どうなりますか?(これが事実であるかどうかは、問題として明示的に言及されていません)
fileConfig
ない限り、ロギングを行うすべてのモジュールを呼び出す必要はありませんif __name__ == '__main__'
。パッケージがライブラリである場合は、prostの回答は適切ではありませんが、うまくいく可能性がありますNullHandler
。