Home > Java > javaTutorial > body text

How Can I Effectively Log Requests, Responses, and Exceptions in My Spring Boot REST API?

Mary-Kate Olsen
Release: 2024-11-23 04:13:11
Original
319 people have browsed it

How Can I Effectively Log Requests, Responses, and Exceptions in My Spring Boot REST API?

Logging Requests and Responses in Spring Boot

When developing REST APIs with Spring Boot, logging requests and responses can be crucial for debugging purposes and gaining insights into application behavior. This includes logging not only successful requests but also exceptions encountered.

Using Spring Boot Actuator

The Spring Boot Actuator module provides a built-in HTTP request logging feature. To enable request logging, follow these steps:

  1. Add the spring-boot-starter-actuator dependency to your project.
  2. Configure the endpoints to be exposed (for example, management.endpoints.web.base-path=/actuator).
  3. Access the /trace (for Spring Boot 1.x) or /actuator/httptrace (for Spring Boot 2.0 ) endpoint to view the last 100 HTTP requests.

Customizing Request Logging

Customizing the request logging behavior can be achieved by implementing a WebFilter. This allows you to intercept and manipulate requests before they are handled by your application's controllers. Here's an example of a custom web filter that logs requests and responses:

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.)
        });
    }
}
Copy after login

Register the filter in your Spring Boot application using WebFilterRegistrationBean:

@Bean
public WebFilterRegistrationBean<RequestResponseLoggingFilter> requestResponseLoggingFilter() {
    return new WebFilterRegistrationBean<>(new RequestResponseLoggingFilter());
}
Copy after login

Handling Exceptions

To handle and log exceptions uniformly, you can use the @ExceptionHandler annotation on a controller or service class. For example:

@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);
    }
}
Copy after login

By combining the custom web filter with the exception handler, you can log all requests, responses, and exceptions in a consistent manner.

The above is the detailed content of How Can I Effectively Log Requests, Responses, and Exceptions in My Spring Boot REST API?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template