Java 启动时滚动日志文件

Java 启动时滚动日志文件,java,json,configuration,log4j,rollingfileappender,Java,Json,Configuration,Log4j,Rollingfileappender,我正在尝试使用RollingAndomAccess文件设置log4j。我将它设置为在超过20兆字节时翻滚,并在启动时翻滚上次运行时留下的内容。基于大小的策略工作得很好,但我无法让它对启动策略做任何事情。我尝试过在配置中使用JSON和XML,但都无法使用。甚至试图通过调用 ((RollingRandomAccessFileAppender)LoggerContext.getContext(false).getConfiguration().getAppender("LOGFILE")).getMa

我正在尝试使用RollingAndomAccess文件设置log4j。我将它设置为在超过20兆字节时翻滚,并在启动时翻滚上次运行时留下的内容。基于大小的策略工作得很好,但我无法让它对启动策略做任何事情。我尝试过在配置中使用JSON和XML,但都无法使用。甚至试图通过调用

((RollingRandomAccessFileAppender)LoggerContext.getContext(false).getConfiguration().getAppender("LOGFILE")).getManager().rollover();
什么都不做。我将状态记录器设置为输出所有内容,并且在启动过程中没有弹出任何消息,表明它甚至试图滚动日志文件。使用前面提到的编程方法时,它会输出一条消息,说明它已将文件重命名为压缩前应使用的适当名称,但不会创建此类文件,也不会提及或创建压缩文件。以下是JSON中appender的配置:

"RollingRandomAccessFile": {

    "name": "LOGFILE",
    "append": "false",
    "fileName": "ServerData/logs/latest.log",
    "filePattern": "ServerData/logs/$${date:dd-MM-YYYY_(EEE)_HH-mm-ss-SSS(z)}.log.gz",
    "PatternLayout": {

      "pattern": "$${date:dd-MM-YYYY (EEE)::HH:mm:ss.SSS(z)}: [%t] %-5level %logger{36}: %m%n"

    },
    "Policies": {

      "OnStartupTriggeringPolicy": {},
      "SizeBasedTriggeringPolicy": {"size": "20MB"}

    }


  }

根据文件。您是否检查过日志文件是否早于JVM的启动时间?@Bilguun No它不会出现。但我不明白这怎么可能,因为该文件是由一个JVM创建的,该JVM在当前执行的JVM之前退出。尽管如此,看起来我的最佳选择是使用编程方法,但出于某种原因,这也不起作用。