我正在使用
log4j2 2.11
创建日志文件。我根据时间和大小轮换这些日志文件。基于时间的旋转效果很好,但是,当我根据大小旋转时,我遇到了一个奇怪的问题。
当我根据大小进行旋转时,我将日志文件压缩到以下名为 gzip 文件
${logdir}/${eventfilename}-%d{yyyyMMddHHmmss}{GMT+0}.log.gz
中,但是,log.gz
文件始终以相同的时间结束,因此会无限地覆盖以前的压缩日志文件。我的理解是当前时间将用于 gzip 文件,而不是第一次抓取来创建 gzip 文件。
什么可能导致此问题,即我的基于大小的旋转文件始终以相同的名称结尾,并且没有更新到文件名中使用的当前时间?
请注意,这是我的完整配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ALL" shutdownHook="disable">
<Properties>
<Property name="logdir">${env:DIR}/log</Property>
<Property name="eventfilename">foo_event</Property>
<Property name="errorfilename">foo_error</Property>
<Property name="msgformat">%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0}Z [%t] %-5level %logger{1} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${msgformat}"/>
</Console>
<RollingFile name="ERROR_FILE" fileName="${logdir}/${errorfilename}.log"
filePattern="${logdir}/${errorfilename}-%d{yyyyMMddHHmmss}{GMT+0}.log.gz">
<PatternLayout charset="UTF-8" pattern="${msgformat}"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${logdir}">
<IfFileName glob="${errorfilename}-*">
<IfAccumulatedFileSize exceeds="100 MB"/>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
<ThresholdFilter level="WARN"/>
</RollingFile>
<RollingFile name="EVENT_FILE" fileName="${logdir}/${eventfilename}.log"
filePattern="${logdir}/${eventfilename}-%d{yyyyMMddHHmmss}{GMT+0}.log.gz">
<PatternLayout charset="UTF-8" pattern="${msgformat}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="43200" modulate="false"/>
<SizeBasedTriggeringPolicy size="1 MB"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${logdir}">
<IfFileName glob="${eventfilename}-*">
<IfAccumulatedFileSize exceeds="100 MB"/>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
<ThresholdFilter level="TRACE"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="foo.utils.FooLogger" level="TRACE"
additivity="false">
<AppenderRef ref="ERROR_FILE"/>
<AppenderRef ref="EVENT_FILE"/>
</Logger>
<Logger name="foo.utils.foo.FooPathUtils" level="INFO"
additivity="false">
<!-- Change level to debug to log java path info at startup -->
<AppenderRef ref="ERROR_FILE"/>
<AppenderRef ref="EVENT_FILE"/>
</Logger>
<Logger name="foo" level="INFO" additivity="false">
<AppenderRef ref="ERROR_FILE"/>
<AppenderRef ref="EVENT_FILE"/>
</Logger>
<Root level="TRACE">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
我也有同样的问题,但没有找到解决该问题的指导。