Управление лог-сообщениями библиотеки Requests на Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для устранения избыточных сообщений от библиотеки Requests, сконфигурируйте уровень логирования следующим образом:

Python
Скопировать код
import logging
logging.getLogger("requests").setLevel(logging.ERROR)

Этим действием мы задаём для requests уровень логирования ERROR, чем исключаем из вывода сообщения уровней INFO и DEBUG. Примените эту настройку перед отправкой HTTP-запросов, и не будет нарушен ваш покой.

Кинга Идем в IT: пошаговый план для смены профессии

Как справиться с журналами urllib3

Если вас ещё тревожит шум от других библиотек, использующих urllib3, примените следующее решение:

Python
Скопировать код
import logging
logging.getLogger('urllib3').setLevel(logging.ERROR)

Так вы подавите разговорчивый urllib3, который часто мелькает в журналах из-за библиотеки Requests.

Да, и дочерние логгеры тоже многословны!

Подчинённые логгеры могут передавать сообщения, которые вызывают непрерывный поток логов. Чтобы предотвратить это, используйте атрибут propagate:

Python
Скопировать код
import logging
logging.getLogger("requests").propagate = False

Сочетание управления уровнями логирования и атрибута propagate поможет избежать нежелательного логов-фонтана.

Хочу слушать некоторые логгеры, но не все!

Для детализированного мониторинга процесса отладки с возможностью отключения конкретных логгеров используйте Logger.manager.loggerDict:

Python
Скопировать код
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:

Python
Скопировать код
import logging
logging.getLogger('requests').setLevel(logging.CRITICAL);

И вот болтовня стихает:

Отделы библиотеки: [📔 Романы, 📖 Фантастика, 📚 Requests (🔇), 📘 История]

Уровень CRITICAL обеспечивает долгожданную тишину.

Настроить уровень детализации логов в зависимости от стадии разработки

На различных этапах разработки вам может потребоваться разный уровень логирования. Для регулирования используйте переменную окружения:

Python
Скопировать код
import logging
import os

if os.getenv('DEBUG_MODE'):
    logging.getLogger("requests").setLevel(logging.DEBUG)
else:
    logging.getLogger("requests").setLevel(logging.ERROR)

Это позволяет легко переключаться между детальными логами на этапе отладки и стиснутым логированием на проде.

В поисках уклончивых логгеров

Если названия логгеров неизвестны, найдите их, вызвав перекличку после создания объекта класса или в процессе выполнения:

Python
Скопировать код
import logging

for logger_name in logging.Logger.manager.loggerDict:
    print(logger_name)

С помощью этой процедуры вы можете обнаружить все активные логгеры и подавить их по отдельности или за один раз.

Ваше универсальное лекарство: dictConfig

Для управления логированием в сложных приложениях используйте logging.config.dictConfig:

Python
Скопировать код
import logging.config

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'loggers': {
        'requests': {
            'level': 'ERROR',
            'propagate': False,
        },
    },
}

logging.config.dictConfig(LOGGING)

Этот подход обеспечивает централизованное управление параметрами логирования.

Полезные материалы

  1. Requests – Developer Interface — официальная документация о работе с библиотекой Requests.
  2. Introduction to Logging — The Hitchhiker's Guide to Python — основы логирования и лучшие практики Python.
  3. How do I disable log messages from the Requests library? – Stack Overflow — обсуждение методов подавления логов Requests.
  4. Logging — Python Official Documentation — детальное руководство по модулю логирования Python.
  5. Advanced Logging in Python – Real Python — подходы к логированию Python, включая использование сторонних библиотек.
  6. Full Stack Python – Logging — эффективное использование логирования в Python-проектах.
  7. Deprecated decorator for Python – GitHub — примеры кода для подавления логов от библиотек, включая Requests.