如何在日志文件名中附加日期,如log_12.12.2012.log?

时间:2013-12-12 09:39:13

标签: java xml logging log4j rollingfileappender

我知道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. 每个日志文件都有唯一的日期名称。

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

1 个答案:

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

}

您可以根据具体需要进行调整