首頁 >Java >java教程 >如何在 Spring Boot REST API 中有效記錄請求、回應和例外狀況?

如何在 Spring Boot REST API 中有效記錄請求、回應和例外狀況?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-23 04:13:11377瀏覽

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

在Spring Boot 中記錄請求和回應

使用Spring Boot 開發REST API 時,記錄請求和回應對於偵錯目的和深入了解回應應用程式行為。這不僅包括記錄成功的請求,還包括記錄遇到的異常。

使用 Spring Boot Actuator

Spring Boot Actuator 模組提供內建的 HTTP 請求日誌記錄功能。若要啟用請求日誌記錄,請依照下列步驟操作:

  1. 將 spring-boot-starter-actuator 依賴項新增至您的專案中。
  2. 設定要公開的端點(例如,management)。 endpoints.web.base-path=/actuator).
  3. 訪問 /trace(對於 Spring Boot 1.x)或/actuator/httptrace (對於 Spring Boot 2.0 )端點用於查看最近 100 個 HTTP 請求。

自訂請求日誌記錄

自訂請求記錄行為可以是透過實作 WebFilter 來實現。這允許您在應用程式的控制器處理請求之前攔截和操作請求。以下是記錄請求和回應的自訂Web 過濾器的範例:

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.)
        });
    }
}

使用WebFilterRegistrationBean 在Spring Boot 應用程式中註冊過濾器:

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

處理異常

為了統一處理和記錄異常,可以使用@ExceptionHandler來註解控制器或服務類別。例如:

@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);
    }
}

將自訂 Web 過濾器與異常處理程序結合,您可以以一致的方式記錄所有請求、回應和異常。

以上是如何在 Spring Boot REST API 中有效記錄請求、回應和例外狀況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn