Class LoggingInterceptor

java.lang.Object
io.leandev.appfuse.http.logging.LoggingInterceptor
All Implemented Interfaces:
HttpClientInterceptor

public class LoggingInterceptor extends Object implements HttpClientInterceptor

日誌攔截器

預設的 HTTP 日誌攔截器實作,提供完整的請求/回應日誌記錄功能。

記錄內容

  • 請求資訊:方法、URL、標頭、Body、認證狀態、閘道資訊
  • 回應資訊:狀態碼、標頭、Body、耗時、重試次數
  • 錯誤資訊:異常類型、錯誤訊息、Stack Trace

敏感資訊保護 自動遮罩敏感資訊(透過 SensitiveDataMasker):

  • Authorization 標頭
  • Cookie 標頭
  • API Key 標頭
  • JSON Body 中的 password, secret, token 欄位

使用範例

// 使用預設配置(輸出到 Slf4j)
StandardHttpClient client = StandardHttpClient.builder()
    .withInterceptor(new LoggingInterceptor())
    .build();

// 自訂日誌處理器
HttpLogHandler handler = new DatabaseLogHandler();
StandardHttpClient client = StandardHttpClient.builder()
    .withInterceptor(new LoggingInterceptor(handler))
    .build();

// 自訂配置
LoggingInterceptor interceptor = LoggingInterceptor.builder()
    .logHandler(handler)
    .includeRequestBody(true)
    .includeResponseBody(true)
    .includeStackTrace(false)
    .masker(customMasker)
    .build();
See Also:
  • Constructor Details

    • LoggingInterceptor

      public LoggingInterceptor()

      建立日誌攔截器(使用預設配置)

      預設配置:

      • 使用 Slf4jLogHandler
      • 不包含請求 Body
      • 不包含回應 Body
      • 不包含 Stack Trace
    • LoggingInterceptor

      public LoggingInterceptor(HttpLogHandler logHandler)
      建立日誌攔截器
      Parameters:
      logHandler - 日誌處理器
    • LoggingInterceptor

      public LoggingInterceptor(HttpLogHandler logHandler, SensitiveDataMasker masker, boolean includeRequestBody, boolean includeResponseBody, boolean includeStackTrace)
      建立日誌攔截器
      Parameters:
      logHandler - 日誌處理器
      masker - 敏感資訊遮罩工具
      includeRequestBody - 是否包含請求 Body
      includeResponseBody - 是否包含回應 Body
      includeStackTrace - 是否包含 Stack Trace
  • Method Details

    • beforeRequest

      public void beforeRequest(InterceptorContext context, org.apache.hc.core5.http.ClassicHttpRequest request)
      Description copied from interface: HttpClientInterceptor

      請求執行前的攔截點

      在此方法中可以:

      • 記錄請求資訊
      • 修改請求標頭或參數
      • 記錄開始時間(用於計算耗時)
      Specified by:
      beforeRequest in interface HttpClientInterceptor
      Parameters:
      context - 攔截器上下文,可用於在不同攔截點之間傳遞資料
      request - HTTP 請求物件
    • afterResponse

      public void afterResponse(InterceptorContext context, org.apache.hc.core5.http.ClassicHttpRequest request, org.apache.hc.core5.http.ClassicHttpResponse response)
      Description copied from interface: HttpClientInterceptor

      請求執行後的攔截點

      在此方法中可以:

      • 記錄回應資訊
      • 計算請求耗時
      • 檢查回應狀態
      Specified by:
      afterResponse in interface HttpClientInterceptor
      Parameters:
      context - 攔截器上下文
      request - HTTP 請求物件
      response - HTTP 回應物件
    • onError

      public void onError(InterceptorContext context, org.apache.hc.core5.http.ClassicHttpRequest request, Throwable error)
      Description copied from interface: HttpClientInterceptor

      錯誤發生時的攔截點

      在此方法中可以:

      • 記錄錯誤資訊
      • 記錄 Stack Trace
      • 觸發告警通知

      注意:此方法不應該拋出異常,否則會覆蓋原始錯誤

      Specified by:
      onError in interface HttpClientInterceptor
      Parameters:
      context - 攔截器上下文
      request - HTTP 請求物件
      error - 發生的錯誤
    • builder

      建立日誌攔截器建構器