Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Log Permintaan dan Respons Spring RestTemplate untuk Penyahpepijatan Berkesan?

Susan Sarandon
Lepaskan: 2024-11-19 01:51:02
asal
979 orang telah melayarinya

How to Log Spring RestTemplate Requests and Responses for Effective Debugging?

Menyahpepijat Permintaan dan Respons Spring RestTemplate: Panduan Komprehensif

Apabila menyahpepijat Spring RestTemplate, memeriksa permintaan dan respons boleh memberikan cerapan yang tidak ternilai. Untuk meniru keluaran verbose perintah curl dengan pilihan "-v", kita perlu mendayakan pengelogan atau penyahpepijatan terperinci untuk RestTemplate.

Satu pendekatan melibatkan pengubahsuaian kod sumber RestTemplate untuk memasukkan pernyataan pengelogan tambahan, tetapi ini tidak disyorkan sebagai penyelesaian utama. Sebaliknya, kami boleh memanfaatkan kuasa ClientHttpRequestInterceptor.

Custom ClientHttpRequestInterceptor untuk Pengelogan Permintaan/Respons

Untuk log kedua-dua butiran permintaan dan respons, kami boleh melaksanakan tersuai ClientHttpRequestInterceptor:

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

Konfigurasi RestTemplate dengan Buffering dan Interceptor

Untuk menggunakan pemintas tersuai kami, konfigurasikan RestTemplate seperti berikut:

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

Penggunaan dan Output Jangkaan

Dengan konfigurasi ini disediakan, memanggil restTemplate.execute() akan log permintaan dan butiran respons dalam format yang dikehendaki:

restTemplate.put("http://someurl", objectToPut, urlPathValues);
Salin selepas log masuk

Dan anda akan melihat perkara berikut dalam log:

===========================request begin===============================================
URI         : http://someurl
Method      : PUT
Headers     : {...}
Request body: {...}
==========================request end===============================================

============================response begin==========================================
Status code  : 200
Status text  : OK
Headers      : {...}
Response body: {...}
=======================response end=================================================
Salin selepas log masuk

Pengelogan terperinci ini memberikan pandangan menyeluruh tentang interaksi RestTemplate, menjadikan penyahpepijatan lebih cekap dan mudah. Dengan mengelakkan pengubahsuaian kod dan memanfaatkan mekanisme kebolehlanjutan yang disediakan, pendekatan ini menawarkan penyelesaian yang bersih dan fleksibel untuk cabaran penyahpepijatan biasa ini.

Atas ialah kandungan terperinci Bagaimana untuk Log Permintaan dan Respons Spring RestTemplate untuk Penyahpepijatan Berkesan?. 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