Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

logback : SizeAndTimeBasedRollingPolicy not deleting files with 4 digit "%i"

Tags:

java

logback

We are using SizeAndTimeBasedRollingPolicy/SizeAndTimeBasedFNATP in our product (logback 1.1.3). Here is snip from the logback configuration file :

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

The log files generated have the following names : myabc-2016-11-21.0.gz, myabc-2016-11-21.1.gz, myabc-2016-11-21.2.gz etc.

The problem is if a log file has extension (%i) more than 3 digits, it is not being deleted after 30 days (maxHistory). For example, myabc-2016-11-21.0.gz gets deleted after 30 days, but myabc-2016-11-21.1000.gz is NOT getting deleted.

Is there any other appender/configuration which I need to add to the logback configuration file to make sure files with more than 3 digit extension also gets deleted or is it a bug in logback?

[I have tried with logback 1.1.7, but that did not help]

like image 205
Arnab Biswas Avatar asked Oct 20 '16 03:10

Arnab Biswas


1 Answers

I have the same problem, looked to logback source code (version 1.2.3)

package - ch.qos.logback.core.rolling.helper

and found this line buf.append("(\\d{1,3})");

so it is hardcoded to 1-3 digit integer, where 1000 exceeds this interval and new log files with index over 1000 are not replacing the old ones, but keep appending to filesystem.

like image 107
peter.cambal Avatar answered Sep 25 '22 22:09

peter.cambal