2011-01-14 78 views
6

我目前使用的DailyRollingFileAppender類中的log4j做每天的日誌文件追加,但我想有以下格式分離日誌文件:所以我最終如何在每個程序執行的log4j中創建日誌文件?

DATA.log.<date>_<time>_<random_#> 

這應該是每個程序的執行進行一次有類似的東西...

DATA.log.2011-01-13_12-46-38_<26> 
DATA.log.2011-01-13_12-46-38_<79> 
DATA.log.2011-01-13_12-46-38_<590> 

來自不同環境的不同日誌文件可以彙集在一起​​。

有沒有辦法做到這一點,而不擴展FileAppender類?至少,有沒有辦法做到:

DATA.log.<date>_<time>_<sequential_#>.log 

感謝

編輯:我已經使用DailyRollingFileAppender要達到這樣的DATA.log.2011-01-13。我想知道如何做的是在每次程序執行後(或每次執行程序之前)獲取日誌文件,並在最後添加一個隨機數字字符串。

+0

相關:http://en.wikipedia.org/wiki/Aspect-oriented_programming – 2011-01-14 15:30:40

+0

謝謝戴夫。另一個問題,我想添加一個屬性到我的類,即log4j.appender.DATA.CustomProperty =值。我該怎麼做呢? – Kevin 2011-01-14 17:25:37

回答

3

看看:Setting a log file name to include current date in Log4j

編輯: 這個類添加到您的項目,並把它作爲附加目的地:

import java.util.Random; 

import org.apache.log4j.DailyRollingFileAppender; 

public class MyAppender extends DailyRollingFileAppender {  
    @Override 
    public void setFile(String fileName) { 
     if (fileName.indexOf("%rnd") >= 0) { 
      Random r = new Random(); 
      fileName = fileName.replaceAll("%rnd", Integer.toString(r.nextInt())); 
     } 
     super.setFile(fileName); 
    } 
} 

然後,只需將您的appender的文件名類似:文件名% rnd.log

log4j.appender.R=MyAppender.MyAppender 
log4j.appender.R.File=.\\test.%rnd.log 
1

在代碼中設置一個新的環境屬性:

randomString = Long.toString(Math.abs((new Random()).nextLong()), Character.MAX_RADIX); 
System.setProperty("randomString", randomString); 

然後,在您的log4j文件中使用該變量,使用${randomString}

希望它有幫助。

相關問題