Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Log Permintaan, Respons dan Pengecualian dengan Berkesan dalam Spring Boot REST API Saya?

Bagaimanakah Saya Boleh Log Permintaan, Respons dan Pengecualian dengan Berkesan dalam Spring Boot REST API Saya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-23 04:13:11375semak imbas

How Can I Effectively Log Requests, Responses, and Exceptions in My Spring Boot REST API?

Melog Permintaan dan Respons dalam But Spring

Apabila membangunkan REST API dengan Spring Boot, permintaan log dan respons boleh menjadi penting untuk tujuan penyahpepijatan dan mendapatkan pandangan tentang tingkah laku aplikasi. Ini termasuk pengelogan bukan sahaja permintaan yang berjaya tetapi juga pengecualian yang dihadapi.

Menggunakan Spring Boot Actuator

Modul Spring Boot Actuator menyediakan ciri pengelogan permintaan HTTP terbina dalam. Untuk mendayakan pengelogan permintaan, ikut langkah berikut:

  1. Tambahkan kebergantungan spring-boot-starter-actuator pada projek anda.
  2. Konfigurasikan titik akhir untuk didedahkan (contohnya, pengurusan. endpoints.web.base-path=/actuator).
  3. Akses /trace (untuk Spring Boot 1.x) atau /actuator/httptrace (untuk Spring Boot 2.0 ) titik akhir untuk melihat 100 permintaan HTTP terakhir.

Menyesuaikan Pengelogan Permintaan

Menyesuaikan tingkah laku pengelogan permintaan boleh dicapai dengan melaksanakan Penapis Web. Ini membolehkan anda memintas dan memanipulasi permintaan sebelum ia dikendalikan oleh pengawal aplikasi anda. Berikut ialah contoh penapis web tersuai yang mencatatkan permintaan dan respons:

public class RequestResponseLoggingFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        // Log the request
        logRequest(exchange);

        // Log the response
        return chain.filter(exchange).then(logResponse(exchange));
    }

    private void logRequest(ServerWebExchange exchange) {
        String path = exchange.getRequest().getPath().toString();
        String method = exchange.getRequest().getMethodValue();
        String clientIp = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();
        String queryString = exchange.getRequest().getQueryParams().toString();
        // ... (additional request information)
    }

    private Mono<Void> logResponse(ServerWebExchange exchange) {
        return exchange.getResponse().writeWith(processor -> {
            // ... (read the response, log the status code, response headers, etc.)
        });
    }
}

Daftar penapis dalam aplikasi Spring Boot anda menggunakan WebFilterRegistrationBean:

@Bean
public WebFilterRegistrationBean<RequestResponseLoggingFilter> requestResponseLoggingFilter() {
    return new WebFilterRegistrationBean<>(new RequestResponseLoggingFilter());
}

Mengendalikan Pengecualian

Untuk mengendalikan dan mencatat pengecualian secara seragam, anda boleh menggunakan @ExceptionHandler anotasi pada pengawal atau kelas perkhidmatan. Contohnya:

@RestController
public class MyController {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Error> handleException(Exception e) {
        // Log the exception
        // ...
        
        // Return the error response
        Error error = new Error();
        error.setMessage(e.getMessage());
        error.setErrorCode(101); // Custom error code
        
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
    }
}

Dengan menggabungkan penapis web tersuai dengan pengendali pengecualian, anda boleh log semua permintaan, respons dan pengecualian dengan cara yang konsisten.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Permintaan, Respons dan Pengecualian dengan Berkesan dalam Spring Boot REST API Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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