Spring Boot 通过AbstractRequestLoggingFilter记录请求详细信息,常用实现类是CommonsRequestLoggingFilter 。
@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;
}
}
配置logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG开启详细日志记录。
HttpServletRequest和HttpServletResponse对象功能,可拦截和修改请求、响应数据。如ContentCachingRequestWrapper缓存请求输入流,ContentCachingResponseWrapper缓存响应输出流。OncePerRequestFilter,在doFilterInternal方法中使用包装器处理数据。getTargetObject()获取目标对象,currentProxy()获取代理对象,可解决同一类中注解失效问题。getTargetObject()获取目标对象,isJdkDynamicProxy(Object obj)判断是否是 JDK 动态代理,isCglibProxy(Object obj)判断是否是 CGLIB 代理。makeAccessible(Field field)使私有字段可访问,getField(Field field, Object target)获取对象字段值,invokeMethod(Method method, Object target, Object... args)调用对象方法。