Class CustomRequestLog

java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.server.CustomRequestLog
All Implemented Interfaces:
RequestLog, org.eclipse.jetty.util.component.Container, org.eclipse.jetty.util.component.Destroyable, org.eclipse.jetty.util.component.Dumpable, org.eclipse.jetty.util.component.Dumpable.DumpableContainer, org.eclipse.jetty.util.component.LifeCycle

@ManagedObject("Custom format request log") public class CustomRequestLog extends org.eclipse.jetty.util.component.ContainerLifeCycle implements RequestLog
A flexible RequestLog, which produces log strings in a customizable format. The Logger takes a format string where request characteristics can be added using "%" format codes which are replaced by the corresponding value in the log output.

The terms server, client, local and remote are used to refer to the different addresses and ports which can be logged. Server and client refer to the logical addresses which can be modified in the request headers. Where local and remote refer to the physical addresses which may be a proxy between the end-user and the server.

Percent codes are specified in the format %MODIFIERS{PARAM}CODE

 MODIFIERS:
     Optional list of comma separated HTTP status codes which may be preceded by a single "!" to indicate
     negation. If the status code is not in the list the literal string "-" will be logged instead of
     the resulting value from the percent code.
 {PARAM}:
     Parameter string which may be optional depending on the percent code used.
 CODE:
     A one or two character code specified by the CustomRequestLog table of format codes.
 
Format Codes
Format String Description
%% The percent sign.
%{format}a Address or Hostname. Valid formats are {server, client, local, remote} Optional format parameter which will be server by default.
Where server and client are the logical addresses which can be modified in the request headers, while local and remote are the physical addresses so may be a proxy between the end-user and the server.
%{format}p Port. Valid formats are {server, client, local, remote} Optional format parameter which will be server by default.
Where server and client are the logical ports which can be modified in the request headers, while local and remote are the physical ports so may be to a proxy between the end-user and the server.
%{CLF}I Size of request in bytes, excluding HTTP headers. Optional parameter with value of "CLF" to use CLF format, i.e. a '-' rather than a 0 when no bytes are sent.
%{CLF}O Size of response in bytes, excluding HTTP headers. Optional parameter with value of "CLF" to use CLF format, i.e. a '-' rather than a 0 when no bytes are sent.
%{CLF}S Bytes transferred (received and sent). This is the combination of %I and %O. Optional parameter with value of "CLF" to use CLF format, i.e. a '-' rather than a 0 when no bytes are sent.
%{VARNAME}C The contents of cookie VARNAME in the request sent to the server. Only version 0 cookies are fully supported. Optional VARNAME parameter, without this parameter %C will log all cookies from the request.
%D The time taken to serve the request, in microseconds.
%{VARNAME}e The contents of the environment variable VARNAME.
%f Filename.
%H The name and version of the request protocol, such as "HTTP/1.1".
%{VARNAME}i The contents of VARNAME: header line(s) in the request sent to the server.
%k Number of keepalive requests handled on this connection. Interesting if KeepAlive is being used, so that, for example, a '1' means the first keepalive request after the initial one, '2' the second, etc...; otherwise this is always 0 (indicating the initial request).
%m The request method.
%{VARNAME}o The contents of VARNAME: header line(s) in the response.
%q The query string (prepended with a ? if a query string exists, otherwise an empty string).
%r First line of request.
%R The handler generating the response (if any).
%s Response status.
%{format|timeZone|locale}t The time that the request was received. Optional parameter in one of the following formats {format}, {format|timeZone} or {format|timeZone|locale}.

 Format Parameter: (default format [18/Sep/2011:19:18:28 -0400] where the last number indicates the timezone offset from GMT.)
     Must be in a format supported by DateCache

 TimeZone Parameter:
     Default timeZone GMT
     Must be in a format supported by TimeZone.getTimeZone(String)

 Locale Parameter:
     Default locale Locale.getDefault()
     Must be in a format supported by Locale.forLanguageTag(String)
