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 :
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!