我知道DailyRollingFileAppender
会为我做。但是当我的文件大小达到指定大小时,它不支持最大文件大小。
<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="ALL" />
<param name="MaxFileSize" value="50KB" />
<param name="MaxBackupIndex" value="10" />
<param name="File" value="F:/logs/Testing/MyProject.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MMM-dd-yyyy HH:mm:ss:SSS} %-5p %m%n"/>
</layout>
</appender>
我想将我的文件名创建为MyProject_12.12.2012.log
。
我的需要是,
我的日志文件需要支持最大文件大小
每个日志文件都有唯一的日期名称。
希望我们的堆栈用户能帮助我。
答案 0 :(得分:1)
公共空间中有几种可用的实现,但实际上它更容易覆盖RollingFileAppender
例如:
public class MyRollingAppender extends RollingFileAppender {
Long nextCheck=System.currentTimeMillis () - 1;
public static final SimpleDateFormat FORMAT=new SimpleDateFormat("yyyyMMdd");
String fileNameOriginal=null;
private void rollFile() {
this.closeFile();
GregorianCalendar calendar=new GregorianCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.DATE, 1);
nextCheck=calendar.getTimeInMillis();
this.setFile(fileNameOriginal);
this.activateOptions();
}
@Override
protected void subAppend(LoggingEvent event) {
Long n=System.currentTimeMillis ();
if (n>nextCheck) {
rollFile();
}
super.subAppend(event);
}
@Override
public void setFile(String file) {
fileNameOriginal=file;
super.setFile(file + FORMAT.format(new Date()) +".log");
}
}
您可以根据具体需要进行调整