Spring Boot 为日志有效载荷提供了内置解决方案。AbstractRequestLoggingFilter 是一个提供日志记录基本功能的过滤器。子类应覆盖 beforeRequest() 和 afterRequest() 方法,以围绕请求执行实际日志记录。Spring Boot 框架提供了三个具体实现类,我们可以用它们来记录传入的请求:
- CommonsRequestLoggingFilter
- Log4jNestedDiagnosticContextFilter (过时,弃用)
- ServletContextRequestLoggingFilter
其中,第一个和第三个差不多,我们这里只介绍第一个的具体使用
@Configuration
public class RequestLoggingConfig {
@Bean
public CommonsRequestLoggingFilter logFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true) ;
filter.setIncludePayload(true) ;
filter.setIncludeHeaders(true) ;
filter.setIncludeClientInfo(true) ;
filter.setAfterMessagePrefix("REQUEST DATA: ") ;
return filter ;
}
}
这里直接通过@Bean的方式配置Filter,你也可以通过@WebFilter方式,有针对的进行记录请求日志。而上面的过滤器将会对所有的请求进行拦截记录。
配置日志
logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG
请求接口
@PostMapping("")
public Article save(@RequestBody Article article) {
return article ;
}
请求上面的接口,控制台日志输出如下:
详细记录了请求的所有内容。还有其它的配置,你可查看具体的API。