org.springframework.web.filter

## Class AbstractRequestLoggingFilter

- java.lang.Object
- - org.springframework.web.filter.GenericFilterBean
  - - org.springframework.web.filter.OncePerRequestFilter
    - - org.springframework.web.filter.AbstractRequestLoggingFilter

- All Implemented Interfaces:
    Filter, Aware, BeanNameAware, DisposableBean, InitializingBean, EnvironmentAware, ServletContextAware
  Direct Known Subclasses:
    CommonsRequestLoggingFilter, Log4jNestedDiagnosticContextFilter, ServletContextRequestLoggingFilter

      public abstract class AbstractRequestLoggingFilter
      extends OncePerRequestFilter

  Base class for `Filter`s that perform logging operations before and after a request is processed.

  Subclasses should override the `beforeRequest(HttpServletRequest, String)` and `afterRequest(HttpServletRequest, String)` methods to perform the actual logging around the request.

  Subclasses are passed the message to write to the log in the `beforeRequest` and `afterRequest` methods. By default, only the URI of the request is logged. However, setting the `includeQueryString` property to `true` will cause the query string of the request to be included also. The payload (body) of the request can be logged via the `includePayload` flag. Note that this will only log that which is read, which might not be the entire payload.

  Prefixes and suffixes for the before and after messages can be configured using the `beforeMessagePrefix`, `afterMessagePrefix`, `beforeMessageSuffix` and `afterMessageSuffix` properties,

  Since:
    1.2.5
  Author:
    Rob Harrop, Juergen Hoeller, Rossen Stoyanchev
  See Also:
    `beforeRequest(javax.servlet.http.HttpServletRequest, java.lang.String)`, `afterRequest(javax.servlet.http.HttpServletRequest, java.lang.String)`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `DEFAULT_AFTER_MESSAGE_PREFIX`
    `static String` | `DEFAULT_AFTER_MESSAGE_SUFFIX`
    `static String` | `DEFAULT_BEFORE_MESSAGE_PREFIX`
    `static String` | `DEFAULT_BEFORE_MESSAGE_SUFFIX`

    - ### Fields inherited from class org.springframework.web.filter.OncePerRequestFilter

      `ALREADY_FILTERED_SUFFIX`

    - ### Fields inherited from class org.springframework.web.filter.GenericFilterBean

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractRequestLoggingFilter()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract void` | `afterRequest(HttpServletRequest request, String message)` Concrete subclasses should implement this method to write a log message after the request is processed.
    `protected abstract void` | `beforeRequest(HttpServletRequest request, String message)` Concrete subclasses should implement this method to write a log message before the request is processed.
    `protected String` | `createMessage(HttpServletRequest request, String prefix, String suffix)` Create a log message for the given request, prefix and suffix.
    `protected void` | `doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)` Forwards the request to the next filter in the chain and delegates down to the subclasses to perform the actual request logging both before and after the request is processed.
    `protected int` | `getMaxPayloadLength()` Return the maximum length of the payload body to be included in the log message.
    `protected boolean` | `isIncludeClientInfo()` Return whether or not the client address and session id should be included in the log message.
    `protected boolean` | `isIncludePayload()` Return whether or not the request payload (body) should be included in the log message.
    `protected boolean` | `isIncludeQueryString()` Return whether or not the query string should be included in the log message.
    `void` | `setAfterMessagePrefix(String afterMessagePrefix)` Set the value that should be prepended to the log message written after a request is processed.
    `void` | `setAfterMessageSuffix(String afterMessageSuffix)` Set the value that should be appended to the log message written after a request is processed.
    `void` | `setBeforeMessagePrefix(String beforeMessagePrefix)` Set the value that should be prepended to the log message written before a request is processed.
    `void` | `setBeforeMessageSuffix(String beforeMessageSuffix)` Set the value that should be apppended to the log message written before a request is processed.
    `void` | `setIncludeClientInfo(boolean includeClientInfo)` Set whether or not the client address and session id should be included in the log message.
    `void` | `setIncludePayload(boolean includePayload)` Set whether or not the request payload (body) should be included in the log message.
    `void` | `setIncludeQueryString(boolean includeQueryString)` Set whether or not the query string should be included in the log message.
    `void` | `setMaxPayloadLength(int maxPayloadLength)` Sets the maximum length of the payload body to be included in the log message.
    `protected boolean` | `shouldNotFilterAsyncDispatch()` The default value is "false" so that the filter may log a "before" message at the start of request processing and an "after" message at the end from when the last asynchronously dispatched thread is exiting.

    - ### Methods inherited from class org.springframework.web.filter.OncePerRequestFilter

      `doFilter, getAlreadyFilteredAttributeName, isAsyncDispatch, isAsyncStarted, shouldNotFilter, shouldNotFilterErrorDispatch`

    - ### Methods inherited from class org.springframework.web.filter.GenericFilterBean

      `addRequiredProperty, afterPropertiesSet, destroy, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### DEFAULT_BEFORE_MESSAGE_PREFIX

          public static final String DEFAULT_BEFORE_MESSAGE_PREFIX

      See Also:
        Constant Field Values

    - #### DEFAULT_BEFORE_MESSAGE_SUFFIX

          public static final String DEFAULT_BEFORE_MESSAGE_SUFFIX

      See Also:
        Constant Field Values

    - #### DEFAULT_AFTER_MESSAGE_PREFIX

          public static final String DEFAULT_AFTER_MESSAGE_PREFIX

      See Also:
        Constant Field Values

    - #### DEFAULT_AFTER_MESSAGE_SUFFIX

          public static final String DEFAULT_AFTER_MESSAGE_SUFFIX

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### AbstractRequestLoggingFilter

          public AbstractRequestLoggingFilter()

  - ### Method Detail

    - #### setIncludeQueryString

          public void setIncludeQueryString(boolean includeQueryString)

      Set whether or not the query string should be included in the log message.

      Should be configured using an `<init-param>` for parameter name "includeQueryString" in the filter definition in `web.xml`.

    - #### isIncludeQueryString

          protected boolean isIncludeQueryString()

      Return whether or not the query string should be included in the log message.

    - #### setIncludeClientInfo

          public void setIncludeClientInfo(boolean includeClientInfo)

      Set whether or not the client address and session id should be included in the log message.

      Should be configured using an `<init-param>` for parameter name "includeClientInfo" in the filter definition in `web.xml`.

    - #### isIncludeClientInfo

          protected boolean isIncludeClientInfo()

      Return whether or not the client address and session id should be included in the log message.

    - #### setIncludePayload

          public void setIncludePayload(boolean includePayload)

      Set whether or not the request payload (body) should be included in the log message.

      Should be configured using an `<init-param>` for parameter name "includePayload" in the filter definition in `web.xml`.

    - #### isIncludePayload

          protected boolean isIncludePayload()

      Return whether or not the request payload (body) should be included in the log message.

    - #### setMaxPayloadLength

          public void setMaxPayloadLength(int maxPayloadLength)

      Sets the maximum length of the payload body to be included in the log message. Default is 50 characters.

    - #### getMaxPayloadLength

          protected int getMaxPayloadLength()

      Return the maximum length of the payload body to be included in the log message.

    - #### setBeforeMessagePrefix

          public void setBeforeMessagePrefix(String beforeMessagePrefix)

      Set the value that should be prepended to the log message written before a request is processed.

    - #### setBeforeMessageSuffix

          public void setBeforeMessageSuffix(String beforeMessageSuffix)

      Set the value that should be apppended to the log message written before a request is processed.

    - #### setAfterMessagePrefix

          public void setAfterMessagePrefix(String afterMessagePrefix)

      Set the value that should be prepended to the log message written after a request is processed.

    - #### setAfterMessageSuffix

          public void setAfterMessageSuffix(String afterMessageSuffix)

      Set the value that should be appended to the log message written after a request is processed.

    - #### shouldNotFilterAsyncDispatch

          protected boolean shouldNotFilterAsyncDispatch()

      The default value is "false" so that the filter may log a "before" message at the start of request processing and an "after" message at the end from when the last asynchronously dispatched thread is exiting.
      Overrides:
        `shouldNotFilterAsyncDispatch` in class `OncePerRequestFilter`

    - #### doFilterInternal

          protected void doFilterInternal(HttpServletRequest request,
                              HttpServletResponse response,
                              FilterChain filterChain)
                                   throws ServletException,
                                          IOException

      Forwards the request to the next filter in the chain and delegates down to the subclasses to perform the actual request logging both before and after the request is processed.
      Specified by:
        `doFilterInternal` in class `OncePerRequestFilter`
      Throws:
        `ServletException`
        `IOException`
      See Also:
        `beforeRequest(javax.servlet.http.HttpServletRequest, java.lang.String)`, `afterRequest(javax.servlet.http.HttpServletRequest, java.lang.String)`

    - #### createMessage

          protected String createMessage(HttpServletRequest request,
                             String prefix,
                             String suffix)

      Create a log message for the given request, prefix and suffix.

      If `includeQueryString` is `true` then the inner part of the log message will take the form `request_uri?query_string` otherwise the message will simply be of the form `request_uri`.

      The final message is composed of the inner part as described and the supplied prefix and suffix.

    - #### beforeRequest

          protected abstract void beforeRequest(HttpServletRequest request,
                           String message)

      Concrete subclasses should implement this method to write a log message before the request is processed.
      Parameters:
        `request` - current HTTP request
        `message` - the message to log

    - #### afterRequest

          protected abstract void afterRequest(HttpServletRequest request,
                          String message)

      Concrete subclasses should implement this method to write a log message after the request is processed.
      Parameters:
        `request` - current HTTP request
        `message` - the message to log