2013-12-12 137 views
0

我知道DailyRollingFileAppender會爲我做。但是,當我的文件大小達到指定大小時,它不支持最大文件大小。如何在日誌文件名中追加日期,如log_12.12.2012.log?

<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. 每個日誌文件與日期唯一的名稱。

希望我們的堆棧用戶能幫助我。

回答

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

}

你可以把它調整到您的特定需求

相關問題