慕容3067478
1.您可以实现一个从OncePerRequestFilter扩展的Filter类,然后每个请求都会经过您的过滤器。然后你可以在这个类中记录你想要的内容。 @Slf4j @Component public class RequestLoggingFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { log.debug( String.format("FILTERED URL: %s", request.getRequestURI()) ); //continue filtering filterChain.doFilter(request, response); } }2.另一种方法是实现一个继承自HandlerInterceptorAdapter的 Interceptor 类。 @Slf4j @Component public class RequestLoggingHandler extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.debug( String.format("HANDLER(pre) URL: %s", request.getRequestURI()) ); return super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.debug( String.format("HANDLER(post) URL: %s", request.getRequestURI()) ); super.postHandle(request, response, handler, modelAndView); } }但是您必须通过显式配置添加它来启用此拦截器。 @Configuration public class WebApplicationConfiguration implements WebMvcConfigurer { @Setter(onMethod_ = @Autowired) private RequestLoggingHandler requestLogger; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(requestLogger); } }3.另一种方法是使用标准CommonsRequestLoggingFilter。这样你应该使用如下配置来配置它:@Configurationpublic class RequestLoggingFilterConfig { @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; }}然后在 logback.xml 中启用它:<logger name="org.springframework.web.filter.CommonsRequestLoggingFilter"> <level value="DEBUG" /></logger>