log4j2 删除旧的日志文件 IfAccumulatedFileSize 而不是新的日志文件

时间:2021-04-14 14:42:03

标签: log4j2

我使用以下 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <RollingRandomAccessFile
                name="MainLogFile"
                fileName="${sys:solr.log.dir}/solr.log.json"
                filePattern="${sys:solr.log.dir}/solr.log.%d{yyyy-MM-dd}.%i.log.json">
            <EcsLayout serviceName="my-solr"/>
            <Policies>
                <OnStartupTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 KB"/>
                <TimeBasedTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${sys:solr.log.dir}" maxDepth="1">
                    <IfFileName glob="solr.log.*.log.json">
                        <IfAny>
                            <IfAccumulatedFileSize exceeds="100 KB" />
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <!-- Use <AsyncLogger/<AsyncRoot and <Logger/<Root for asynchronous logging or synchonous logging respectively -->
        <AsyncLogger name="org.apache.hadoop" level="warn"/>
        <AsyncLogger name="org.apache.solr.update.LoggingInfoStream" level="off"/>
        <AsyncLogger name="org.apache.zookeeper" level="warn"/>
        <!-- HttpSolrCall adds markers denoting the handler class to allow fine grained control, metrics are
             very noisy so by default the metrics handler is turned off to see metrics logging set DENY to ACCEPT -->
        <AsyncLogger name="org.apache.solr.servlet.HttpSolrCall" level="info">
            <MarkerFilter marker="org.apache.solr.handler.admin.MetricsHandler" onMatch="DENY" onMismatch="ACCEPT"/>
        </AsyncLogger>

        <AsyncRoot level="info">
            <AppenderRef ref="MainLogFile"/>
        </AsyncRoot>
    </Loggers>
</Configuration>

我想要的是,如果超过累积大小,则删除较旧的日志文件。但 log4j2 首先删除最近修改的文件。 https://logging.apache.org/log4j/2.x/manual/appenders.html 表示有一个 pathSorter 参数可以做到这一点。有人能告诉我如何指定默认的反向排序逻辑吗?

1 个答案:

答案 0 :(得分:0)

问题似乎是 DefaultRollingPolicy 的默认最大值

使用

<DefaultRolloverStrategy min="1" max="9999999">
                <Delete basePath="${sys:solr.log.dir}" maxDepth="1">
                    <IfFileName glob="solr.log.*.log.json">
                        <IfAny>
                            <IfAccumulatedFileSize exceeds="100 KB" />
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>

它按预期工作

相关问题