org.springframework.web.filter
Class AbstractRequestLoggingFilter

java.lang.Object
  extended by org.springframework.web.filter.GenericFilterBean
      extended by org.springframework.web.filter.OncePerRequestFilter
          extended by 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 Filters 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
See Also:
beforeRequest(javax.servlet.http.HttpServletRequest, java.lang.String), afterRequest(javax.servlet.http.HttpServletRequest, java.lang.String)

Field Summary
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
AbstractRequestLoggingFilter()
           
 
Method Summary
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.
 
Methods inherited from class org.springframework.web.filter.OncePerRequestFilter
doFilter, getAlreadyFilteredAttributeName, shouldNotFilter
 
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.


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