ホームページ  >  記事  >  Java  >  Spring Boot アプリケーションで例外を含む HTTP リクエストとレスポンスを効果的に記録するにはどうすればよいですか?

Spring Boot アプリケーションで例外を含む HTTP リクエストとレスポンスを効果的に記録するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-24 04:52:14503ブラウズ

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

Spring Boot によるリクエストとレスポンスのログ記録

はじめに

HTTP リクエストとレスポンスのログ記録は、デバッグとパフォーマンス分析にとって重要ですSpring Boot アプリケーションで。この記事では、Spring Boot の Actuator モジュールを使用した実用的なソリューションの概要を説明します。これにより、例外を含むすべてのリクエストと応答を 1 か所に記録できるようになります。

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 出力には、次のような各リクエストの詳細が含まれます。

  • ステータス
  • パス
  • メソッド
  • クエリ文字列
  • リクエスト引数
  • レスポンスボディ
  • 例外 (if任意)

結論

Spring Boot Actuator は、すべての HTTP リクエストとレスポンスを 1 か所に記録するための便利なソリューションを提供します。ログ インターセプターをカスタマイズすることで、ログに記録される詳細を特定の要件に合わせて調整できます。これにより、問題を徹底的にデバッグし、パフォーマンスを分析し、アプリケーションとクライアントのやり取りについての洞察を得ることができます。

以上がSpring Boot アプリケーションで例外を含む HTTP リクエストとレスポンスを効果的に記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。