[logback-dev] [JIRA] Updates for LOGBACK-1776: SizeAndTimeBasedRollingPolicy does not take into account the initial size of an existing log file

logback developers list logback-dev at qos.ch
Fri Oct 25 15:36:00 UTC 2024


logback / LOGBACK-1776 [Open]
SizeAndTimeBasedRollingPolicy does not take into account the initial size of an existing log file

==============================

Here's what changed in this issue in the last few minutes.

This issue has been created
This issue is now assigned to you.


View or comment on issue using this link
https://jira.qos.ch/browse/LOGBACK-1776

==============================
 Issue created
------------------------------

Ceki Gülcü created this issue on 25/Oct/24 15:25

Summary:              SizeAndTimeBasedRollingPolicy does not take into account the initial size of an existing log file
Issue Type:           Bug
Assignee:             Logback dev list
Created:              25/Oct/24 15:25
Environment:
  Dependency: logback-classic:1.5.9
  Java: 17
  System: windows 10
Priority:             Major
Reporter:             Ceki Gülcü
Description:
  Problem: when using SizeAndTimeBasedRollingPolicy and setting the maxFileSize field, if logback writes to an already existing log file (a file that was created before running the application), it will not rotate the file if the initial size is already over maxFileSize or if during execution the file exceeds maxFileSize, but it will rotate the log file only after writing maxFileSize bytes to the file, regardless of its actual size
  
  Reproducer
  
  {code:java}
  package com.example;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  public class App {
  
  	private static final Logger LOGGER = LoggerFactory.getLogger(App.class);
  
  	public static void main(String[] args) {
  		for (int i = 0; i < 20000; i++) {
  			LOGGER.info("X".repeat(55));
  		}
  	}
  }
  {code}
  
  logback.xml
  
  {code:xml}
  <?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE configuration>
  
  <configuration>
    <import class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"/>
    <import class="ch.qos.logback.core.rolling.RollingFileAppender"/>
    <import class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"/>
  
    <appender name="ROLLING" class="RollingFileAppender">
      <rollingPolicy class="SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
        <maxFileSize>1MB</maxFileSize>
        <maxHistory>90</maxHistory>
        <totalSizeCap>20GB</totalSizeCap>
      </rollingPolicy>
      <encoder class="PatternLayoutEncoder">
        <pattern>%msg%n</pattern>
      </encoder>
    </appender>
  
    <root level="DEBUG">
      <appender-ref ref="ROLLING"/>
    </root>
  </configuration>
  {code}
  
  What happens when running the application the first time:
  If there are no existing log files following the fileNamePattern: 2 log files will be generated properly
  {code}
  mylog-2024-10-11.0.txt       1025 KB
  mylog-2024-10-11.1.txt       90 KB
  {code}
  What happens when running the application multiple times after the first:
  The existing log files keep getting written for maxFileSize bytes and no rotation occurs
  {code}
  mylog-2024-10-11.0.txt       2049 KB
  mylog-2024-10-11.1.txt       179 KB
  {code}
  
  {code}
  mylog-2024-10-11.0.txt       3073 KB
  mylog-2024-10-11.1.txt       268 KB
  {code}


==============================
 This message was sent by Atlassian Jira (v9.6.0#960000-sha1:a3ee8af)



More information about the logback-dev mailing list