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, Container, Destroyable, Dumpable, Dumpable.DumpableContainer, LifeCycle
@ManagedObject("Custom format request log")
public class CustomRequestLog
extends 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 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 request protocol. |
| %{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
|
| %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 ClassesNested classes/interfaces inherited from class AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListenerNested classes/interfaces inherited from interface Container
Container.InheritedListener, Container.ListenerNested classes/interfaces inherited from interface Dumpable
Dumpable.DumpableContainerNested classes/interfaces inherited from interface LifeCycle
LifeCycle.ListenerNested classes/interfaces inherited from interface RequestLog
RequestLog.Collection, RequestLog.Writer -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final ThreadLocal<StringBuilder> private final Stringprivate PathMappings<String> private String[]private final MethodHandleprivate final RequestLog.Writerstatic final Stringstatic final Stringprotected static final Loggerstatic final String -
Constructor Summary
ConstructorsConstructorDescriptionCustomRequestLog(String file) CustomRequestLog(String file, String format) CustomRequestLog(RequestLog.Writer writer, String formatString) -
Method Summary
Modifier and TypeMethodDescriptionprivate static voidappend(StringBuilder buf, String s) private static voidappend(String s, StringBuilder buf) protected voiddoStart()Set up request logging and open log file.protected static StringgetAuthentication(Request request, boolean checkDeferred) Extract the user authenticationRetrieve the format string.String[]Retrieve the request paths that will not be logged.private MethodHandlegetLogHandle(String formatString) private static List<CustomRequestLog.Token> voidWrites the request and response information to the output stream.private static voidlogBytesReceived(StringBuilder b, Request request, Response response) private static voidlogBytesReceivedCLF(StringBuilder b, Request request, Response response) private static voidlogBytesSent(StringBuilder b, Request request, Response response) private static voidlogBytesSentCLF(StringBuilder b, Request request, Response response) private static voidlogBytesTransferred(StringBuilder b, Request request, Response response) private static voidlogBytesTransferredCLF(StringBuilder b, Request request, Response response) private static voidlogClientHost(StringBuilder b, Request request, Response response) private static voidlogClientPort(StringBuilder b, Request request, Response response) private static voidlogConnectionStatus(StringBuilder b, Request request, Response response) private static voidlogEnvironmentVar(String arg, StringBuilder b, Request request, Response response) private static voidlogFilename(StringBuilder b, Request request, Response response) private static voidlogKeepAliveRequests(StringBuilder b, Request request, Response response) private static voidlogLatencyMicroseconds(StringBuilder b, Request request, Response response) private static voidlogLatencyMilliseconds(StringBuilder b, Request request, Response response) private static voidlogLatencySeconds(StringBuilder b, Request request, Response response) private static voidlogLocalHost(StringBuilder b, Request request, Response response) private static voidlogLocalPort(StringBuilder b, Request request, Response response) private static voidlogNothing(StringBuilder b, Request request, Response response) private static voidlogQueryString(StringBuilder b, Request request, Response response) private static voidlogRemoteHost(StringBuilder b, Request request, Response response) private static voidlogRemotePort(StringBuilder b, Request request, Response response) private static voidlogRequestAuthentication(StringBuilder b, Request request, Response response) private static voidlogRequestAuthenticationWithDeferred(StringBuilder b, Request request, Response response) private static voidlogRequestCookie(String arg, StringBuilder b, Request request, Response response) private static voidlogRequestCookies(StringBuilder b, Request request, Response response) private static voidlogRequestFirstLine(StringBuilder b, Request request, Response response) private static voidlogRequestHandler(StringBuilder b, Request request, Response response) private static voidlogRequestHeader(String arg, StringBuilder b, Request request, Response response) private static voidlogRequestMethod(StringBuilder b, Request request, Response response) private static voidlogRequestProtocol(StringBuilder b, Request request, Response response) private static voidlogRequestTime(DateCache dateCache, StringBuilder b, Request request, Response response) private static voidlogRequestTrailer(String arg, StringBuilder b, Request request, Response response) private static voidlogResponseHeader(String arg, StringBuilder b, Request request, Response response) private static voidlogResponseSize(StringBuilder b, Request request, Response response) private static voidlogResponseSizeCLF(StringBuilder b, Request request, Response response) private static voidlogResponseStatus(StringBuilder b, Request request, Response response) private static voidlogResponseTrailer(String arg, StringBuilder b, Request request, Response response) private static voidlogServerHost(StringBuilder b, Request request, Response response) private static voidlogServerPort(StringBuilder b, Request request, Response response) private static voidlogUrlRequestPath(StringBuilder b, Request request, Response response) private static booleanmodify(List<Integer> modifiers, Boolean negated, StringBuilder b, Request request, Response response) voidsetIgnorePaths(String[] ignorePaths) Set request paths that will not be logged.private MethodHandleupdateLogHandle(MethodHandle logHandle, MethodHandle append, MethodHandles.Lookup lookup, String code, String arg, List<Integer> modifiers, boolean negated) private MethodHandleupdateLogHandle(MethodHandle logHandle, MethodHandle append, String literal) Methods inherited from class ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, doStop, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeansMethods inherited from class AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop, toStringMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Dumpable.DumpableContainer
isDumpable
-
Field Details
-
LOG
-
DEFAULT_DATE_FORMAT
- See Also:
-
NCSA_FORMAT
- See Also:
-
EXTENDED_NCSA_FORMAT
- See Also:
-
_buffers
-
_requestLogWriter
-
_logHandle
-
_formatString
-
_ignorePathMap
-
_ignorePaths
-
-
Constructor Details
-
CustomRequestLog
-
CustomRequestLog
-
CustomRequestLog
-
-
Method Details
-
getWriter
-
log
Writes the request and response information to the output stream.- Specified by:
login interfaceRequestLog- 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 consultResponse.getCommittedMetaData()andResponse.getHttpChannel()directly.- See Also:
-
getAuthentication
-
setIgnorePaths
Set request paths that will not be logged.- Parameters:
ignorePaths- array of request paths
-
getIgnorePaths
Retrieve the request paths that will not be logged.- Returns:
- array of request paths
-
getFormatString
Retrieve the format string.- Returns:
- the format string
-
doStart
Set up request logging and open log file.- Overrides:
doStartin classContainerLifeCycle- Throws:
Exception- See Also:
-
append
-
append
-
getLogHandle
private MethodHandle getLogHandle(String formatString) throws NoSuchMethodException, IllegalAccessException -
getTokens
-
modify
-
updateLogHandle
-
updateLogHandle
private MethodHandle updateLogHandle(MethodHandle logHandle, MethodHandle append, MethodHandles.Lookup lookup, String code, String arg, List<Integer> modifiers, boolean negated) throws NoSuchMethodException, IllegalAccessException -
logNothing
-
logServerHost
-
logClientHost
-
logLocalHost
-
logRemoteHost
-
logServerPort
-
logClientPort
-
logLocalPort
-
logRemotePort
-
logResponseSize
-
logResponseSizeCLF
-
logBytesSent
-
logBytesSentCLF
-
logBytesReceived
-
logBytesReceivedCLF
-
logBytesTransferred
-
logBytesTransferredCLF
-
logRequestCookie
private static void logRequestCookie(String arg, StringBuilder b, Request request, Response response) -
logRequestCookies
-
logEnvironmentVar
private static void logEnvironmentVar(String arg, StringBuilder b, Request request, Response response) -
logFilename
-
logRequestProtocol
-
logRequestHeader
private static void logRequestHeader(String arg, StringBuilder b, Request request, Response response) -
logKeepAliveRequests
-
logRequestMethod
-
logResponseHeader
private static void logResponseHeader(String arg, StringBuilder b, Request request, Response response) -
logQueryString
-
logRequestFirstLine
-
logRequestHandler
-
logResponseStatus
-
logRequestTime
private static void logRequestTime(DateCache dateCache, StringBuilder b, Request request, Response response) -
logLatencyMicroseconds
-
logLatencyMilliseconds
-
logLatencySeconds
-
logRequestAuthentication
-
logRequestAuthenticationWithDeferred
private static void logRequestAuthenticationWithDeferred(StringBuilder b, Request request, Response response) -
logUrlRequestPath
-
logConnectionStatus
-
logRequestTrailer
private static void logRequestTrailer(String arg, StringBuilder b, Request request, Response response) -
logResponseTrailer
private static void logResponseTrailer(String arg, StringBuilder b, Request request, Response response)
-