org.norther.tammi.core.logger.log4j
Class RotatingFileAppender

java.lang.Object
  extended by org.apache.log4j.AppenderSkeleton
      extended by org.apache.log4j.WriterAppender
          extended by org.apache.log4j.FileAppender
              extended by org.norther.tammi.core.logger.log4j.RotatingFileAppender
All Implemented Interfaces:
Appender, OptionHandler

public class RotatingFileAppender
extends FileAppender

RotatingFileAppender extends FileAppender so that the underlying file is rolled over at a user chosen frequency.

The rolling schedule is specified by the DatePattern option. This pattern should follow the SimpleDateFormat conventions. In particular, you must escape literal text within a pair of single quotes. A formatted version of the date pattern is used as the suffix for the rolled file name.

For example, if the File option is set to /foo/bar.log and the DatePattern set to '.'yyyy-MM-dd, on 2001-02-16 at midnight, the logging file /foo/bar.log will be copied to /foo/bar.log.2001-02-16 and logging for 2001-02-17 will continue in /foo/bar.log until it rolls over the next day.

It is possible to specify monthly, weekly, half-daily, daily, hourly, or minutely rollover schedules.

DatePattern Rollover schedule Example
'.'yyyy-MM* Rollover at the beginning of each month Assuming the first day of the week is Sunday, at Sunday 00:00, March 25th, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-03. Logging for the month of April will be output to /foo/bar.log until it rolls over at the beginning of May.
'.'yyyy-ww* Rollover at the first day of each week. The first day of the week depends on the locale. At midnight, on March 31st, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-08. Logging for the 9th week of 2001 will be output to /foo/bar.log until it is rolled over the next week.
'.'yyyy-MM-dd* Rollover at midnight each day. At midnight, on March 9th, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-03-08. Logging for the 9th day of March will be output to /foo/bar.log until it is rolled over the next day.
'.'yyyy-MM-dd-a* Rollover at midnight and midday of each day. At noon, on March 9th, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-03-09-AM. Logging for the afternoon of the 9th will be output to /foo/bar.log until it is rolled over the next morning, i.e at midnight 00:00.
'.'yyyy-MM-dd-HH* Rollover at the top of every hour. At approximately 11:00, 000, on March 9th, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-03-09-10. Logging for the 11th hour of the 9th of March will be output to /foo/bar.log until it is rolled over at the beginning of the next hour.
'.'yyyy-MM-dd-HH-mm* Rollover at the beginning of every minute. At approximately 11:23, 000, on March 9th, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-03-09-10-22. Logging for the minute of 11:23 (9th of March) will be output to /foo/bar.log until it is rolled over the next minute.

Do not use the colon ":" character in anywhere in the DatePattern option. The text before the colon is interpeted as the protocol specification of a URL which is probably not what you want.

An additional size limit can be specified for rotating files.

Based on DailyRollingFileAppender in the Apache Jakarta Log4J project.

Author:
Eirik Lygre, Ceki Gülcü, Ilkka Priha

Field Summary
 
Fields inherited from class org.apache.log4j.FileAppender
bufferedIO, bufferSize, fileAppend, fileName
 
Fields inherited from class org.apache.log4j.WriterAppender
encoding, immediateFlush, qw
 
Fields inherited from class org.apache.log4j.AppenderSkeleton
closed, errorHandler, headFilter, layout, name, tailFilter, threshold
 
Constructor Summary
RotatingFileAppender()
          Constructs a new appender without activation.
RotatingFileAppender(Layout lout, String filename)
          Constructs and activates a new appender with a layout and filename.
RotatingFileAppender(Layout lout, String filename, boolean append)
          Constructs and activates a new appender with a layout and filename, and specifies whether to truncate the previous log file.
RotatingFileAppender(Layout lout, String filename, String pattern)
          Constructs and activates a new appender with a layout, filename and rotation pattern.
 
Method Summary
 void activateOptions()
          Prevents the superclass from activating itself until the first log event has been received.
 void append(LoggingEvent event)
          Activates the superclass when the first log event has been received.
 int getFilesToKeep()
          Gets the number of log files with the current filename to keep in the log folder.
 int getMaxFileSize()
          Gets the size limit for log files.
 String getRotationPattern()
          Gets the rotation pattern.
 String getTimeZoneId()
          Gets the time zone.
