Как отключить сообщения журнала из библиотеки запросов?
по умолчанию запросы библиотека python записывает сообщения журнала в консоль, по строкам:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
обычно меня не интересуют эти сообщения, и я хотел бы их отключить. Каков был бы лучший способ заставить замолчать эти сообщения или уменьшить многословность запросов?
9 ответов:
я узнал, как настроить запросыуровень регистрации, это делается через стандартный лесозаготовки модуль. Я решил настроить его, чтобы не регистрировать сообщения, если они не являются хотя бы предупреждениями:
import logging logging.getLogger("requests").setLevel(logging.WARNING)Если вы хотите применить этот параметр для библиотеки urllib3 (обычно используемой запросами), добавьте следующее:
logging.getLogger("urllib3").setLevel(logging.WARNING)
Если вы пришли сюда, чтобы найти способ изменить ведение журнала любого (возможно, глубоко вложенного) модуля, используйте
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)на пользователя 136036 в комментарии, имейте в виду, что этот метод показывает только регистраторы, которые существуют во время выполнения приведенного выше фрагмента кода. Если, например, модуль создает новый регистратор при создании экземпляра класса, то вы должны поместить это фрагмент после создание класса для печати его имени.
import logging urllib3_logger = logging.getLogger('urllib3') urllib3_logger.setLevel(logging.CRITICAL)таким образом, все сообщения level=INFO из urllib3 не будут присутствовать в файле журнала.
таким образом, вы можете продолжать использовать level=INFO для ваших сообщений журнала...просто измените это для библиотеки, которую вы используете.
позвольте мне скопировать / вставить раздел документации, который я написал около недели или двух назад, после возникновения проблемы, подобной вашей:
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 } }
руководство Kbrose по поиску того, какой регистратор генерирует сообщения журнала, было очень полезно. Для моего проекта Django мне пришлось сортировать 120 разных лесорубов, пока я не обнаружил, что это
elasticsearchбиблиотека Python, которая вызывала проблемы для меня. Согласно руководству в большинстве вопросов, я отключил его, добавив это в мои регистраторы:... 'elasticsearch': { 'handlers': ['console'], 'level': logging.WARNING, }, ...публикация здесь, Если кто-то еще видит бесполезные сообщения журнала, проходящие всякий раз, когда они запускают Elasticsearch запрос.
Если у вас есть файл конфигурации, вы можете настроить его.
добавить urllib3 в разделе регистраторы:
[loggers] keys = root, urllib3добавить раздел logger_urllib3:
[logger_urllib3] level = WARNING handlers = qualname = requests.packages.urllib3.connectionpool
Я не уверен, что прежние подходы перестали работать, но в любом случае, вот еще один способ снятия предупреждений:
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.pyв принципе, добавление переменной среды в контексте выполнения скрипта.
из документации:https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
Comments