2011-01-14 99 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}

希望它有帮助。

相关问题