web-dev-qa-db-ja.com

ロガー__main__のハンドラーが見つかりません

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__

どうすればこれを修正できますか?

12
Zihs

最初にlogging.basicConfig()を呼び出す必要があります。

ロギングHOWTO

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)

この動作のモジュール作成者の理由は ここ

15
helloV

エラーが見つかりました。ルートロガーがメインに使用されていることがわかりました。ルートロガーにハンドラーをアタッチする必要があります。

[logger_root]
level=NOTSET
handlers=file_handler
2
Zihs