使用 Spring Boot Actuator 记录所有请求和响应

All*_*afe 5 java spring-mvc spring-boot

我正在使用 Spring Boot 和 REST 服务,使用@RestController. 我想用有效负载记录所有请求和响应。我该如何使用 来做到这一点Spring Boot Actuator?当我使用:

    @Bean
    public ServletContextRequestLoggingFilter requestLoggingFilter() {
        ServletContextRequestLoggingFilter loggingFilter = new ServletContextRequestLoggingFilter();
        loggingFilter.setIncludeClientInfo(true);
        loggingFilter.setIncludeQueryString(true);
        loggingFilter.setIncludePayload(true);
        loggingFilter.setIncludeHeaders(true);
        loggingFilter.setMaxPayloadLength(10000);
        loggingFilter.setAfterMessagePrefix("REQUEST DATA : ");
        return loggingFilter;
    }
Run Code Online (Sandbox Code Playgroud)

我只收到请求,但没有收到响应。

Iha*_*kau -1

您可以使用addInterceptors以下方法WebMvcConfigurer

@Configuration
@EnableWebMvc
class WebMvcConfiguration : WebMvcConfigurer {

  override fun addInterceptors(registry: InterceptorRegistry) {
      registry.addInterceptor(LoggingInterceptor())
  }
}
Run Code Online (Sandbox Code Playgroud)

这是拦截器的一个很好的例子

更新

您可以覆盖 SpringLoggingFilter

public class CustomLoggingFilter extends LoggingFilter
{
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException
     {
          super.doFilterInternal(request, response, filterChain);
     }
}

@Configuration
public Config {
    @Bean
    public CustomLoggingFilter loggingFilter()
    {
        return new CustomLoggingFilter();
    }
}
Run Code Online (Sandbox Code Playgroud)

不确定您的格式,但您可以尝试使用:

logging:
  level: 
    org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor: debug //response
    org.apache.coyote.http11.Http11InputBuffer: debug //request
Run Code Online (Sandbox Code Playgroud)