Maison  >  Article  >  Java  >  Comment puis-je enregistrer efficacement les demandes, les réponses et les exceptions dans mon API REST Spring Boot ?

Comment puis-je enregistrer efficacement les demandes, les réponses et les exceptions dans mon API REST Spring Boot ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-23 04:13:11319parcourir

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

Consignation des requêtes et des réponses dans Spring Boot

Lors du développement d'API REST avec Spring Boot, la journalisation des requêtes et des réponses peut être cruciale à des fins de débogage et obtenir des informations sur le comportement des applications. Cela inclut la journalisation non seulement des demandes réussies, mais également des exceptions rencontrées.

Utilisation de Spring Boot Actuator

Le module Spring Boot Actuator fournit une fonctionnalité de journalisation des requêtes HTTP intégrée. Pour activer la journalisation des demandes, suivez ces étapes :

  1. Ajoutez la dépendance spring-boot-starter-actuator à votre projet.
  2. Configurez les points de terminaison à exposer (par exemple, management. endpoints.web.base-path=/actuator).
  3. Accédez au /trace (pour Spring Boot 1.x) ou /actuator/httptrace (pour Spring Boot 2.0) point de terminaison pour afficher les 100 dernières requêtes HTTP.

Personnalisation de la journalisation des requêtes

La personnalisation du comportement de journalisation des requêtes peut être réalisée en implémentant un Filtre Web. Cela vous permet d'intercepter et de manipuler les requêtes avant qu'elles ne soient traitées par les contrôleurs de votre application. Voici un exemple de filtre Web personnalisé qui enregistre les demandes et les réponses :

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

Enregistrez le filtre dans votre application Spring Boot à l'aide de WebFilterRegistrationBean :

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

Gestion des exceptions

Pour gérer et enregistrer les exceptions de manière uniforme, vous pouvez utiliser l'annotation @ExceptionHandler sur un contrôleur ou classe de service. Par exemple :

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

En combinant le filtre Web personnalisé avec le gestionnaire d'exceptions, vous pouvez enregistrer toutes les demandes, réponses et exceptions de manière cohérente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn