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