如何在文件中记录HttpRequest和HttpResponse?

Har*_*h M 4 spring spring-mvc spring-data spring-data-rest

任何人都可以解释在文件中记录HttpRequest和HttpResponse的任何技术.

我们正在使用Spring MVC/Spring Rest.

我们想要的是在处理请求之前拦截它并记录它.同样在响应之前拦截响应并记录它.

非常感谢提前.

M. *_*num 7

对于记录请求,Spring有AbstractRequestLoggingFilter类(实际上是子类之一).这可用于记录传入的请求(处理之前和之后).

根据配置,这可以包括有效负载,客户端信息和完整URL(包括erquest参数).默认情况下,所有这三个都被禁用,但可以通过配置启用(有关更多信息,请参阅javadoc).

<filter>
    <filter-name>requestLoggingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CommonsRequestLoggingFilter</filter-class>
    <init-param>
        <param-name>includeClientInfo</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>includePayload</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>includeQueryString</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>requestLoggingFilter</filter-name>
    <servlet-name>dispatcherServlet</servlet-name>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

现在,过滤器将使用Commons Logging记录器将所有内容记录到日志文件中.


Yog*_*dke 6

接受的答案已经正确,添加了基于注释的配置.将以下bean添加到您的配置中.

@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
    CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
    loggingFilter.setIncludeClientInfo(true);
    loggingFilter.setIncludeQueryString(true);
    loggingFilter.setIncludePayload(true);
    return loggingFilter;
}
Run Code Online (Sandbox Code Playgroud)