一尘不染

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

spring

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

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

我们想要的是在处理请求之前将其拦截并记录下来。用同样的方法在发送响应之前先截取响应并将其记录下来。

非常感谢。


阅读 700

收藏
2020-04-15

共2个答案

一尘不染

为了记录请求,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>

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

2020-04-15
一尘不染

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

@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
    CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
    loggingFilter.setIncludeClientInfo(true);
    loggingFilter.setIncludeQueryString(true);
    loggingFilter.setIncludePayload(true);
    return loggingFilter;
}
2020-04-15