Maison >Java >javaDidacticiel >Comment puis-je enregistrer efficacement les requêtes et réponses HTTP, y compris les exceptions, dans mon application Spring Boot ?

Comment puis-je enregistrer efficacement les requêtes et réponses HTTP, y compris les exceptions, dans mon application Spring Boot ?

DDD
DDDoriginal
2024-11-24 04:52:14594parcourir

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

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

Introduction

La journalisation des requêtes et des réponses HTTP est cruciale pour le débogage et l'analyse des performances dans les applications Spring Boot. Cet article donne un aperçu d'une solution pratique utilisant le module Actuator de Spring Boot, vous permettant de consigner toutes les demandes et réponses avec exceptions en un seul endroit.

Utilisation de Spring Boot Actuator

Spring Boot Actuator fournit une prise en charge prête à l'emploi pour le suivi des requêtes HTTP. Par défaut, il enregistre les 100 dernières requêtes sur le point de terminaison /trace (ou /actuator/httptrace dans Spring Boot 2.0).

Pour activer la journalisation des requêtes, ajoutez la dépendance spring-boot-starter-actuator à votre projet .

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Personnalisation de la journalisation des demandes

Par par défaut, Actuator n’enregistre qu’une quantité minimale d’informations sur la demande. Pour personnaliser les détails enregistrés, vous pouvez créer un WebMvcConfigurerAdapter personnalisé et remplacer la méthode addInterceptors pour ajouter un intercepteur personnalisé.

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

Accès aux requêtes enregistrées

Les requêtes enregistrées est accessible à partir du point de terminaison /actuator/httptrace. La sortie JSON contient des détails sur chaque requête, notamment :

  • Statut
  • Chemin
  • Méthode
  • Chaîne de requête
  • Requête arguments
  • Corps de la réponse
  • Exceptions (si any)

Conclusion

Spring Boot Actuator fournit une solution pratique pour enregistrer toutes les requêtes et réponses HTTP en un seul endroit. En personnalisant l'intercepteur de journalisation, vous pouvez adapter les détails enregistrés pour répondre à vos besoins spécifiques. Cela vous permet de déboguer en profondeur les problèmes, d'analyser les performances et d'obtenir des informations sur les interactions de votre application avec les clients.

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