在Spring Boot 中記錄請求和回應
使用Spring Boot 開發REST API 時,記錄請求和回應對於偵錯目的和深入了解回應應用程式行為。這不僅包括記錄成功的請求,還包括記錄遇到的異常。
使用 Spring Boot Actuator
Spring Boot Actuator 模組提供內建的 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中文網其他相關文章!