首頁 > Java > java教程 > 如何在 Spring Boot 應用程式中有效記錄 HTTP 請求和回應(包括異常)?

如何在 Spring Boot 應用程式中有效記錄 HTTP 請求和回應(包括異常)?

DDD
發布: 2024-11-24 04:52:14
原創
518 人瀏覽過

How can I effectively log HTTP requests and responses, including exceptions, in my Spring Boot application?

使用Spring Boot 記錄請求和回應

簡介

記錄HTTP 請求和回應對於偵錯效能分析重要在Spring Boot 應用程式中。本文概述了使用 Spring Boot Actuator 模組的實用解決方案,使您能夠在一個位置記錄所有帶有異常的請求和回應。

使用 Spring Boot Actuator

Spring Boot Actuator 為追蹤 HTTP 請求提供開箱即用的支援。預設情況下,它會將​​最後 100 個請求記錄到 /trace 端點(或 Spring Boot 2.0 中的 /actuator/httptrace )。

要啟用請求日誌記錄,請將spring-boot-starter-actuator 依賴項新增至您的專案.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
登入後複製

自訂請求記錄

預設情況下,Actuator 僅記錄最少量的請求資訊。要自訂記錄的詳細信息,您可以建立自訂 WebMvcConfigurerAdapter 並重寫 addInterceptors 方法以新增自訂攔截器。

public class RequestLoggingInterceptor extends HandlerInterceptorAdapter {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    // Log request details
    logger.info("Path: {}", request.getPathInfo());
    logger.info("Method: {}", request.getMethod());
    logger.info("Arguments: {}", request.getParameterMap());

    // Store request and response details for later use
    HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request);
    HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response);
    request.setAttribute("wrappedRequest", requestWrapper);
    response.setAttribute("wrappedResponse", responseWrapper);

    return super.preHandle(request, response, handler);
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    // Log response details
    HttpServletRequestWrapper requestWrapper = (HttpServletRequestWrapper) request.getAttribute("wrappedRequest");
    HttpServletResponseWrapper responseWrapper = (HttpServletResponseWrapper) response.getAttribute("wrappedResponse");

    logger.info("Status: {}", responseWrapper.getStatus());
    logger.info("Response: {}", responseWrapper.getContentAsString());

    super.postHandle(request, response, handler, modelAndView);
  }

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    // Log exceptions
    if (ex != null) {
      logger.error("Exception: {}", ex.getClass().getName());
      logger.error("Message: {}", ex.getMessage());
      logger.error("Stacktrace:");
      ex.printStackTrace();
    }

    super.afterCompletion(request, response, handler, ex);
  }
}
登入後複製

存取記錄的請求

記錄的請求可以從 /actuator/httptrace 端點存取。 JSON輸出包含每個請求的詳細信息,包括:

  • 狀態
  • 路徑
  • 方法
  • 查詢字串
  • 方法
  • 查詢字串
  • 請求參數
回應正文

異常(如果任何)

結論結論Spring Boot Actuator 提供了一個方便的解決方案,用於在一個位置記錄所有 HTTP 請求和回應。透過自訂日誌記錄攔截器,您可以自訂記錄的詳細資訊以滿足您的特定要求。這使您能夠徹底調試問題、分析效能並深入了解應用程式與客戶端的互動。

以上是如何在 Spring Boot 應用程式中有效記錄 HTTP 請求和回應(包括異常)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板