使用日期和时间戳为每次运行创建log4j日志文件

时间:2015-07-11 18:01:42

标签: java log4j

所有,似乎这个问题多次发布,但我仍然没有得到适当的解决方案来解决我的问题。我提到thisthis,但它不起作用。

根据下面的属性文件,每次都会创建一个新文件,其中包含日期但我想创建一个格式低于日期的日志文件,需要在每次执行应用程序时生成,

logFileName_MM_DD_YY-HH_MM_SS.log (或)   logFileName.log_YYYY_MM_DD_HH_MM_SS

# Root logger option
log4j.rootLogger=INFO,file,stdout

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=.\\logs\\AppLog.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

2 个答案:

答案 0 :(得分:3)

编辑 - 删除了DailyFileAppender建议。

您可以创建自己的FileAppender,如下所示:

public class NewFileOnRebootAppender extends FileAppender {

    public NewFileOnRebootAppender() {
    }

    @Override
    public void setFile(String file) {
        super.setFile(prependDate(file));
    }

    private static String prependDate(String filename) {
        return System.currentTimeMillis() + "_" + filename;
    }
}

并像这样使用它:

log4j.appender.fileOnReboot=yourPackage.NewFileOnRebootAppender
log4j.appender.fileOnReboot.File=appLogOnReboot.log
log4j.appender.fileOnReboot.layout=org.apache.log4j.PatternLayout
log4j.appender.fileOnReboot.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

文件的命名并不完美,但你明白了......

答案 1 :(得分:0)

执行此操作的一种简单方法是: 1.)在当前时间戳记的before挂钩中设置一个属性。

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy-hh-mm-ss");
    System.setProperty("current.date.time", dateFormat.format(new Date()));

2。)使用此env变量属性创建记录器文件名 log4j.appender.file.File = $ {user.dir} / logs / Logger _ $ {current.date.time} .logs