Uploaded image for project: 'logback'
  1. logback
  2. LOGBACK-721

SizeAndTimeBasedFNATP doesn't set timestamp in logged files after rollover triggered by maximum size

    XMLWordPrintable

Details

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • 1.0.6
    • logback-core
    • None

    Description

      I want log files to be placed in directories containing date and rolled over every day. Moreover I want log files to be of maximum size of, let's say, 10MB. Each time a new log file is created, I would like to have it timestamped. Unfortunately, SizeAndTimeBasedFNATP doesn't work like that. Here's my logback.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
      <timestamp key="millisecond" datePattern="yyyyMMdd_HHmmssSSS"/>

      <appender name="SSR" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>%p; %d; %t; %m; %n</pattern>
      </encoder>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>d:/ssr/log/%d

      {yyyyMMdd}/%d{yyyyMMdd_HHmmssSSS,aux}_ssr.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
      <maxFileSize>10MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      </rollingPolicy>
      </appender>

      <logger name="asseco.ssr" level="debug">
      <appender-ref ref="SSR"/>
      </logger>

      <root level="info"/>
      </configuration>

      It causes a first file to be created, let's say d:\ssr\log\20120713\20120713_131110712_ssr.log
      But after it reaches 10MB, it's not rotated, but log events are still appended to the same file.

      Adding token %i to pattern, for example d:/ssr/log/%d{yyyyMMdd}

      /%d

      {yyyyMMdd_HHmmssSSS,aux}

      _ssr.%i.log shows the reason of problems. In such a case logs are rolled every 10MB, but filenames follow the same pattern with the same timestamp instead of new timestamp for every file: 20120713_131353836_ssr.0.log, 20120713_131353836_ssr.1.log etc.

      The reason for this is that TimeBasedFileNamingAndTriggeringPolicyBase.dateInCurrentPeriod field doesn't get changed. Either it should change if rollback occurred triggered by maximum size or there should be another possibility of adding absolute timestamp which is calculated every time when it's needed.

      Using:
      <timestamp key="millisecond" datePattern="yyyyMMdd_HHmmssSSS"/>

      with pattern:
      <fileNamePattern>d:/ssr/log/%d

      {yyyyMMdd_HHmm}

      /${millisecond}_ssr.%i.log</fileNamePattern>
      doesn't help also, because in such a case timestamp is every time the same, even after rollback triggered by date change.

      Attachments

        Activity

          People

            ceki Ceki Gülcü
            daniel.stankiewicz@asseco.pl Daniel Stankiewicz
            Votes:
            6 Vote for this issue
            Watchers:
            11 Start watching this issue

            Dates

              Created:
              Updated: