有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java logback:SizeAndTimeBasedRollingPolicy不删除包含4位“%i”的文件

我们在产品中使用SizeAndTimeBasedRollingPolicy/SizeAndTimeBasedFNATP(logback 1.1.3)。以下是logback配置文件中的snip:

<appender name="SERVER_FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${MY_LOGS}/myabc.log</file>
    <append>true</append>
    <!-- 
        Roll log file on both time (per day) and size (250mb). Gzip on roll.
    -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- location and name of rolled log files -->
        <fileNamePattern>${MY_LOGS}/myabc-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
        <!-- keep 30 days worth of history -->
        <maxHistory>30</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- whenever the file size reaches 250MB, roll it -->
            <maxFileSize>250MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%thread] %-5level %logger{24} [%C{1}.%M]</pattern>
    </encoder>
</appender>

生成的日志文件具有以下名称:myabc-2016-11-21.0。广州,myabc-2016-11-21.1。广州,myabc-2016-11-21.2。广州等

问题是,如果日志文件的扩展名(%i)超过3位,则在30天后(maxHistory)不会将其删除。例如,myabc-2016-11-21.0。gz在30天后被删除,但是myabc-2016-11-211000。gz没有被删除

是否有其他附件/配置需要添加到logback配置文件中,以确保扩展名超过3位的文件也被删除,或者是logback中的错误

[我已尝试使用logback 1.1.7,但没有帮助]


共 (3) 个答案

  1. # 2 楼答案

    这是logback中的一个bug。这里是jira,这里是建议的修复(PR

  2. # 3 楼答案

    我也有同样的问题,查看了logback源代码(版本1.2.3)

    包-ch.qos。向后退。果心滚动的。助手

    找到了这条线 buf.append("(\\d{1,3})");

    因此,它被硬编码为1-3位整数,其中1000超过了这个间隔,索引超过1000的新日志文件并没有替换旧的日志文件,而是继续附加到文件系统