protected  void rolledOver(File file)
          A hook provided by RotatingFileAppender to process a log file roll over.
 void setFilesToKeep(int limit)
          Sets the number of log files with the current filename to keep in the log folder.
 void setMaxFileSize(int limit)
          Sets the size limit for log files.
protected  void setQWForFiles(Writer writer)
          A hook provided by FileAppender to check file size.
 void setRotationPattern(String pattern)
          Sets the rotation pattern.
 void setTimeZoneId(String zone)
          Sets the time zone.
protected  void subAppend(LoggingEvent event)
          A hook provided by FileAppender to check rotation.
 
Methods inherited from class org.apache.log4j.FileAppender
closeFile, getAppend, getBufferedIO, getBufferSize, getFile, reset, setAppend, setBufferedIO, setBufferSize, setFile, setFile
 
Methods inherited from class org.apache.log4j.WriterAppender
checkEntryConditions, close, closeWriter, createWriter, getEncoding, getImmediateFlush, requiresLayout, setEncoding, setErrorHandler, setImmediateFlush, setWriter, writeFooter, writeHeader
 
Methods inherited from class org.apache.log4j.AppenderSkeleton
addFilter, clearFilters, doAppend, finalize, getErrorHandler, getFilter, getFirstFilter, getLayout, getName, getThreshold, isAsSevereAsThreshold, setLayout, setName, setThreshold
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RotatingFileAppender

public RotatingFileAppender()
Constructs a new appender without activation.


RotatingFileAppender

public RotatingFileAppender(Layout lout,
                            String filename)
Constructs and activates a new appender with a layout and filename.

Parameters:
lout - a layout.
filename - the filename.

RotatingFileAppender

public RotatingFileAppender(Layout lout,
                            String filename,
                            boolean append)
Constructs and activates a new appender with a layout and filename, and specifies whether to truncate the previous log file.

Parameters:
lout - a layout.
filename - the filename.
append - if true, append to an existing file.

RotatingFileAppender

public RotatingFileAppender(Layout lout,
                            String filename,
                            String pattern)
Constructs and activates a new appender with a layout, filename and rotation pattern. The previous log file will not be truncated.

Parameters:
lout - a layout.
filename - the filename.
pattern - a rotation pattern.
Method Detail

getMaxFileSize

public int getMaxFileSize()
Gets the size limit for log files.

Returns:
the size limit in kB.

setMaxFileSize

public void setMaxFileSize(int limit)
Sets the size limit for log files.

Parameters:
limit - the size limit in kB.

getFilesToKeep

public int getFilesToKeep()
Gets the number of log files with the current filename to keep in the log folder.

Returns:
the number of files.

setFilesToKeep

public void setFilesToKeep(int limit)
Sets the number of log files with the current filename to keep in the log folder.

Note that the deletion of outdated files is based on filenames, not on modification dates. The rotation pattern should be selected accordingly.

Parameters:
limit - the number of files.

getRotationPattern

public String getRotationPattern()
Gets the rotation pattern.

Returns:
the rotation pattern.

setRotationPattern

public void setRotationPattern(String pattern)
Sets the rotation pattern.

Parameters:
pattern - the rotation pattern.

getTimeZoneId

public String getTimeZoneId()
Gets the time zone.

Returns:
the time zone.

setTimeZoneId

public void setTimeZoneId(String zone)
Sets the time zone.

Parameters:
zone - the time zone.

activateOptions

public void activateOptions()
Prevents the superclass from activating itself until the first log event has been received.

Specified by:
activateOptions in interface OptionHandler
Overrides:
activateOptions in class FileAppender

append

public void append(LoggingEvent event)
Activates the superclass when the first log event has been received.

Overrides:
append in class WriterAppender
Parameters:
event - the logging event.

subAppend

protected void subAppend(LoggingEvent event)
A hook provided by FileAppender to check rotation.

AppenderSkeleton takes care of synchronization.

Overrides:
subAppend in class WriterAppender
Parameters:
event - a logging event.

setQWForFiles

protected void setQWForFiles(Writer writer)
A hook provided by FileAppender to check file size.

Overrides:
setQWForFiles in class FileAppender
Parameters:
writer - the file writer.

rolledOver

protected void rolledOver(File file)
A hook provided by RotatingFileAppender to process a log file roll over.

Parameters:
file - the log file that has just been rolled over.


Copyright © 2004 The Norther Organization. All rights reserved.