Spring启动记录Http通信

时间:2017-09-11 16:39:35

标签: spring-boot logback

我正在使用spring boot工作休息api。我需要使用输入参数记录所有请求(使用方法,例如GET,POST等),请求Url,查询字符串,以及此操作的响应,成功和错误以及状态代码。

我不仅要记录传入的 https 请求/响应,还要记录传出的 https 请求/响应。 我必须用json格式记录请求/响应。 你能告诉我春天的最佳实践吗?请以具体的例子说明吗?

2 个答案:

答案 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;
}