%T The time taken to serve the request, in seconds.
%{UNIT}T The time taken to serve the request, in a time unit given by UNIT. Valid units are ms for milliseconds, us for microseconds, and s for seconds. Using s gives the same result as %T without any format; using us gives the same result as %D.
%{d}u Remote user if the request was authenticated with servlet authentication. May be bogus if return status (%s) is 401 (unauthorized). Optional parameter d, with this parameter deferred authentication will also be checked, this is equivalent to HttpServletRequest.getRemoteUser().
%U The URL path requested, not including any query string.
%X Connection status when response is completed:
 X = Connection aborted before the response completed.
 + = Connection may be kept alive after the response is sent.
 - = Connection will be closed after the response is sent.
%{VARNAME}^ti The contents of VARNAME: trailer line(s) in the request sent to the server.
%{VARNAME}^to The contents of VARNAME: trailer line(s) in the response sent from the server.
  • Nested Class Summary

    Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

    org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

    org.eclipse.jetty.util.component.LifeCycle.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.server.RequestLog

    RequestLog.Collection, RequestLog.Writer
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
     
    static final String
     
    protected static final org.slf4j.Logger
     
    static final String
     

    Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    FAILED, STARTED, STARTING, STOPPED, STOPPING

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor
    Description
     
     
     
    CustomRequestLog(RequestLog.Writer writer, String formatString)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    Set up request logging and open log file.
    protected static String
    getAuthentication(Request request, boolean checkDeferred)
    Extract the user authentication
    Retrieve the format string.
    Retrieve the request paths that will not be logged.
     
    void
    log(Request request, Response response)
    Writes the request and response information to the output stream.
    void
    This allows you to set a custom filter to decide whether to log a request or omit it from the request log.
    void
    setIgnorePaths(String[] ignorePaths)
    Set request paths that will not be logged.

    Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

    addBean, addBean, addEventListener, addManaged, contains, destroy, doStop, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans

    Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toString

    Methods inherited from class java.lang.Object

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

    Methods inherited from interface org.eclipse.jetty.util.component.Container

    getCachedBeans, getEventListeners

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

    dumpSelf

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    isDumpable
  • Field Details

  • Constructor Details

    • CustomRequestLog

      public CustomRequestLog()
    • CustomRequestLog

      public CustomRequestLog(String file)
    • CustomRequestLog

      public CustomRequestLog(String file, String format)
    • CustomRequestLog

      public CustomRequestLog(RequestLog.Writer writer, String formatString)
  • Method Details

    • setFilter

      public void setFilter(BiPredicate<Request,Response> filter)
      This allows you to set a custom filter to decide whether to log a request or omit it from the request log. This filter is evaluated after path filtering is applied from setIgnorePaths(String[]).
      Parameters:
      filter - - a BiPredicate which returns true if this request should be logged.
    • getWriter

      @ManagedAttribute("The RequestLogWriter") public RequestLog.Writer getWriter()
    • log

      public void log(Request request, Response response)
      Writes the request and response information to the output stream.
      Specified by:
      log in interface RequestLog
      Parameters:
      request - The request to log.
      response - The response to log. Note that for some requests the response instance may not have been fully populated (Eg 400 bad request responses are sent without a servlet response object). Thus for basic log information it is best to consult Response.getCommittedMetaData() and Response.getHttpChannel() directly.
      See Also:
    • getAuthentication

      protected static String getAuthentication(Request request, boolean checkDeferred)
      Extract the user authentication
      Parameters:
      request - The request to extract from
      checkDeferred - Whether to check for deferred authentication
      Returns:
      The string to log for authenticated user.
    • setIgnorePaths

      public void setIgnorePaths(String[] ignorePaths)
      Set request paths that will not be logged.
      Parameters:
      ignorePaths - array of request paths
    • getIgnorePaths

      public String[] getIgnorePaths()
      Retrieve the request paths that will not be logged.
      Returns:
      array of request paths
    • getFormatString

      @ManagedAttribute("format string") public String getFormatString()
      Retrieve the format string.
      Returns:
      the format string
    • doStart

      protected void doStart() throws Exception
      Set up request logging and open log file.
      Overrides:
      doStart in class org.eclipse.jetty.util.component.ContainerLifeCycle
      Throws:
      Exception
      See Also:
      • AbstractLifeCycle.doStart()