414

デフォルトでは、Requests Python ライブラリは次の行に沿ってログ メッセージをコンソールに書き込みます。

Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606

通常、これらのメッセージには関心がないので、無効にしたいと考えています。これらのメッセージを黙らせたり、リクエストの冗長性を減らしたりする最善の方法は何でしょうか?

4

12 に答える 12

657

requestsのログレベルを設定する方法を見つけました。これは、標準のログモジュールを介して行われます。少なくとも警告でない限り、メッセージをログに記録しないように構成することにしました。

import logging

logging.getLogger("requests").setLevel(logging.WARNING)

この設定を urllib3 ライブラリ (通常はリクエストで使用される) にも適用する場合は、次を追加します。

logging.getLogger("urllib3").setLevel(logging.WARNING)
于 2012-06-14T08:59:53.033 に答える
29
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

このようにして、urllib3 からの level=INFO のすべてのメッセージがログファイルに存在しなくなります。

そのため、ログ メッセージに level=INFO を引き続き使用できます...使用しているライブラリ用にこれを変更するだけです。

于 2014-02-12T10:55:25.510 に答える
18

使用している人は誰でも、logging.config.dictConfig次のようにリクエスト ライブラリのログ レベルをディクショナリで変更できます。

'loggers': {
    '': {
        'handlers': ['file'],
        'level': level,
        'propagate': False
    },
    'requests.packages.urllib3': {
        'handlers': ['file'],
        'level': logging.WARNING
    }
}
于 2016-02-01T19:52:59.510 に答える
15

あなたと同様の問題が発生した後、約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')
于 2013-04-16T17:08:46.023 に答える
4

設定ファイルがあれば設定できます。

ロガー セクションに urllib3 を追加します。

[loggers]
keys = root, urllib3

logger_urllib3 セクションを追加します。

[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
于 2017-07-09T07:34:26.967 に答える
3

この回答は次のとおりです: 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")
于 2019-10-22T23:06:20.540 に答える
0

以前のアプローチが機能しなくなったかどうかはわかりませんが、いずれにせよ、警告を削除する別の方法を次に示します。

PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py

基本的に、スクリプト実行のコンテキストで環境変数を追加します。

ドキュメントから: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings

于 2016-03-10T03:46:12.460 に答える