Управление лог-сообщениями библиотеки Requests на Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для устранения избыточных сообщений от библиотеки Requests, сконфигурируйте уровень логирования следующим образом:
import logging
logging.getLogger("requests").setLevel(logging.ERROR)
Этим действием мы задаём для requests
уровень логирования ERROR, чем исключаем из вывода сообщения уровней INFO и DEBUG. Примените эту настройку перед отправкой HTTP-запросов, и не будет нарушен ваш покой.
Как справиться с журналами urllib3
Если вас ещё тревожит шум от других библиотек, использующих urllib3
, примените следующее решение:
import logging
logging.getLogger('urllib3').setLevel(logging.ERROR)
Так вы подавите разговорчивый urllib3
, который часто мелькает в журналах из-за библиотеки Requests.
Да, и дочерние логгеры тоже многословны!
Подчинённые логгеры могут передавать сообщения, которые вызывают непрерывный поток логов. Чтобы предотвратить это, используйте атрибут propagate
:
import logging
logging.getLogger("requests").propagate = False
Сочетание управления уровнями логирования и атрибута propagate поможет избежать нежелательного логов-фонтана.
Хочу слушать некоторые логгеры, но не все!
Для детализированного мониторинга процесса отладки с возможностью отключения конкретных логгеров используйте Logger.manager.loggerDict
:
import logging
for name in logging.Logger.manager.loggerDict:
if 'urllib3' in name or 'requests' in name:
logging.getLogger(name).setLevel(logging.CRITICAL)
Этот код отфильтрует логгеры, связанные с requests
и urllib3
, повышая их уровень до CRITICAL.
Визуализация
Представьте, что вы в библиотеке и ищете тихое уголок. Но тишину нарушает болтовня из зоны Requests!
Отделы библиотеки: [📔 Романы, 📖 Фантастика, 📚 Requests (💬💬💬), 📘 История]
Чтобы вернуть тишину, установите уровень логирования на CRITICAL:
import logging
logging.getLogger('requests').setLevel(logging.CRITICAL);
И вот болтовня стихает:
Отделы библиотеки: [📔 Романы, 📖 Фантастика, 📚 Requests (🔇), 📘 История]
Уровень CRITICAL обеспечивает долгожданную тишину.
Настроить уровень детализации логов в зависимости от стадии разработки
На различных этапах разработки вам может потребоваться разный уровень логирования. Для регулирования используйте переменную окружения:
import logging
import os
if os.getenv('DEBUG_MODE'):
logging.getLogger("requests").setLevel(logging.DEBUG)
else:
logging.getLogger("requests").setLevel(logging.ERROR)
Это позволяет легко переключаться между детальными логами на этапе отладки и стиснутым логированием на проде.
В поисках уклончивых логгеров
Если названия логгеров неизвестны, найдите их, вызвав перекличку после создания объекта класса или в процессе выполнения:
import logging
for logger_name in logging.Logger.manager.loggerDict:
print(logger_name)
С помощью этой процедуры вы можете обнаружить все активные логгеры и подавить их по отдельности или за один раз.
Ваше универсальное лекарство: dictConfig
Для управления логированием в сложных приложениях используйте logging.config.dictConfig
:
import logging.config
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'loggers': {
'requests': {
'level': 'ERROR',
'propagate': False,
},
},
}
logging.config.dictConfig(LOGGING)
Этот подход обеспечивает централизованное управление параметрами логирования.
Полезные материалы
- Requests – Developer Interface — официальная документация о работе с библиотекой Requests.
- Introduction to Logging — The Hitchhiker's Guide to Python — основы логирования и лучшие практики Python.
- How do I disable log messages from the Requests library? – Stack Overflow — обсуждение методов подавления логов Requests.
- Logging — Python Official Documentation — детальное руководство по модулю логирования Python.
- Advanced Logging in Python – Real Python — подходы к логированию Python, включая использование сторонних библиотек.
- Full Stack Python – Logging — эффективное использование логирования в Python-проектах.
- Deprecated decorator for Python – GitHub — примеры кода для подавления логов от библиотек, включая Requests.