回答:
リクエストのログレベルを設定する方法を見つけました。これは標準のログモジュールを介して行われます。少なくとも警告でない限り、メッセージをログに記録しないように設定することにしました。
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
この設定をurllib3ライブラリ(通常はリクエストで使用される)にも適用する場合は、以下を追加します。
logging.getLogger("urllib3").setLevel(logging.WARNING)
pysimplesoap
あり、この答えは私の日を救うのに役立ちます
getLogger("urllib3")
、メッセージを抑制するために実行する必要があります。
(おそらく深くネストされた)モジュールのロギングを変更する方法を探してここに来た場合は、を使用logging.Logger.manager.loggerDict
して、すべてのロガーオブジェクトの辞書を取得します。返された名前は、次の引数として使用できますlogging.getLogger
。
import requests
import logging
for key in logging.Logger.manager.loggerDict:
print(key)
# requests.packages.urllib3.connectionpool
# requests.packages.urllib3.util
# requests.packages
# requests.packages.urllib3
# requests.packages.urllib3.util.retry
# PYREADLINE
# requests
# requests.packages.urllib3.poolmanager
logging.getLogger('requests').setLevel(logging.CRITICAL)
# Could also use the dictionary directly:
# logging.Logger.manager.loggerDict['requests'].setLevel(logging.CRITICAL)
コメントのuser136036ごとに、このメソッドは上記のスニペットを実行したときに存在するロガーのみを表示することに注意してください。たとえば、クラスをインスタンス化するときにモジュールが新しいロガーを作成する場合、クラスを作成した後にこのスニペットを配置して、その名前を出力する必要があります。
urllib3
を使用するときにログメッセージを無音にするのに役立ちましたboto3
。そのような場合のロガーはbotocore.vendored.requests.packages.urllib3
なので、これを使用しました:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
そして、ようやくメッセージを取り除きました。
APScheduler
は、が呼び出すときのように、モジュールが後で呼び出すクラス内にロガーを作成するときに機能しないことに注意してくださいBackgroundScheduler.BackgroundScheduler()
。
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
このようにして、urllib3からのlevel = INFOのすべてのメッセージがログファイルに存在しなくなります。
したがって、ログメッセージにlevel = INFOを使い続けることができます。使用しているライブラリに対してこれを変更するだけです。
setLevel(logging.WARNING)
して、警告メッセージやエラーメッセージも記録することをお勧めします。
あなたと同様の問題が発生した後、1〜2週間前に書いたドキュメントセクションをコピーして貼り付けてみましょう。
import requests
import logging
# these two lines enable debugging at httplib level (requests->urllib3->httplib)
# you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# the only thing missing will be the response.body which is not logged.
import httplib
httplib.HTTPConnection.debuglevel = 1
logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
requests.get('http://httpbin.org/headers')
を使用しlogging.config.dictConfig
ている人は、次のように辞書のリクエストライブラリログレベルを変更できます。
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': logging.WARNING
}
}
dictConfig
します。
ロガー名をに設定するrequests
か、requests.urllib3
うまくいきませんでした。ログレベルを変更するには、正確なロガー名を指定する必要がありました。
まず、定義したロガーを確認し、削除したいロガーを確認します
print(logging.Logger.manager.loggerDict)
そして、あなたはこのようなものを見るでしょう:
{...'urllib3.poolmanager': <logging.Logger object at 0x1070a6e10>, 'django.request': <logging.Logger object at 0x106d61290>, 'django.template': <logging.Logger object at 0x10630dcd0>, 'django.server': <logging.Logger object at 0x106dd6a50>, 'urllib3.connection': <logging.Logger object at 0x10710a350>,'urllib3.connectionpool': <logging.Logger object at 0x106e09690> ...}
次に、正確なロガーのレベルを構成します。
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
},
'urllib3.connectionpool': {
'handlers': ['default'],
'level': 'WARNING',
'propagate' : False
},
この答えはここにあります: Python:サードパーティのライブラリからのログステートメントを抑制する方法は?
basicConfigのデフォルトのロギングレベルをそのままにして、モジュールのロガーを取得するときにDEBUGレベルを設定できます。
logging.basicConfig(format='%(asctime)s %(module)s %(filename)s:%(lineno)s - %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("my debug message")
ログメッセージを生成しているロガーを見つけるためのKbroseのガイダンスは非常に役に立ちました。私のDjangoプロジェクトでelasticsearch
は、問題の原因となっているのはPythonライブラリであることが判明するまで、120の異なるロガーをソートする必要がありました。ほとんどの質問のガイダンスに従って、これをロガーに追加して無効にしました:
...
'elasticsearch': {
'handlers': ['console'],
'level': logging.WARNING,
},
...
他の誰かがElasticsearchクエリを実行するたびに役に立たないログメッセージが表示されるのを見るために、ここに投稿します。
以前のアプローチが機能しなくなったかどうかはわかりませんが、いずれにしても、警告を削除する別の方法を次に示します。
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
基本的に、スクリプト実行のコンテキストで環境変数を追加します。
ドキュメントから:https : //urllib3.readthedocs.org/en/latest/security.html#disabling-warnings