0

我知道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.

我的需要是,

  1. 我的日志文件需要支持最大文件大小

  2. 每个日志文件都有唯一的名称和日期。

希望我们的堆栈用户能帮助我。

4

1 回答 1

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");
}

}

您可以根据自己的具体需求进行调整

于 2013-12-12T11:03:23.490 回答