如何在每个程序执行的log4j中创建日志文件?

时间:2011-01-14 14:41:21

标签: java logging log4j config

我目前正在使用log4j中的DailyRollingFileAppender类来做日常日志文件附加,但我希望以下列格式分隔日志文件:

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的内容。我想知道怎么做是在每个程序执行之后(或在每个程序执行之前)将日志文件翻转,并在最后添加一个随机数字字符串。

2 个答案:

答案 0 :(得分:3)

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

编辑: 将此类添加到项目中,并将其用作appender:

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的文件名设置为:filename。%rnd.log

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

答案 1 :(得分:1)

在您的代码中设置一个新的环境属性:

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

然后,在您的log4j文件中使用${randomString}

使用该变量

希望它有所帮助。