Class ExtendedAccessLogValve
- java.lang.Object
-
- org.apache.catalina.util.LifecycleBase
-
- org.apache.catalina.util.LifecycleMBeanBase
-
- org.apache.catalina.valves.ValveBase
-
- org.apache.catalina.valves.AbstractAccessLogValve
-
- org.apache.catalina.valves.AccessLogValve
-
- org.apache.catalina.valves.ExtendedAccessLogValve
-
- All Implemented Interfaces:
javax.management.MBeanRegistration
,AccessLog
,Contained
,JmxEnabled
,Lifecycle
,Valve
public class ExtendedAccessLogValve extends AccessLogValve
An implementation of the W3c Extended Log File Format. See http://www.w3.org/TR/WD-logfile.html for more information about the format. The following fields are supported:c-dns
: Client hostname (or ip address ifenableLookups
for the connector is false)c-ip
: Client ip addressbytes
: bytes servedcs-method
: request methodcs-uri
: The full uri requestedcs-uri-query
: The query stringcs-uri-stem
: The uri without query stringdate
: The date in yyyy-mm-dd format for GMTs-dns
: The server dns entrys-ip
: The server ip addresscs(XXX)
: The value of header XXX from client to serversc(XXX)
: The value of header XXX from server to clientsc-status
: The status codetime
: Time the request was servedtime-taken
: Time (in seconds) taken to serve the requestx-threadname
: Current request thread name (can compare later with stacktraces)x-A(XXX)
: Pull XXX attribute from the servlet contextx-C(XXX)
: Pull the cookie(s) of the name XXXx-O(XXX)
: Pull the all response header values XXXx-R(XXX)
: Pull XXX attribute from the servlet requestx-S(XXX)
: Pull XXX attribute from the sessionx-P(...)
: Call request.getParameter(...) and URLencode it. Helpful to capture certain POST parameters.- For any of the x-H(...) the following method will be called from the HttpServletRequest object
x-H(authType)
: getAuthTypex-H(characterEncoding)
: getCharacterEncodingx-H(contentLength)
: getContentLengthx-H(locale)
: getLocalex-H(protocol)
: getProtocolx-H(remoteUser)
: getRemoteUserx-H(requestedSessionId)
: getRequestedSessionIdx-H(requestedSessionIdFromCookie)
: isRequestedSessionIdFromCookiex-H(requestedSessionIdValid)
: isRequestedSessionIdValidx-H(scheme)
: getSchemex-H(secure)
: isSecure
Log rotation can be on or off. This is dictated by the
rotatable
property.For UNIX users, another field called
checkExists
is also available. If set to true, the log file's existence will be checked before each logging. This way an external log rotator can move the file somewhere and Tomcat will start with a new file.For JMX junkies, a public method called
rotate
has been made available to allow you to tell this instance to move the existing log file to somewhere else and start writing a new log file.Conditional logging is also supported. This can be done with the
condition
property. If the value returned from ServletRequest.getAttribute(condition) yields a non-null value, the logging will be skipped.For extended attributes coming from a getAttribute() call, it is you responsibility to ensure there are no newline or control characters.
- Author:
- Peter Rossbach
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
ExtendedAccessLogValve.CookieElement
protected static class
ExtendedAccessLogValve.DateElement
protected static class
ExtendedAccessLogValve.PatternTokenizer
protected static class
ExtendedAccessLogValve.RequestAttributeElement
protected static class
ExtendedAccessLogValve.RequestHeaderElement
protected static class
ExtendedAccessLogValve.RequestParameterElement
protected static class
ExtendedAccessLogValve.ResponseAllHeaderElement
write a specific response header - x-O(xxx)protected static class
ExtendedAccessLogValve.ResponseHeaderElement
protected static class
ExtendedAccessLogValve.ServletContextElement
protected static class
ExtendedAccessLogValve.SessionAttributeElement
protected static class
ExtendedAccessLogValve.TimeElement
-
Nested classes/interfaces inherited from class org.apache.catalina.valves.AbstractAccessLogValve
AbstractAccessLogValve.AccessLogElement, AbstractAccessLogValve.ByteSentElement, AbstractAccessLogValve.CachedElement, AbstractAccessLogValve.ConnectionStatusElement, AbstractAccessLogValve.DateAndTimeElement, AbstractAccessLogValve.DateFormatCache, AbstractAccessLogValve.ElapsedTimeElement, AbstractAccessLogValve.FirstByteTimeElement, AbstractAccessLogValve.HeaderElement, AbstractAccessLogValve.HostElement, AbstractAccessLogValve.HttpStatusCodeElement, AbstractAccessLogValve.LocalAddrElement, AbstractAccessLogValve.LocalServerNameElement, AbstractAccessLogValve.LogicalUserNameElement, AbstractAccessLogValve.MethodElement, AbstractAccessLogValve.PortElement, AbstractAccessLogValve.ProtocolElement, AbstractAccessLogValve.QueryElement, AbstractAccessLogValve.RemoteAddrElement, AbstractAccessLogValve.RequestElement, AbstractAccessLogValve.RequestURIElement, AbstractAccessLogValve.SessionIdElement, AbstractAccessLogValve.StringElement, AbstractAccessLogValve.ThreadNameElement, AbstractAccessLogValve.UserElement
-
Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle
Lifecycle.SingleUse
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.String
extendedAccessLogInfo
The descriptive information about this implementation.-
Fields inherited from class org.apache.catalina.valves.AccessLogValve
currentLogFile, encoding, fileDateFormat, fileDateFormatter, prefix, renameOnRotate, rotatable, suffix, writer
-
Fields inherited from class org.apache.catalina.valves.AbstractAccessLogValve
cachedElements, condition, conditionIf, enabled, locale, localeName, logElements, pattern, requestAttributesEnabled
-
Fields inherited from class org.apache.catalina.valves.ValveBase
asyncSupported, container, containerLog, next, sm
-
Fields inherited from interface org.apache.catalina.AccessLog
PROTOCOL_ATTRIBUTE, REMOTE_ADDR_ATTRIBUTE, REMOTE_HOST_ATTRIBUTE, SERVER_NAME_ATTRIBUTE, SERVER_PORT_ATTRIBUTE
-
Fields inherited from interface org.apache.catalina.Lifecycle
AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT
-
-
Constructor Summary
Constructors Constructor Description ExtendedAccessLogValve()
-
Method Summary
-
Methods inherited from class org.apache.catalina.valves.AccessLogValve
backgroundProcess, getDirectory, getEncoding, getFileDateFormat, getMaxDays, getPrefix, getSuffix, isBuffered, isCheckExists, isRenameOnRotate, isRotatable, log, rotate, rotate, setBuffered, setCheckExists, setDirectory, setEncoding, setFileDateFormat, setMaxDays, setPrefix, setRenameOnRotate, setRotatable, setSuffix, startInternal, stopInternal
-
Methods inherited from class org.apache.catalina.valves.AbstractAccessLogValve
createAccessLogElement, createAccessLogElement, escapeAndAppend, findLocale, getCondition, getConditionIf, getConditionUnless, getEnabled, getIpv6Canonical, getLocale, getMaxLogMessageBufferSize, getPattern, getRequestAttributesEnabled, invoke, log, setCondition, setConditionIf, setConditionUnless, setEnabled, setIpv6Canonical, setLocale, setMaxLogMessageBufferSize, setPattern, setRequestAttributesEnabled
-
Methods inherited from class org.apache.catalina.valves.ValveBase
getContainer, getDomainInternal, getNext, getObjectNameKeyProperties, initInternal, isAsyncSupported, setAsyncSupported, setContainer, setNext, toString
-
Methods inherited from class org.apache.catalina.util.LifecycleMBeanBase
destroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister
-
Methods inherited from class org.apache.catalina.util.LifecycleBase
addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
-
-
-
-
Field Detail
-
extendedAccessLogInfo
protected static final java.lang.String extendedAccessLogInfo
The descriptive information about this implementation.- See Also:
- Constant Field Values
-
-
Method Detail
-
open
protected void open()
Open the new log file for the date specified bydateStamp
.- Overrides:
open
in classAccessLogValve
-
createLogElements
protected AbstractAccessLogValve.AccessLogElement[] createLogElements()
Description copied from class:AbstractAccessLogValve
Parse pattern string and create the array of AccessLogElement.- Overrides:
createLogElements
in classAbstractAccessLogValve
- Returns:
- the log elements array
-
getLogElement
protected AbstractAccessLogValve.AccessLogElement getLogElement(java.lang.String token, ExtendedAccessLogValve.PatternTokenizer tokenizer) throws java.io.IOException
- Throws:
java.io.IOException
-
getClientToServerElement
protected AbstractAccessLogValve.AccessLogElement getClientToServerElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws java.io.IOException
- Throws:
java.io.IOException
-
getServerToClientElement
protected AbstractAccessLogValve.AccessLogElement getServerToClientElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws java.io.IOException
- Throws:
java.io.IOException
-
getProxyElement
protected AbstractAccessLogValve.AccessLogElement getProxyElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws java.io.IOException
- Throws:
java.io.IOException
-
getXParameterElement
protected AbstractAccessLogValve.AccessLogElement getXParameterElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws java.io.IOException
- Throws:
java.io.IOException
-
getServletRequestElement
protected AbstractAccessLogValve.AccessLogElement getServletRequestElement(java.lang.String parameter)
-
-