简介
记录 HTTP 请求和响应对于调试和性能分析至关重要在 Spring Boot 应用程序中。本文概述了使用 Spring Boot Actuator 模块的实用解决方案,使您能够在一个位置记录所有带有异常的请求和响应。
使用 Spring Boot Actuator
Spring Boot Actuator 为跟踪 HTTP 请求提供开箱即用的支持。默认情况下,它会将最后 100 个请求记录到 /trace 端点(或 Spring Boot 2.0 中的 /actuator/httptrace )。
要启用请求日志记录,请将 spring-boot-starter-actuator 依赖项添加到您的项目中.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
定制请求日志记录
默认情况下,Actuator 仅记录最少量的请求信息。要自定义记录的详细信息,您可以创建自定义 WebMvcConfigurerAdapter 并重写 addInterceptors 方法以添加自定义拦截器。
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); } }
访问记录的请求
记录的请求可以从 /actuator/httptrace 端点访问。 JSON 输出包含每个请求的详细信息,包括:
结论
Spring Boot Actuator 提供了一个方便的解决方案,用于在一个位置记录所有 HTTP 请求和响应。通过自定义日志记录拦截器,您可以定制记录的详细信息以满足您的特定要求。这使您能够彻底调试问题、分析性能并深入了解应用程序与客户端的交互。
以上是如何在 Spring Boot 应用程序中有效记录 HTTP 请求和响应(包括异常)?的详细内容。更多信息请关注PHP中文网其他相关文章!