package com.e2u.thirdparty.log4j;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.RollingFileAppender;
/**
* An enhanced RollingFileAppender to add time-stamp suffix for log file name.
*
* At system startup, this appender always re-create a new log file.
*
*/
public class SystemStartRollingFileAppender extends RollingFileAppender
{
private static final String LOG_FILE_NAME_SUFFIX = SystemStartRollingFileAppender.class.getName() + ".FILE_NAME_SUFFIX";
private String timeStampPattern = null;
public String getTimeStampPattern()
{
return timeStampPattern;
}
/**
* Suggested pattern: _yyyy_MM_dd_HH_mm_ss_SSS
* @param timeStampPattern
*/
public void setTimeStampPattern(String timeStampPattern)
{
this.timeStampPattern = timeStampPattern;
}
public void activateOptions()
{
setFileName();
super.activateOptions();
}
private void setFileName()
{
if(timeStampPattern == null)
{
return;
}
String dateStr;
if(System.getProperty(LOG_FILE_NAME_SUFFIX) != null)
{
dateStr = System.getProperty(LOG_FILE_NAME_SUFFIX);
}
else
{
SimpleDateFormat sdf = new SimpleDateFormat(timeStampPattern);
dateStr = sdf.format(new Date());
System.setProperty(LOG_FILE_NAME_SUFFIX, dateStr);
}
String var = fileName;
//The fileName has extension name
if(hasExtName(var))
{
int index = var.lastIndexOf('.');
var = var.substring(0, index) + dateStr + var.substring(index);
}
else
{
var = var + dateStr;
}
fileName = var;
}
private boolean hasExtName(String name)
{
File file = new File(name);
name = file.getName();
return name.indexOf('.') != -1;
}
}