首页 > 解决方案 > Log4j2 不像第一个版本那样滚动文件,我在新的配置布局中遗漏了什么吗?

问题描述

我在使用 log4j2 和 RollingFile appender 时遇到了两个问题。第一个是,如果没有现有的存档文件,它总是将可能的最早日期作为文件名,而不是文件创建日期或接触日期。第二个问题主要发生在测试期间,因为我经常启动和停止我的代码。每当我停止/启动服务器时,它会将当前日志移动到存档而不是附加到当前日志。没有特别的步骤来创建它,只要有一个从今天开始的当前日志并启动程序。

我已经尝试手动设置 TimeBaseTriggerPolicy、RollingFile 附加属性并多次更改文件模式,但似乎没有任何问题可以解决这个问题。我已经阅读了 log4j2 手册,因为这些项目与第一个版本不同。

https://logging.apache.org/log4j/2.x/manual/appenders.html

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <RollingFile name="runningLog"
            filename="./logs/FooIncoming.log"
            filePattern="./logs/FooIncoming-%d{yyyy-MM-dd}.log"
            ignoreExceptions="false"
            append="true">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] %x [%t] [%c{2}] [%m]%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
...
    </Appenders>
    <Loggers>
        <Logger name="com.foo.bar"  additivity="false">
            <AppenderRef ref="runningLog" level="debug" />
            <AppenderRef ref="errorLog" level="error" />
            <AppenderRef ref="Console" level="error" />
        </Logger>
        <Logger name="research_logger" additivity="false">
            <AppenderRef ref="RESEARCH" level="all"/>
        </Logger>
        <Root level="all">
            <AppenderRef ref="runningLog"/>
        </Root>
    </Loggers>
</Configuration>

作为信息,下面的替换是我发现可以工作的解决方法,但我不能按照 api 文档所说的方式来做这件事似乎仍然很奇怪。

<Policies>
   <TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy>
   <Delete basePath="./logs/" maxDepth="1">
      <IfFileName glob="FooIncoming-??????????.log" />
      <IfLastModified age="10d" />
   </Delete>
</DefaultRolloverStrategy>

标签: javalog4j2rollingfileappender

解决方案


推荐阅读