По умолчанию библиотека записывает сообщения журнала на консоль по линиям Starting new HTTP connection (1): example.com
и т. Д. Мне обычно не интересны эти сообщения, как их отключить?Как отключить сообщения журнала из библиотеки Requests?
ответ
Я узнал, как настроить запросов уровень регистрации, это делается через стандартный модуль logging. Я решил настроить его, чтобы не регистрировать сообщения, если они не являются по крайней мере предупреждения:
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
Если вы хотите применить эту настройку для библиотеки urllib3 (обычно используется по запросам) также добавить следующее:
logging.getLogger("urllib3").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')
Какой смысл быть более конкретным, чем просто «запросы», хотя, из практического POV? – aknuds1
Но что вы получаете, вызывая logging.getLogger ("request.packages.urllib3") вместо logging.getLogger («запросы»), учитывая, что вы хотите повлиять на регистрацию библиотеки запросов? – aknuds1
Вы хотите включить ведение журнала в запросах.packages.urllib3? Если это так, вы отвечаете на неправильный вопрос. – aknuds1
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
Таким образом, все сообщения уровня = INFO из urllib3 не будут присутствовать в файле журнала.
Таким образом, вы можете продолжать использовать уровень = INFO для сообщений журнала ... просто измените это для используемой библиотеки.
Я предлагаю использовать 'setLevel (logging.WARNING)' для регистрации также возможных предупреждений и сообщений об ошибках. – razz0
Для кого с помощью logging.config.dictConfig
вы можете изменять запросы библиотек уровень протоколирования в словаре, как это:
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': logging.WARNING
}
}
Это работает и для проектов на основе Django. –
просто: добавить requests.packages.urllib3.disable_warnings()
после import requests
Я не нашел этот метод в своей версии. Отключение предупреждений является чрезмерным, так как раздражающие сообщения являются уровнями 'INFO'. – tripleee
Я не уверен, если предыдущие подходы имеют перестали работать, но в любом случае, вот еще один способ устранения предупреждений:
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
В принципе, добавление переменной среды в контексте выполнения скрипта.
Из документации: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
В случае, если вы пришли сюда, ища способ изменить регистрацию любого (возможно, глубоко вложенного) модуля, используйте 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)
Спасибо, это помогло мне отключить сообщения журнала 'urllib3' при использовании' boto3'. В этом случае регистратором является 'botocore.vendored.requests.packages.urllib3', поэтому я использовал это:' logging.getLogger ("botocore.vendored.requests.packages.urllib3"). SetLevel (logging.WARNING) 'и I наконец, избавился от сообщений. –
Большое спасибо за это! Изменение критериев печати позволило мне изолировать, что python-elasticsearch был виновником в моем случае. –
Помните, что это не сработает, когда модули создадут свои регистраторы внутри своего класса, который вы вызовете позже, например, 'APScheduler', когда вы вызываете' BackgroundScheduler.BackgroundScheduler() '. – user136036
Если у вас есть файл конфигурации, вы можете настроить его.
Добавить urllib3 в регистраторы раздела:
[loggers]
keys = root, urllib3
Добавить logger_urllib3 раздел:
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
руководство Kbrose на нахождение которых регистратор был генерирующего сообщения журнала был очень полезным. Для моего проекта Django мне пришлось сортировать 120 разных регистраторов, пока не обнаружил, что это была библиотека Python , которая вызывала проблемы для меня.В соответствии с руководством в большинстве вопросов, я отключил его, добавив в моих лесорубов:
...
'elasticsearch': {
'handlers': ['console'],
'level': logging.WARNING,
},
...
Проводка здесь в случае, если кто-то видит, что бесполезные сообщения журнала приходят через всякий раз, когда они выполнить запрос Elasticsearch.
Нет причин для импорта протоколирования, просто сделать это:
requests.packages.urllib3.disable_warnings()
- 1. Как отключить сообщения журнала из библиотеки запросов в Django
- 2. Отключить сообщения журнала sphinx4
- 3. Отключить ведение журнала из библиотеки log4j 2, как?
- 4. Невозможно отключить сообщения журнала гибернации
- 5. Отключить сообщения журнала OWL API
- 6. Как отключить сообщения журнала MongoDB в консоли?
- 7. как отключить сообщения журнала tomcat5 'session expire'?
- 8. Отключить ведение журнала для сторонней библиотеки
- 9. Отключить ведение журнала при использовании внешней библиотеки
- 10. Как отключить выход журнала работника из сельдерея?
- 11. Отключить сообщения журнала в Java API Zookeeper
- 12. Как отключить Logger во внешнем компоненте библиотеки
- 13. Как отключить ведение журнала?
- 14. Форматировать сообщения журнала как дерево
- 15. Как отключить информацию журнала zookeeper?
- 16. Отключить ведение журнала из DriverManagerDataSource
- 17. Как отключить ведение журнала Hibernate?
- 18. Как отключить/отключить функцию ведения журнала из Storm
- 19. Как отключить службу журнала равноденствия в пользу сервиса журнала SLF4J?
- 20. Как отключить ведение журнала nginx с помощью limit_conn и limit_req?
- 21. Как скрыть сообщения журнала log4j2
- 22. Отключить код клиента из библиотеки
- 23. Как получить игру, чтобы распознать вывод журнала из библиотеки зависимых
- 24. Как отключить ведение журнала активатора фреймов?
- 25. Отключить/удалить printfs из библиотеки
- 26. log4j как отключить внутренние сообщения?
- 27. Spring @RequestMapping сообщения журнала?
- 28. Как отключить сообщения после установки из rubygems?
- 29. Jetty: как отключить ведение журнала?
- 30. Как отключить пути вызова журнала
Связанный: [Nginx и gunicorn] (https://stackoverflow.com/q/48700404/562769) –