Package org.apache.catalina.valves
Class AccessLogValve
- 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
-
- All Implemented Interfaces:
javax.management.MBeanRegistration
,AccessLog
,Contained
,JmxEnabled
,Lifecycle
,Valve
- Direct Known Subclasses:
ExtendedAccessLogValve
public class AccessLogValve extends AbstractAccessLogValve
This is a concrete implementation ofAbstractAccessLogValve
that outputs the access log to a file. The features of this implementation include:- Automatic date-based rollover of log files
- Optional log file rotation
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.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.catalina.valves.AbstractAccessLogValve
AbstractAccessLogValve.AccessLogElement, AbstractAccessLogValve.ByteSentElement, AbstractAccessLogValve.CachedElement, AbstractAccessLogValve.ConnectionStatusElement, AbstractAccessLogValve.CookieElement, 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.RequestAttributeElement, AbstractAccessLogValve.RequestElement, AbstractAccessLogValve.RequestURIElement, AbstractAccessLogValve.ResponseHeaderElement, AbstractAccessLogValve.SessionAttributeElement, 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 java.io.File
currentLogFile
The current log file we are writing to.protected java.lang.String
encoding
Character set used by the log file.protected java.lang.String
fileDateFormat
Date format to place in log file name.protected java.text.SimpleDateFormat
fileDateFormatter
A date formatter to format a Date using the format given byfileDateFormat
.protected java.lang.String
prefix
The prefix that is added to log file filenames.protected boolean
renameOnRotate
Should we defer inclusion of the date stamp in the file name until rotate time?protected boolean
rotatable
Should we rotate our log file?protected java.lang.String
suffix
The suffix that is added to log file filenames.protected java.io.PrintWriter
writer
The PrintWriter to which we are currently logging, if any.-
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 AccessLogValve()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
backgroundProcess()
Execute a periodic task, such as reloading, etc.java.lang.String
getDirectory()
java.lang.String
getEncoding()
Return the character set name that is used to write the log file.java.lang.String
getFileDateFormat()
int
getMaxDays()
java.lang.String
getPrefix()
java.lang.String
getSuffix()
boolean
isBuffered()
Is the logging buffered.boolean
isCheckExists()
Check for file existence before logging.boolean
isRenameOnRotate()
Should we defer inclusion of the date stamp in the file name until rotate time.boolean
isRotatable()
Should we rotate the access log.void
log(java.io.CharArrayWriter message)
Log the specified message to the log file, switching files if the date has changed since the previous log call.protected void
open()
Open the new log file for the date specified bydateStamp
.void
rotate()
Rotate the log file if necessary.boolean
rotate(java.lang.String newFileName)
Rename the existing log file to something else.void
setBuffered(boolean buffered)
Set the value if the logging should be bufferedvoid
setCheckExists(boolean checkExists)
Set whether to check for log file existence before logging.void
setDirectory(java.lang.String directory)
Set the directory in which we create log files.void
setEncoding(java.lang.String encoding)
Set the character set that is used to write the log file.void
setFileDateFormat(java.lang.String fileDateFormat)
Set the date format date based log rotation.void
setMaxDays(int maxDays)
void
setPrefix(java.lang.String prefix)
Set the log file prefix.void
setRenameOnRotate(boolean renameOnRotate)
Set the value if we should defer inclusion of the date stamp in the file name until rotate timevoid
setRotatable(boolean rotatable)
Configure whether the access log should be rotated.void
setSuffix(java.lang.String suffix)
Set the log file suffix.protected void
startInternal()
Start this component and implement the requirements ofLifecycleBase.startInternal()
.protected void
stopInternal()
Stop this component and implement the requirements ofLifecycleBase.stopInternal()
.-
Methods inherited from class org.apache.catalina.valves.AbstractAccessLogValve
createAccessLogElement, createAccessLogElement, createLogElements, 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
-
prefix
protected volatile java.lang.String prefix
The prefix that is added to log file filenames.
-
rotatable
protected boolean rotatable
Should we rotate our log file? Default is true (like old behavior)
-
renameOnRotate
protected boolean renameOnRotate
Should we defer inclusion of the date stamp in the file name until rotate time? Default is false.
-
suffix
protected volatile java.lang.String suffix
The suffix that is added to log file filenames.
-
writer
protected java.io.PrintWriter writer
The PrintWriter to which we are currently logging, if any.
-
fileDateFormatter
protected java.text.SimpleDateFormat fileDateFormatter
A date formatter to format a Date using the format given byfileDateFormat
.
-
currentLogFile
protected java.io.File currentLogFile
The current log file we are writing to. Helpful when checkExists is true.
-
fileDateFormat
protected java.lang.String fileDateFormat
Date format to place in log file name.
-
encoding
protected volatile java.lang.String encoding
Character set used by the log file. If it isnull
, the system default character set will be used. An empty string will be treated asnull
when this property is assigned.
-
-
Method Detail
-
getMaxDays
public int getMaxDays()
-
setMaxDays
public void setMaxDays(int maxDays)
-
getDirectory
public java.lang.String getDirectory()
- Returns:
- the directory in which we create log files.
-
setDirectory
public void setDirectory(java.lang.String directory)
Set the directory in which we create log files.- Parameters:
directory
- The new log file directory
-
isCheckExists
public boolean isCheckExists()
Check for file existence before logging.- Returns:
true
if file existence is checked first
-
setCheckExists
public void setCheckExists(boolean checkExists)
Set whether to check for log file existence before logging.- Parameters:
checkExists
- true meaning to check for file existence.
-
getPrefix
public java.lang.String getPrefix()
- Returns:
- the log file prefix.
-
setPrefix
public void setPrefix(java.lang.String prefix)
Set the log file prefix.- Parameters:
prefix
- The new log file prefix
-
isRotatable
public boolean isRotatable()
Should we rotate the access log.- Returns:
true
if the access log should be rotated
-
setRotatable
public void setRotatable(boolean rotatable)
Configure whether the access log should be rotated.- Parameters:
rotatable
- true if the log should be rotated
-
isRenameOnRotate
public boolean isRenameOnRotate()
Should we defer inclusion of the date stamp in the file name until rotate time.- Returns:
true
if the logs file names are time stamped only when they are rotated
-
setRenameOnRotate
public void setRenameOnRotate(boolean renameOnRotate)
Set the value if we should defer inclusion of the date stamp in the file name until rotate time- Parameters:
renameOnRotate
- true if defer inclusion of date stamp
-
isBuffered
public boolean isBuffered()
Is the logging buffered. Usually buffering can increase performance.- Returns:
true
if the logging uses a buffer
-
setBuffered
public void setBuffered(boolean buffered)
Set the value if the logging should be buffered- Parameters:
buffered
-true
if buffered.
-
getSuffix
public java.lang.String getSuffix()
- Returns:
- the log file suffix.
-
setSuffix
public void setSuffix(java.lang.String suffix)
Set the log file suffix.- Parameters:
suffix
- The new log file suffix
-
getFileDateFormat
public java.lang.String getFileDateFormat()
- Returns:
- the date format date based log rotation.
-
setFileDateFormat
public void setFileDateFormat(java.lang.String fileDateFormat)
Set the date format date based log rotation.- Parameters:
fileDateFormat
- The format for the file timestamp
-
getEncoding
public java.lang.String getEncoding()
Return the character set name that is used to write the log file.- Returns:
- Character set name, or
null
if the system default character set is used.
-
setEncoding
public void setEncoding(java.lang.String encoding)
Set the character set that is used to write the log file.- Parameters:
encoding
- The name of the character set.
-
backgroundProcess
public void backgroundProcess()
Execute a periodic task, such as reloading, etc. This method will be invoked inside the classloading context of this container. Unexpected throwables will be caught and logged.- Specified by:
backgroundProcess
in interfaceValve
- Overrides:
backgroundProcess
in classValveBase
-
rotate
public void rotate()
Rotate the log file if necessary.
-
rotate
public boolean rotate(java.lang.String newFileName)
Rename the existing log file to something else. Then open the old log file name up once again. Intended to be called by a JMX agent.- Parameters:
newFileName
- The file name to move the log file entry to- Returns:
- true if a file was rotated with no error
-
log
public void log(java.io.CharArrayWriter message)
Log the specified message to the log file, switching files if the date has changed since the previous log call.- Specified by:
log
in classAbstractAccessLogValve
- Parameters:
message
- Message to be logged
-
open
protected void open()
Open the new log file for the date specified bydateStamp
.
-
startInternal
protected void startInternal() throws LifecycleException
Start this component and implement the requirements ofLifecycleBase.startInternal()
.- Overrides:
startInternal
in classAbstractAccessLogValve
- Throws:
LifecycleException
- if this component detects a fatal error that prevents this component from being used
-
stopInternal
protected void stopInternal() throws LifecycleException
Stop this component and implement the requirements ofLifecycleBase.stopInternal()
.- Overrides:
stopInternal
in classAbstractAccessLogValve
- Throws:
LifecycleException
- if this component detects a fatal error that prevents this component from being used
-
-