SpringBoot记录HTTP请求日志
https://juejin.cn/post/6844903666588057614
自定义HttpTraceFilter
在HttpTraceFilter继承了OncePerRequestFilter,我们可以仿照这个过滤器,定义自己的过滤器去继承OncePerRequestFilter,在doFilterInternal这个方法中获取到HttpServletRequest,HttpServletResponse,这样就可以获取到对应的请求参数和返回参数了。
@Slf4jpublic class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered {private static final String NEED_TRACE_PATH_PREFIX = "/api";private static final String IGNORE_CONTENT_TYPE = "multipart/form-data";private final MeterRegistry registry;public HttpTraceLogFilter(MeterRegistry registry) {this.registry = registry;}@Overridepublic int getOrder() {return Ordered.LOWEST_PRECEDENCE - 10;}... ...}
请求响应日志的常用手段
https://www.modb.pro/db/101981
CommonsRequestLoggingFilter
Spring Web模块还提供了一个过滤器CommonsRequestLoggingFilter,它可以对请求的细节进行日志输出。
配置起来也比较简单:
@BeanCommonsRequestLoggingFilter loggingFilter(){CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();// 记录 客户端 IP信息loggingFilter.setIncludeClientInfo(true);// 记录请求头loggingFilter.setIncludeHeaders(true);// 如果记录请求头的话,可以指定哪些记录,哪些不记录// loggingFilter.setHeaderPredicate();// 记录 请求体 特别是POST请求的body参数loggingFilter.setIncludePayload(true);// 请求体的大小限制 默认50loggingFilter.setMaxPayloadLength(10000);//记录请求路径中的query参数loggingFilter.setIncludeQueryString(true);return loggingFilter;}
而且必须开启对CommonsRequestLoggingFilter的debug日志:
logging:level:org.springframework.web.filter.CommonsRequestLoggingFilter: debug
自定义DispatcherServlet 实现请求日志记录
https://segmentfault.com/a/1190000018535456
Spring 使用了 DispatcherServlet 来拦截并分发请求,我们只要自己实现一个 DispatcherServlet 并在其中对请求和响应做处理打印到日志中即可。
我们实现一个自己的分发 Servlet ,它继承于 DispatcherServlet,我们实现自己的 doDispatch(HttpServletRequest request, HttpServletResponse response) 方法。
