1

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>
4

0 回答 0