如何使用CommonsRequestLoggingFilter追踪Spring Boot中的HTTP请求

x33g5p2x  于2022-09-29 转载在 Spring  
字(1.8k)|赞(0)|评价(0)|浏览(310)

本教程展示了如何使用**CommonsRequestLoggingFilter跟踪传入的HTTP请求。

追踪Spring Boot 2.x应用程序的传入HTTP请求有几种选择。最简单的选项之一是使用CommonsRequestLoggingFilter**,它可以作为一个Bean添加到任何配置类中。请看下面的例子。

package com.example.testrest;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CommonsRequestLoggingFilter;

@Configuration
public class RequestLoggerFilter {
  @Bean
  public CommonsRequestLoggingFilter logFilter() {
    CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
    filter.setIncludeQueryString(true);
    filter.setIncludePayload(true);
    filter.setMaxPayloadLength(10000);
    filter.setIncludeHeaders(false);
    filter.setAfterMessagePrefix("REQUEST DATA : ");
    return filter;
  }
}

你还需要在application.properties文件中为CommonsRequestLoggingFilter设置日志级别。

logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG

或者作为一种选择,在logback.xml中。

<?xml version="1.0" encoding="UTF-8"?><logger name="org.springframework.web.filter.CommonsRequestLoggingFilter">
        
   <level value="DEBUG"/>
    
</logger>

添加后,你就可以在Spring Boot控制台看到传入的请求。

2020-04-09 15:53:06.554 DEBUG 13536 --- [nio-8080-exec-1] o.s.w.f.CommonsRequestLoggingFilter      : Before request [uri=/list] 2020-04-09 15:53:06.630 DEBUG 13536 --- [nio-8080-exec-1] o.s.w.f.CommonsRequestLoggingFilter      : REQUEST DATA : uri=/list]

另一方面,如果你想以流的形式接收HTTP请求,你可以通过扩展HandlerInterceptorAdapter类来实现。

@Component public class CustomHandlerInterceptorAdapter extends HandlerInterceptorAdapter {
  @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    ServletRequest servletRequest = new ContentCachingRequestWrapper(request);
    servletRequest.getParameterMap();
    // Read inputStream and log it
    return true;
  }
}

注意,由于你要处理的是InputStreams,所以你不能读取它们两次!

相关文章

微信公众号

最新文章

更多