Как отключить сообщения журнала из библиотеки запросов?

По умолчаниюЗапросы Библиотека Python записывает сообщения журнала в консоль в соответствии с:

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

Я обычно не заинтересован в этих сообщениях и хотел бы их отключить. Как лучше всего замолчать эти сообщения или уменьшить количество запросов & apos; многословие?

 Martin Thoma09 февр. 2018 г., 08:41
Связанные с:nginx and gunicorn

Ответы на вопрос(10)

зможно, глубоко вложенного) модуля, используйте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 учтите, что этот метод показывает только те регистраторы, которые существуют на момент запуска приведенного выше фрагмента. Если, например, модуль создает новый регистратор при создании экземпляра класса, то вы должны поместить этот фрагментafter создание класса для печати его имени.

 20 февр. 2018 г., 03:21
Имейте в виду, что это не будет работать, когда модули создают свои регистраторы внутри своего класса, который вы будете вызывать позже, напримерAPScheduler когда звонишьBackgroundScheduler.BackgroundScheduler().
 31 июл. 2017 г., 15:28
Спасибо, это помогло мне замолчатьurllib3 регистрировать сообщения при использованииboto3, Регистратор в таком случае естьbotocore.vendored.requests.packages.urllib3так что я использовал это:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING) и я наконец избавился от сообщений.
 22 нояб. 2017 г., 18:04
Большое спасибо за это! Изменение критериев печати позволило мне изолировать, что python -asticsearch был виновником в моем случае.

logging.config.dictConfig Вы можете изменить уровень журнала библиотеки запросов в словаре следующим образом:

'loggers': {
    '': {
        'handlers': ['file'],
        'level': level,
        'propagate': False
    },
    'requests.packages.urllib3': {
        'handlers': ['file'],
        'level': logging.WARNING
    }
}
 04 сент. 2017 г., 11:45
Это работает и для проектов на основе Django.
 12 нояб. 2018 г., 13:25
@SebastianWagner Django используетdictConfig под капотом.

requests.packages.urllib3.disable_warnings() послеimport requests

 28 апр. 2016 г., 10:43
Я не нашел этот метод в моей версии. Отключение предупреждений является чрезмерным, так как раздражающие сообщения являются уровнемINFO.

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
    },

что предыдущие подходы перестали работать, но в любом случае, вот еще один способ удаления предупреждений:

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

По сути, добавление переменной среды в контексте выполнения скрипта.

Из документации:https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings

import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

все сообщения уровня = INFO от urllib3 не будут присутствовать в файле журнала.

, вы можете продолжать использовать level = INFO для ваших сообщений журнала ... просто измените это для библиотеки, которую вы используете.

 15 окт. 2015 г., 17:34
Я предлагаю использоватьsetLevel(logging.WARNING) Для регистрации также возможны предупреждения и сообщения об ошибках.

который я написал неделю или две назад, после того, как у вас возникла проблема, похожая на вашу:

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')
 aknuds116 апр. 2013 г., 20:39
Какой смысл быть более конкретным, чем просто "запросы"? хотя из практического POV?
 aknuds117 апр. 2013 г., 16:47
Вы имеете в виду, что вы хотите включить ведение журнала в запросах.packages.urllib3? Если это так, вы отвечаете не на тот вопрос.
 aknuds124 июн. 2013 г., 17:27
Я думаю, что вы неправильно поняли суть вопроса.
 aknuds117 апр. 2013 г., 16:45
Но что вы получаете, вызывая logging.getLogger (& quot; reports.packages.urllib3 & quot;) вместо logging.getLogger (& quot;
 24 июн. 2013 г., 10:55
@ aknuds1 Вам решать, хотите ли вы отключить или включить их, я помещаю только код, который полностью контролирует это :)

Добавьте urllib3 в раздел логгеров:

[loggers]
keys = root, urllib3

Добавьте раздел logger_urllib3:

[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
 21 сент. 2018 г., 08:25
Это совершенно правильный ответ для людей, которые используют файл конфигурации. Не уверен, почему так много голосов?

какой регистратор генерировал сообщения журнала, было чрезвычайно полезным. Для моего проекта Django мне пришлось перебирать 120 различных регистраторов, пока я не обнаружил, что это былelasticsearch Библиотека Python, которая вызывала проблемы для меня. Согласно руководству в большинстве вопросов, я отключил его, добавив это в мои регистраторы:

      ...
      'elasticsearch': {
          'handlers': ['console'],
          'level': logging.WARNING,
      },     
      ...

Публикация здесь на случай, если кто-то еще увидит бесполезные сообщения журнала, поступающие при выполнении запроса Elasticsearch.

Решение Вопроса

requestsуровень ведения журнала, это делается через стандартпротоколирование модуль. Я решил настроить его так, чтобы он не регистрировал сообщения, если они не являются хотя бы предупреждениями:

import logging

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

Если вы хотите применить этот параметр и для библиотеки urllib3 (обычно используемой в запросах), добавьте следующее:

logging.getLogger("urllib3").setLevel(logging.WARNING)
 26 авг. 2013 г., 15:19
У меня такая же проблема сpysimplesoapи этот ответ поможет мне спасти мой день
 29 янв. 2015 г., 23:42
Мне пришлось добавить эту строку для & quot; urllib3 & quot; регистратор для подавления запросов в журнале сообщений.
 04 окт. 2014 г., 23:58
Вы могли бы объединить две строки следующим образом: logging.getLogger («запросы»). SetLevel (logging.WARNING)
 04 авг. 2015 г., 22:10
По какой-то причине при использовании библиотеки запросов в python3 вы должны сделатьgetLogger("urllib3") подавить сообщения.
 12 февр. 2015 г., 06:28
Мне нужно было импортировать логирование; logging.getLogger (& quot; urllib3 & quot;). setLevel (logging.WARNING) тоже. Регистратор для "запросов" не предотвращает эти сообщения.

Ваш ответ на вопрос