logconfig.iniファイルを使用して、pythonパッケージ全体でログを設定しました。
[loggers]
keys=extracts,root
[formatters]
keys=simple,detailed
[handlers]
keys=file_handler
[formatter_simple]
format=%(module)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
[formatter_detailed]
format=%(asctime)s %(name)s:%(lineno)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S
[handler_file_handler]
class=logging.handlers.RotatingFileHandler
level=DEBUG
formatter=detailed
args=('/ebs/logs/foo.log', 'a', 100000000, 3)
[logger_extracts]
level=DEBUG
handlers=file_handler
propagate=1
qualname=extracts
[logger_root]
level=NOTSET
handlers=
しかし、アプリケーションを実行すると、プロンプトに次の警告メッセージが表示されます。
No handlers found for logger __main__
どうすればこれを修正できますか?
最初にlogging.basicConfig()を呼び出す必要があります。
BasicConfig()の呼び出しは、debug()、info()などの呼び出しの前に行う必要があります。これは1回限りの単純な構成機能として意図されているため、最初の呼び出しのみが実際に何も実行しません。後続の呼び出しは事実上何もしません。
または、logging.basicConfig()を自動的に呼び出すすべてのlogging.info( 'Starting logger for ...')。だから次のようなもの:
import logging
logging.info('Starting logger for...') # or call logging.basicConfig()
LOG = logging.getLogger(name)
この動作のモジュール作成者の理由は ここ
エラーが見つかりました。ルートロガーがメインに使用されていることがわかりました。ルートロガーにハンドラーをアタッチする必要があります。
[logger_root]
level=NOTSET
handlers=file_handler