Maison >Java >javaDidacticiel >Comment puis-je enregistrer efficacement les requêtes et réponses HTTP, y compris les exceptions, dans mon application 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 :
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!