Heim > Java > javaLernprogramm > Wie aktiviere ich eine umfassende Debugging-Protokollierung für Anfragen und Antworten mithilfe von Spring RestTemplate?

Wie aktiviere ich eine umfassende Debugging-Protokollierung für Anfragen und Antworten mithilfe von Spring RestTemplate?

Mary-Kate Olsen
Freigeben: 2024-11-23 02:43:14
Original
282 Leute haben es durchsucht

How to Enable Exhaustive Debugging Logging for Requests and Responses using Spring RestTemplate?

So aktivieren Sie eine umfassende Debugging-Protokollierung für Anfragen und Antworten mit Spring RestTemplate

Problem

Das Debuggen von HTTP-Anfragen und -Antworten kann bei Verwendung von Spring RestTemplate eine Herausforderung sein , da detaillierte Protokollierungsinformationen fehlen. Ähnlich wie im ausführlichen Modus von Curl benötigen Sie möglicherweise Einblicke in gesendete und empfangene Daten, einschließlich Header und Cookies.

Lösung

Anstatt den RestTemplate-Quellcode zu ändern, können Sie einen benutzerdefinierten ClientHttpRequestInterceptor verwenden, um Anfrage- und Antwortdaten abfangen und protokollieren. Hier ist ein vollständiges Beispiel:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;

public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor {

    final static Logger log = LoggerFactory.getLogger(LoggingRequestInterceptor.class);

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        traceRequest(request, body);
        ClientHttpResponse response = execution.execute(request, body);
        traceResponse(response);
        return response;
    }

    private void traceRequest(HttpRequest request, byte[] body) throws IOException {
        log.info("===========================request begin================================================");
        log.debug("URI         : {}", request.getURI());
        log.debug("Method      : {}", request.getMethod());
        log.debug("Headers     : {}", request.getHeaders() );
        log.debug("Request body: {}", new String(body, "UTF-8"));
        log.info("==========================request end================================================");
    }

    private void traceResponse(ClientHttpResponse response) throws IOException {
        StringBuilder inputStringBuilder = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody(), "UTF-8"));
        String line = bufferedReader.readLine();
        while (line != null) {
            inputStringBuilder.append(line);
            inputStringBuilder.append('\n');
            line = bufferedReader.readLine();
        }
        log.info("============================response begin==========================================");
        log.debug("Status code  : {}", response.getStatusCode());
        log.debug("Status text  : {}", response.getStatusText());
        log.debug("Headers      : {}", response.getHeaders());
        log.debug("Response body: {}", inputStringBuilder.toString());
        log.info("=======================response end=================================================");
    }

}
Nach dem Login kopieren

Um diesen Interceptor zu verwenden, instanziieren Sie ein RestTemplate mit einer BufferingClientHttpRequestFactory und registrieren Sie den LoggingRequestInterceptor:

RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new LoggingRequestInterceptor());
restTemplate.setInterceptors(interceptors);
Nach dem Login kopieren

Diese Lösung bietet eine anpassbare und bequeme Möglichkeit zum Erfassen und Protokollieren Sie Anforderungs- und Antwortdetails und helfen Sie bei der Fehlerbehebung und beim Debuggen der RESTful-Webservice-Kommunikation mit Spring RestTemplate.

Das obige ist der detaillierte Inhalt vonWie aktiviere ich eine umfassende Debugging-Protokollierung für Anfragen und Antworten mithilfe von Spring RestTemplate?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage