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

Creating log4j log file for each run with Date and timestamp

总之,这个问题好像已经发过多次了,但我还是没有找到合适的解决方案。我提到了 this and this 但它不起作用。

根据下面的 属性 文件,每次都会创建一个包含日期的新文件但是我想创建一个具有以下格式的日志文件,并且每次执行我的应用程序时都需要生成,

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

编辑 - 删除了 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.) 在当前时间戳的前挂钩中设置 属性。

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

2.) 使用此环境变量 属性 创建您的记录器文件名 log4j.appender.file.File=${user.dir}/logs/Logger_${current.date.time}.logs