How to Log HttpRequest and HttpResponse in a file?
Asked Answered
M

2

6

Can anyone explain any techniques to log HttpRequest and HttpResponse in a file.

We are using Spring MVC/Spring Rest.

What we want is to intercept the request before it is processed and log it. Same way intercept the response before it is sent and log it.

Thanks a lot in advance.

Matisse answered 18/9, 2014 at 6:6 Comment(3)
For logging the request you can add one of the subclasses of AbstractRequestLoggingFilter to your filter chain.Cynara
@M. Deinum: why do not you post your answer as answer but as comment?Preglacial
Possible duplicate of How to log properly http requests with Spring MVCMindimindless
C
8

For logging the request Spring has the AbstractRequestLoggingFilter class (well actually one of the subclasses). This can be used to log the incoming request (before and after processing).

Depending on the configuration this can include the payload, client information and full URL (including erquest parameters). All these three are disabled by default but can be enabled through configuration (see the javadoc for more information).

<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>

The filter will now log everything using a Commons Logging logger to a logfile.

Cynara answered 18/9, 2014 at 6:50 Comment(1)
I get no payload with theseShoring
V
6

Accepted answer is already correct, adding annotation based configuration. Add following bean to your config.

@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
    CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
    loggingFilter.setIncludeClientInfo(true);
    loggingFilter.setIncludeQueryString(true);
    loggingFilter.setIncludePayload(true);
    return loggingFilter;
}
Var answered 1/4, 2017 at 9:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.