Class ExtendedAccessLogValve
- All Implemented Interfaces:
MBeanRegistration,AccessLog,Contained,JmxEnabled,Lifecycle,Valve
c-dns: Client hostname (or ip address ifenableLookupsfor 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 ClassesModifier and TypeClassDescriptionprotected static classprotected static classprotected static classprotected static classprotected static classprotected static classprotected static classwrite a specific response header - x-O(xxx)protected static classprotected static classprotected static classprotected static classNested 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.UserElementNested classes/interfaces inherited from interface org.apache.catalina.Lifecycle
Lifecycle.SingleUse -
Field Summary
Fields inherited from class org.apache.catalina.valves.AccessLogValve
currentLogFile, encoding, fileDateFormat, fileDateFormatter, prefix, renameOnRotate, rotatable, suffix, writerFields inherited from class org.apache.catalina.valves.AbstractAccessLogValve
cachedElements, condition, conditionIf, enabled, locale, localeName, logElements, pattern, requestAttributesEnabledFields inherited from class org.apache.catalina.valves.ValveBase
asyncSupported, container, containerLog, next, smFields inherited from class org.apache.catalina.util.LifecycleMBeanBase
mserverFields inherited from interface org.apache.catalina.AccessLog
PROTOCOL_ATTRIBUTE, REMOTE_ADDR_ATTRIBUTE, REMOTE_HOST_ATTRIBUTE, SERVER_NAME_ATTRIBUTE, SERVER_PORT_ATTRIBUTEFields 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 -
Method Summary
Modifier and TypeMethodDescriptionprotected AbstractAccessLogValve.AccessLogElement[]Parse pattern string and create the array of AccessLogElement.protected AbstractAccessLogValve.AccessLogElementprotected AbstractAccessLogValve.AccessLogElementgetLogElement(String token, ExtendedAccessLogValve.PatternTokenizer tokenizer) protected AbstractAccessLogValve.AccessLogElementprotected AbstractAccessLogValve.AccessLogElementprotected AbstractAccessLogValve.AccessLogElementgetServletRequestElement(String parameter) protected AbstractAccessLogValve.AccessLogElementprotected voidopen()Open the new log file for the date specified bydateStamp.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, stopInternalMethods 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, setRequestAttributesEnabledMethods inherited from class org.apache.catalina.valves.ValveBase
getContainer, getDomainInternal, getNext, getObjectNameKeyProperties, initInternal, isAsyncSupported, setAsyncSupported, setContainer, setNext, toStringMethods inherited from class org.apache.catalina.util.LifecycleMBeanBase
destroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregisterMethods inherited from class org.apache.catalina.util.LifecycleBase
addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
-
Constructor Details
-
ExtendedAccessLogValve
public ExtendedAccessLogValve()
-
-
Method Details
-
open
protected void open()Description copied from class:AccessLogValveOpen the new log file for the date specified bydateStamp.- Overrides:
openin classAccessLogValve
-
createLogElements
Description copied from class:AbstractAccessLogValveParse pattern string and create the array of AccessLogElement.- Overrides:
createLogElementsin classAbstractAccessLogValve- Returns:
- the log elements array
-
getLogElement
protected AbstractAccessLogValve.AccessLogElement getLogElement(String token, ExtendedAccessLogValve.PatternTokenizer tokenizer) throws IOException - Throws:
IOException
-
getClientToServerElement
protected AbstractAccessLogValve.AccessLogElement getClientToServerElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws IOException - Throws:
IOException
-
getServerToClientElement
protected AbstractAccessLogValve.AccessLogElement getServerToClientElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws IOException - Throws:
IOException
-
getProxyElement
protected AbstractAccessLogValve.AccessLogElement getProxyElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws IOException - Throws:
IOException
-
getXParameterElement
protected AbstractAccessLogValve.AccessLogElement getXParameterElement(ExtendedAccessLogValve.PatternTokenizer tokenizer) throws IOException - Throws:
IOException
-
getServletRequestElement
-