我正在使用spring boot工作休息api。我需要使用输入参数记录所有请求(使用方法,例如GET,POST等),请求Url,查询字符串,以及此操作的响应,成功和错误以及状态代码。
我不仅要记录传入的 https 请求/响应,还要记录传出的 https 请求/响应。 我必须用json格式记录请求/响应。 你能告诉我春天的最佳实践吗?请以具体的例子说明吗?
答案 0 :(得分:2)
您可以使用org.springframework.web.filter.CommonsRequestLoggingFilter在请求之前和之后记录查询字符串,标题和正文内容。
// filter will be applied to all paths
@Bean
public CommonsRequestLoggingFilter loggingFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true);
filter.setIncludeHeaders(true);
filter.setIncludePayload(true);
filter.setMaxPayloadLength(1000); // default is 50 bytes
return filter;
}
还有一些其他设置。此外,如果此实现不合适,您可以继承org.springframework.web.filter.AbstractRequestLoggingFilter
并覆盖方法,以满足您的要求。
它使用org.springframework.web.util.ContentCachingRequestWrapper
,允许您多次阅读请求内容。
答案 1 :(得分:0)
通常可以使用servlet filter来完成。一个servlet过滤器“拦截”它上面的请求以及它的响应。您可以从HttpServletRequest和HttpServletResponse访问所需的所有信息,并根据需要进行记录。
简单示例:
public class LoggingFilter implements javax.servlet.Filter {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingFilter.class);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
// log information from the httpServletRequest like url, params, etc
filterChain.doFilter(servletRequest, servletResponse);
// log information regarding the httpServletResponse like status code, etc
}
}
在@ SpringBootApplication-annotated class中注册过滤器:
@Bean
public FilterRegistrationBean loadBalancerHealthCheckHandler() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new LoggingFilter());
registration.addUrlPatterns("/*");
return registration;
}