/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.management.jmx.logging;
import java.io.File;
import java.util.Date;
import org.apache.log4j.pattern.PatternConverter;
import org.apache.log4j.rolling.RollingPolicyBase;
import org.apache.log4j.rolling.RolloverDescription;
import org.apache.log4j.rolling.RolloverDescriptionImpl;
import org.apache.log4j.rolling.helper.Action;
import org.apache.log4j.rolling.helper.FileRenameAction;
import org.apache.log4j.rolling.helper.GZCompressAction;
import org.apache.log4j.rolling.helper.ZipCompressAction;
/**
* A rolling policy that simply adds timestamps to the archived logs.
*/
public final class TimeWindowRollingPolicy extends RollingPolicyBase {
/**
* Constructs a new instance.
*/
public TimeWindowRollingPolicy() {
}
/**
* {@inheritDoc}
*/
@Override
public void activateOptions() {
super.activateOptions();
PatternConverter itc = getDatePatternConverter();
if (itc == null) {
throw new IllegalStateException(
"FileNamePattern [" + getFileNamePattern()
+ "] does not contain a valid date format specifier");
}
}
/**
* {@inheritDoc}
*/
@Override
public RolloverDescription initialize(
final String file, final boolean append) {
String newActiveFile = file;
boolean explicitActiveFile = false;
if (activeFileName != null) {
explicitActiveFile = true;
newActiveFile = activeFileName;
}
if (file != null) {
explicitActiveFile = true;
newActiveFile = file;
}
if (!explicitActiveFile) {
StringBuffer buf = new StringBuffer();
formatFileName(new Date(), buf);
newActiveFile = buf.toString();
}
return new RolloverDescriptionImpl(newActiveFile, append, null, null);
}
/**
* {@inheritDoc}
*/
@Override
public RolloverDescription rollover(final String currentFileName) {
StringBuffer buf = new StringBuffer();
formatFileName(new Date(), buf);
String renameTo = buf.toString();
String compressedName = renameTo;
Action compressAction = null;
if (renameTo.endsWith(".gz")) {
renameTo = renameTo.substring(0, renameTo.length() - 3);
compressAction =
new GZCompressAction(
new File(renameTo), new File(compressedName), true);
} else if (renameTo.endsWith(".zip")) {
renameTo = renameTo.substring(0, renameTo.length() - 4);
compressAction =
new ZipCompressAction(
new File(renameTo), new File(compressedName), true);
}
FileRenameAction renameAction =
new FileRenameAction(
new File(currentFileName), new File(renameTo), false);
return new RolloverDescriptionImpl(
currentFileName, false, renameAction, compressAction);
}
}