@Plugin(name="DefaultRolloverStrategy", category="Core", printObject=true) public class DefaultRolloverStrategy extends AbstractRolloverStrategy
DefaultRolloverStrategy
renames files according to an algorithm as described below.
The DefaultRolloverStrategy is a combination of a time-based policy and a fixed-window policy. When the file name pattern contains a date format then the rollover time interval will be used to calculate the time to use in the file pattern. When the file pattern contains an integer replacement token one of the counting techniques will be used.
When the ascending attribute is set to true (the default) then the counter will be incremented and the current log file will be renamed to include the counter value. If the counter hits the maximum value then the oldest file, which will have the smallest counter, will be deleted, all other files will be renamed to have their counter decremented and then the current file will be renamed to have the maximum counter value. Note that with this counting strategy specifying a large maximum value may entirely avoid renaming files.
When the ascending attribute is false, then the "normal" fixed-window strategy will be used.
Let max and min represent the values of respectively the MaxIndex and MinIndex
options. Let "foo.log" be the value of the ActiveFile option and "foo.%i.log" the value of
FileNamePattern. Then, when rolling over, the file foo.max.log
will be deleted, the file
foo.max-1.log
will be renamed as foo.max.log
, the file
foo.max-2.log
renamed as foo.max-1.log
, and so on, the file
foo.min+1.log
renamed as foo.min+2.log
. Lastly, the active file
foo.log
will be renamed as foo.min.log
and a new active file name
foo.log
will be created.
Given that this rollover algorithm requires as many file renaming operations as the window size, large window sizes are discouraged.
Modifier and Type | Class and Description |
---|---|
static class |
DefaultRolloverStrategy.Builder
Builds DefaultRolloverStrategy instances.
|
Modifier and Type | Field and Description |
---|---|
private int |
compressionLevel |
private java.util.List<Action> |
customActions |
private static int |
DEFAULT_WINDOW_SIZE |
private int |
maxIndex
Index for oldest retained log file.
|
private static int |
MIN_WINDOW_SIZE |
private int |
minIndex
Index for most recent log file.
|
private boolean |
stopCustomActionsOnError |
private PatternProcessor |
tempCompressedFilePattern |
private boolean |
useMax |
LOGGER, PATTERN_COUNTER, strSubstitutor
Modifier | Constructor and Description |
---|---|
protected |
DefaultRolloverStrategy(int minIndex,
int maxIndex,
boolean useMax,
int compressionLevel,
StrSubstitutor strSubstitutor,
Action[] customActions,
boolean stopCustomActionsOnError)
Deprecated.
Since 2.9 Added tempCompressedFilePatternString parameter
|
protected |
DefaultRolloverStrategy(int minIndex,
int maxIndex,
boolean useMax,
int compressionLevel,
StrSubstitutor strSubstitutor,
Action[] customActions,
boolean stopCustomActionsOnError,
java.lang.String tempCompressedFilePatternString)
Constructs a new instance.
|
Modifier and Type | Method and Description |
---|---|
static DefaultRolloverStrategy |
createStrategy(java.lang.String max,
java.lang.String min,
java.lang.String fileIndex,
java.lang.String compressionLevelStr,
Action[] customActions,
boolean stopCustomActionsOnError,
Configuration config)
Deprecated.
Since 2.9 Usage of Builder API is preferable
|
int |
getCompressionLevel() |
java.util.List<Action> |
getCustomActions() |
int |
getMaxIndex() |
int |
getMinIndex() |
PatternProcessor |
getTempCompressedFilePattern() |
boolean |
isStopCustomActionsOnError() |
boolean |
isUseMax() |
static DefaultRolloverStrategy.Builder |
newBuilder() |
private int |
purge(int lowIndex,
int highIndex,
RollingFileManager manager) |
private int |
purgeAscending(int lowIndex,
int highIndex,
RollingFileManager manager)
Purges and renames old log files in preparation for rollover.
|
private int |
purgeDescending(int lowIndex,
int highIndex,
RollingFileManager manager)
Purges and renames old log files in preparation for rollover.
|
RolloverDescription |
rollover(RollingFileManager manager)
Performs the rollover.
|
java.lang.String |
toString() |
getEligibleFiles, getEligibleFiles, getEligibleFiles, getEligibleFiles, getEligibleFiles, getStrSubstitutor, merge, suffixLength
private static final int MIN_WINDOW_SIZE
private static final int DEFAULT_WINDOW_SIZE
private final int maxIndex
private final int minIndex
private final boolean useMax
private final int compressionLevel
private final java.util.List<Action> customActions
private final boolean stopCustomActionsOnError
private final PatternProcessor tempCompressedFilePattern
@Deprecated protected DefaultRolloverStrategy(int minIndex, int maxIndex, boolean useMax, int compressionLevel, StrSubstitutor strSubstitutor, Action[] customActions, boolean stopCustomActionsOnError)
minIndex
- The minimum index.maxIndex
- The maximum index.customActions
- custom actions to perform asynchronously after rolloverstopCustomActionsOnError
- whether to stop executing asynchronous actions if an error occursprotected DefaultRolloverStrategy(int minIndex, int maxIndex, boolean useMax, int compressionLevel, StrSubstitutor strSubstitutor, Action[] customActions, boolean stopCustomActionsOnError, java.lang.String tempCompressedFilePatternString)
minIndex
- The minimum index.maxIndex
- The maximum index.customActions
- custom actions to perform asynchronously after rolloverstopCustomActionsOnError
- whether to stop executing asynchronous actions if an error occurstempCompressedFilePatternString
- File pattern of the working file
used during compression, if null no temporary file are used@PluginBuilderFactory public static DefaultRolloverStrategy.Builder newBuilder()
@PluginFactory @Deprecated public static DefaultRolloverStrategy createStrategy(@PluginAttribute(value="max") java.lang.String max, @PluginAttribute(value="min") java.lang.String min, @PluginAttribute(value="fileIndex") java.lang.String fileIndex, @PluginAttribute(value="compressionLevel") java.lang.String compressionLevelStr, @PluginElement(value="Actions") Action[] customActions, @PluginAttribute(value="stopCustomActionsOnError",defaultBoolean=true) boolean stopCustomActionsOnError, @PluginConfiguration Configuration config)
max
- The maximum number of files to keep.min
- The minimum number of files to keep.fileIndex
- If set to "max" (the default), files with a higher index will be newer than files with a smaller
index. If set to "min", file renaming and the counter will follow the Fixed Window strategy.compressionLevelStr
- The compression level, 0 (less) through 9 (more); applies only to ZIP files.customActions
- custom actions to perform asynchronously after rolloverstopCustomActionsOnError
- whether to stop executing asynchronous actions if an error occursconfig
- The Configuration.public int getCompressionLevel()
public java.util.List<Action> getCustomActions()
public int getMaxIndex()
public int getMinIndex()
public boolean isStopCustomActionsOnError()
public boolean isUseMax()
public PatternProcessor getTempCompressedFilePattern()
private int purge(int lowIndex, int highIndex, RollingFileManager manager)
private int purgeAscending(int lowIndex, int highIndex, RollingFileManager manager)
lowIndex
- low index. Log file associated with low index will be deleted if needed.highIndex
- high index.manager
- The RollingFileManagerprivate int purgeDescending(int lowIndex, int highIndex, RollingFileManager manager)
lowIndex
- low indexhighIndex
- high index. Log file associated with high index will be deleted if needed.manager
- The RollingFileManagerpublic RolloverDescription rollover(RollingFileManager manager) throws java.lang.SecurityException
manager
- The RollingFileManager name for current active log file.java.lang.SecurityException
- if an error occurs.public java.lang.String toString()
toString
in class java.lang.Object