ホームページ >Java >&#&チュートリアル >Spring Boot REST API でリクエスト、レスポンス、例外を効果的に記録するにはどうすればよいですか?

Spring Boot REST API でリクエスト、レスポンス、例外を効果的に記録するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-23 04:13:11334ブラウズ

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. 公開するエンドポイントを構成します (管理など)。 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 中国語 Web サイトの他の関連記事を参照してください。

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