任何人都可以解释将HttpRequest和HttpResponse记录在文件中的任何技术。
我们正在使用Spring MVC / Spring Rest。
我们想要的是在处理请求之前将其拦截并记录下来。用同样的方法在发送响应之前先截取响应并将其记录下来。
非常感谢。
为了记录请求,Spring提供了一个AbstractRequestLoggingFilter类(实际上是子类之一)。这可用于记录传入的请求(处理之前和之后)。
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记录器将所有内容记录到日志文件中。
接受的答案已经正确,并添加了基于注释的配置。将以下bean添加到你的配置中。
@Bean public CommonsRequestLoggingFilter requestLoggingFilter() { CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter(); loggingFilter.setIncludeClientInfo(true); loggingFilter.setIncludeQueryString(true); loggingFilter.setIncludePayload(true); return loggingFilter; }