Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Mendayakan Pengelogan Penyahpepijatan Lengkap untuk Permintaan dan Respons menggunakan Spring RestTemplate?

Mary-Kate Olsen
Lepaskan: 2024-11-23 02:43:14
asal
205 orang telah melayarinya

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

Cara Mendayakan Pengelogan Nyahpepijat Lengkap untuk Permintaan dan Respons menggunakan Spring RestTemplate

Masalah

Menyahpepijat permintaan dan respons HTTP boleh menjadi mencabar apabila menggunakan Spring RestTemplate , kerana ia tidak mempunyai maklumat pengelogan terperinci. Sama seperti mod verbose curl, anda mungkin memerlukan cerapan tentang kedua-dua data yang dihantar dan diterima, termasuk pengepala dan kuki.

Penyelesaian

Daripada mengubah suai kod sumber RestTemplate, anda boleh menggunakan ClientHttpRequestInterceptor tersuai untuk memintas dan log permintaan dan data tindak balas. Berikut ialah contoh lengkap:

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=================================================");
    }

}
Salin selepas log masuk

Untuk menggunakan pemintas ini, nyatakan RestTemplate menggunakan BufferingClientHttpRequestFactory dan daftarkan LoggingRequestInterceptor:

RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new LoggingRequestInterceptor());
restTemplate.setInterceptors(interceptors);
Salin selepas log masuk

Penyelesaian ini menyediakan cara yang boleh disesuaikan dan mudah untuk menangkap dan log permintaan dan butiran respons, membantu dalam menyelesaikan masalah dan menyahpepijat komunikasi perkhidmatan web RESTful menggunakan Spring RestTemplate.

Atas ialah kandungan terperinci Bagaimana untuk Mendayakan Pengelogan Penyahpepijatan Lengkap untuk Permintaan dan Respons menggunakan Spring RestTemplate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan