Log4j属性|为每次运行创建带有时间戳的新日志文件

时间:2017-06-26 06:04:57

标签: java logging log4j properties-file

我对log4j很新,并设法为我的代码创建日志。 但我需要的是,为每次运行创建一个新文件,而不是将日志附加到同一个文件。

以下是我设置的属性(在谷歌的某个地方找到)。 请建议更改,以便在每次运行后使用时间戳创建新文件。

// Here we have defined root logger
log4j.rootLogger=INFO,R,HTML

// Here we define the appender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.HTML=org.apache.log4j.FileAppender

// Here we define log file location
log4j.appender.R.File=./Logs/LastRunLog.log
log4j.appender.HTML.File=./Logs/LastRunLog.html

// Here we define the layout and pattern
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d - %c -%p - %m%n
log4j.appender.HTML.layout=org.apache.log4j.HTMLLayout
log4j.appender.HTML.layout.Title=Application log
log4j.appender.HTML.layout.LocationInfo=true

3 个答案:

答案 0 :(得分:0)

您需要编写(或查找)自定义appender,它将创建名称中带有时间戳的文件。 log4j中文件记录的3个默认实现是:

  • FileAppender:一个文件记录,没有大小限制。
  • RollingFileAppender:当前文件达到大小限制时的多个文件和滚动文件
  • DailyRollingFileAppender:每天一个文件

最简单的方法是扩展FileAppender并覆盖setFilegetFile方法。

答案 1 :(得分:0)

您可以使用系统属性设置log4j文件名及其值,并为每次运行赋予该属性唯一值。

你的入门级上有类似的东西(timeInMillis和随机的,以避免名称冲突):

static {
    long millis = System.currentTimeMillis();
    System.setProperty("log4jFileName", millis+"-"+Math.round(Math.random()*1000));
}

然后在log4j conf属性中引用系统属性:

log4j.appender.R.File=./Logs/${log4jFileName}.log
log4j.appender.HTML.File=./Logs/${log4jFileName}.log

希望它有所帮助!

答案 2 :(得分:0)

我认为这个答案对你有用click here

我按照页面说的那样运行了代码,每次启动应用程序时都会收到一个新的日志文件。

结果如下:enter image description here

我的Test.java中的所有代码都是:`

private static final Logger log = Logger.getLogger(Test.class);

public static void main(String[] args) {
    log.info("Hello World");
}

`