デフォルトでは、Requests Python ライブラリは次の行に沿ってログ メッセージをコンソールに書き込みます。
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
通常、これらのメッセージには関心がないので、無効にしたいと考えています。これらのメッセージを黙らせたり、リクエストの冗長性を減らしたりする最善の方法は何でしょうか?
デフォルトでは、Requests Python ライブラリは次の行に沿ってログ メッセージをコンソールに書き込みます。
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
通常、これらのメッセージには関心がないので、無効にしたいと考えています。これらのメッセージを黙らせたり、リクエストの冗長性を減らしたりする最善の方法は何でしょうか?
requestsのログレベルを設定する方法を見つけました。これは、標準のログモジュールを介して行われます。少なくとも警告でない限り、メッセージをログに記録しないように構成することにしました。
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
この設定を urllib3 ライブラリ (通常はリクエストで使用される) にも適用する場合は、次を追加します。
logging.getLogger("urllib3").setLevel(logging.WARNING)
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
このようにして、urllib3 からの level=INFO のすべてのメッセージがログファイルに存在しなくなります。
そのため、ログ メッセージに level=INFO を引き続き使用できます...使用しているライブラリ用にこれを変更するだけです。
使用している人は誰でも、logging.config.dictConfig
次のようにリクエスト ライブラリのログ レベルをディクショナリで変更できます。
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': 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')
設定ファイルがあれば設定できます。
ロガー セクションに urllib3 を追加します。
[loggers]
keys = root, urllib3
logger_urllib3 セクションを追加します。
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
この回答は次のとおりです: 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")
以前のアプローチが機能しなくなったかどうかはわかりませんが、いずれにせよ、警告を削除する別の方法を次に示します。
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
基本的に、スクリプト実行のコンテキストで環境変数を追加します。
ドキュメントから: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings