在Spring Boot中使用CommonsRequestLoggingFilter记录传入的请求


Spring框架带有一个开箱即用的功能:可以记录您的请求,我们只需要配置它,即可随时可用。Spring 自带 AbstractRequestLoggingFilter,在处理请求之前和之后执行日志记录操作。
在我们进入实现细节之前,这个过滤器需要一个子类来覆盖beforeRequest(HttpServletRequest, String)和afterRequest(HttpServletRequest, String)方法来执行围绕请求的实际日志记录。
Spring 提供了以下 2 个实现 AbstractRequestLoggingFilter

  1. CommonsRequestLoggingFilter
  2. ServletContextRequestLoggingFilter

ServletContextRequestLoggingFilter 将请求 URI(以及可选的查询字符串)写入日志的简单请求日志过滤器ServletContext。我们将CommonsRequestLoggingFilter在这篇文章中讨论。
Spring Boot 是创建和运行由 Spring 驱动的应用程序的新方法,我们CommonsRequestLoggingFilter只需将其注册为应用程序的 bean即可启用。
@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
    CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
    loggingFilter.setIncludeClientInfo(true);
    loggingFilter.setIncludeQueryString(true);
    loggingFilter.setIncludePayload(true);
    loggingFilter.setIncludeHeaders(false);
    return loggingFilter;
}

除了上面的配置,我们还需要确保通过application.properties或 通过CommonsRequestLoggingFilter将日志级别设置为DEBUG
logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG

一旦这些配置就位,您应该能够在控制台中看到类似的输出:
2017-10-25 19:52:02.708 DEBUG 70034 --- [io-10070-exec-4] o.s.w.f.CommonsRequestLoggingFilter      : Before request [uri=/demo/greeting;client=0:0:0:0:0:0:0:1]
2017-10-25 19:52:02.791 DEBUG 70034 --- [io-10070-exec-4] o.s.w.f.CommonsRequestLoggingFilter      : After request [uri=/demo/greeting;client=0:0:0:0:0:0:0:1]