>  기사  >  Java  >  Spring Boot REST API에서 요청, 응답 및 예외를 효과적으로 기록하려면 어떻게 해야 합니까?

Spring Boot REST API에서 요청, 응답 및 예외를 효과적으로 기록하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-23 04:13:11319검색

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를 구현하여 달성됩니다. 이를 통해 애플리케이션의 컨트롤러에서 요청을 처리하기 전에 요청을 가로채고 조작할 수 있습니다. 다음은 요청과 응답을 기록하는 사용자 정의 웹 필터의 예입니다.

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);
    }
}

사용자 정의 웹 필터와 예외 처리기를 결합하면 모든 요청, 응답 및 예외를 일관된 방식으로 기록할 수 있습니다.

위 내용은 Spring Boot REST API에서 요청, 응답 및 예외를 효과적으로 기록하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.