【问题标题】:Creating log4j log file for each run with Date and timestamp使用日期和时间戳为每次运行创建 log4j 日志文件
【发布时间】:2015-09-30 08:22:31
【问题描述】:

所有,这个问题似乎被多次发布,但我仍然没有为我的问题找到合适的解决方案。我提到了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

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    编辑 - 删除了 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
    

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

    【讨论】:

    • 我已经尝试过这个,但问题是它会每分钟创建一个新的日志文件,即,如果我的应用程序运行 6 分钟,则创建 6 个日志文件。但我需要在每次启动应用程序时创建一个日志文件。
    • @Cyborgz 你是对的,当然。我已经更新了我的答案。
    • 测试和工作正常!!谢谢!
    • 请注意,如果 File 属性包含路径信息,例如File=log/foo.log,这将表现得有点奇怪。将日期附加到末尾而不是添加到开头将解决此问题。
    【解决方案2】:

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

        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

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2013-10-08
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多