Java 删除带有DefaultRolloverStrategy的log4j2日志不起作用

Java 删除带有DefaultRolloverStrategy的log4j2日志不起作用,java,windows,configuration,log4j2,Java,Windows,Configuration,Log4j2,我正在使用log4j2version2.13.3,并试图在应用程序启动时删除旧日志。我尝试了各种示例,它们甚至没有触发我的defaultRollOversegy。我实现了如下配置: <properties> <property name="filePattern">${date:yyyy-MM-dd}</property> <Property name="baseDirectory">logs

我正在使用
log4j2
version
2.13.3
,并试图在应用程序启动时删除旧日志。我尝试了各种示例,它们甚至没有触发我的
defaultRollOversegy
。我实现了如下配置:

<properties>
    <property name="filePattern">${date:yyyy-MM-dd}</property>
    <Property name="baseDirectory">logs</Property>
</properties>

<Appenders>
<!-- ... -->
<RollingFile name="RollingFile" append="true" fileName="${baseDirectory}/${filePattern}.log"
         filePattern="${baseDirectory}/%d{yyyy-MM-dd}.log">
<PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
    <OnStartupTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy>
    <Delete basePath="${baseDirectory}" maxDepth="1">
        <IfFileName glob="*.log"/>
        <IfLastModified age="10d"/>
    </Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>

${日期:yyyy-MM-dd}
日志


因此,不会删除任何日志,但我确信我的配置是正确的。如果我的日志文件模式与奇怪的
pattern\u计数器
常量不匹配,
getEligibleFiles()
方法为什么会中止?

getEligleFiles所考虑的场景是根据DefaultRolloverStrategy上指定的规则确定要删除哪些文件。该策略仅在当前时间模式的时间范围内删除文件。例如,如果每小时滚动一次,则只会在当前小时内清除文件。实际上,这就是删除操作的原因——大多数人希望删除整个目录或一组目录中的文件,而不限于当前的“窗口”

“奇怪模式_计数器常量”用于检查文件名中表示为%[0]n[n..]i的计数器。该模式使计数器具有前导零的固定长度。您没有使用SizeBasedTriggeringPolicy,因此您的文件模式中没有%i,因此它在这方面不匹配

换句话说,这段代码没有做任何事情,因为它不适用于您的配置

当查看DefaultRolloverStrategy时,您可以看到其生成器接受自定义操作。这些是在配置过程中添加的,如果在Log4j2配置文件的配置元素上启用了-Dlog4j2.debug或设置了status=debug,则应该能够看到它们。您还将注意到,它们被添加到rollover方法末尾的RolloverDescription中。这会传递回RollingFileManager,后者会

           if (success && descriptor.getAsynchronous() != null) {
                LOGGER.debug("RollingFileManager executing async {}", descriptor.getAsynchronous());
                asyncExecutor.execute(new AsyncAction(descriptor.getAsynchronous(), this));
                releaseRequired = false;
            }
接近翻转方法的末尾。这将导致删除操作在每次滚动结束时作为异步任务启动

同样,启用-Dlog4j2.debug或设置status=debug应该允许您查看这些调用的