Как включить полный дебаг и логирование в Spring RestTemplate

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

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

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

Чтобы детально отслеживать процесс выполнения запросов в RestTemplate, вам понадобится ClientHttpRequestInterceptor. Вот пример эффективного интерцептора для логирования запросов и ответов:

Java
Скопировать код
public class LoggingInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        // Выводим информацию о запросе
        log("Запрос", request.getMethod(), request.getURI(), new String(body, StandardCharsets.UTF_8));
        
        // Выполняем запрос
        ClientHttpResponse response = execution.execute(request, body);

        // Выводим информацию о полученном ответе
        log("Ответ", response.getStatusCode(), response.getStatusText(), StreamUtils.copyToString(response.getBody(), StandardCharsets.UTF_8));
        return response;
    }
    
    private void log(String prefix, Object... attributes) {
        // Формируем и выводим лог
        System.out.println(prefix + " " + Arrays.stream(attributes).map(Object::toString).collect(Collectors.joining(" | ")));
    }
}

// Применяем наш созданный перехватчик к RestTemplate
RestTemplate restTemplate = new RestTemplate();
restTemplate.getInterceptors().add(new LoggingInterceptor());

Данный код показывает, как можно логировать HTTP-метод, URI, содержимое запроса и статус ответа, а также как подключить интерцептор к вашему RestTemplate.

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

Продвинутое: Глубокое отладочное логирование

Познакомимся с продвинутыми техниками логирования, которые значительно упростят процесс отладки.

Буферизация: захватывайте все

BufferingClientHttpRequestFactory позволит вам прочитать тело ответа несколько раз, чтобы не упустить ни одной детали:

Java
Скопировать код
restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));

Настройки логирования: Мониторинг

Установите уровень логирования в application.properties, чтобы контролировать процесс:

properties
Скопировать код
logging.level.org.springframework.web.client.RestTemplate=DEBUG

Если вам нужна более детальная информация, примените log4j:

properties
Скопировать код
log4j.logger.httpclient.wire.header=DEBUG
log4j.logger.httpclient.wire.content=DEBUG

Логирование внутри логирования: обилие библиотек

Среди многих библиотек можно выделить spring-rest-template-logger. Добавьте его в свой проект и настройте уровень логирования:

xml
Скопировать код
<dependency>
    <groupId>com.github</groupId>
    <artifactId>spring-rest-template-logger</artifactId>
    <version>1.0.0</version>
</dependency>
properties
Скопировать код
logging.level.spring-rest-template-logger=DEBUG

Оттачивание мелочей

Внимание к мелочам – залог создания безупречного процесса отладки.

Кодировка: не теряйтесь в переводе

Правильная кодировка обеспечит читаемость ваших логов:

Java
Скопировать код
new String(body, StandardCharsets.UTF_8)

Обработка исключений: когда ошибка неизбежна

Обрабатывайте исключения корректно:

Java
Скопировать код
try {
    // Ваши действия
} catch (Exception e) {
    // Обработка ошибки
    throw e;
}

Игра: SLF4J и логгеры

Умейте использовать SLF4J, Logback и Log4j для синхронизации процессов логирования.

Визуализация

Представьте процесс отладки как яркую визуальную сцену:

Markdown
Скопировать код
До: 🎥👀 Эпизод (Обмен данными) = Невидим
Java
Скопировать код
// Пример запроса через RestTemplate без логирования
restTemplate.getForObject(url, String.class);
Markdown
Скопировать код
После: 🎥👀💡💡💡 Эпизод (Обмен данными) = Освещен со всех сторон
Java
Скопировать код
// Активация логирования в RestTemplate
logging.level.org.springframework.web.client.RestTemplate=DEBUG

Ни один байт данных теперь не останется без внимания.

Детальный режим curl

Примените подробный режим curl для всестороннего анализа:

properties
Скопировать код
logging.level.org.apache.http=DEBUG
logging.level.org.apache.http.wire=DEBUG

Сборщик: StringBuilder

StringBuilder поможет оптимизировать память и повысить производительность при логировании.

Разнообразие сценариев: разные HTTP-методы и типы контента

Готовьтесь к различным сценариям использования HTTP-методов и разным типам контента — каждый случай требует особого подхода.

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

  1. Как включить полное отладочное логирование запросов и ответов Spring RestTemplate? – Stack Overflow — сообщество профессионалов готово ответить на ваши вопросы.
  2. RestTemplate (API Spring Framework 6.1.3) — все, что требуется знать о RestTemplate.
  3. Глава 3: Конфигурация – Logback — настройка уровней логирования.
  4. Осваиваем работу с RESTful веб-сервисами — детальное руководство по теме.
  5. Сравнение фреймворков для логирования в Java: Commons Logging, SLF4J и Log4J | KnpCode — глубокое изучение SLF4J.
Свежие материалы