[logback-dev] [JIRA] Resolved: (LBCORE-131) SizeAndTimeBasedFNATP will overwrite previous logging files when File property is set at RollingFileAppender

Ceki Gulcu (JIRA) noreply-jira at qos.ch
Wed Jun 30 22:27:16 CEST 2010


     [ http://jira.qos.ch/browse/LBCORE-131?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ceki Gulcu resolved LBCORE-131.
-------------------------------

    Fix Version/s: 0.9.24
       Resolution: Fixed

Tom, thank you for this excellent bug report. Issue fixed in http://github.com/ceki/logback/commit/e666c7d8a37



> SizeAndTimeBasedFNATP will overwrite previous logging files when File property is set at RollingFileAppender
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: LBCORE-131
>                 URL: http://jira.qos.ch/browse/LBCORE-131
>             Project: logback-core
>          Issue Type: Bug
>          Components: Rolling
>    Affects Versions: 0.9.18
>            Reporter: tomliliu
>            Assignee: Ceki Gulcu
>             Fix For: 0.9.24
>
>
> Here's the failure case:
> Configuration:
> <appender name="appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
> 	    <File>c:/var/tmp/base.log</File>
> 		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
> 			<FileNamePattern>
> 				c:/var/tmp/%d{yyyy-MM-dd_HH}.%i.log
>             </FileNamePattern>
>             <TimeBasedFileNamingAndTriggeringPolicy
>                 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
>                 <MaxFileSize>1KB</MaxFileSize>
>             </TimeBasedFileNamingAndTriggeringPolicy>
> 		</rollingPolicy>
> 		<layout class="ch.qos.logback.classic.PatternLayout">
> 			<Pattern>
> 				%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
>             </Pattern>
> 		</layout>
> 	</appender>
> Steps to reproduce:
> 1. Start the application
> 2. base.log was created.
> 3. yyyy-MM-dd_HH.0.log was created on rollover
> 4. rebounce the application
> 5. log to base.log
> 6. yyyy-MM-dd_HH.0.log was created on rollover, overwrite the previous yyyy-MM-dd_HH.0.log. Logging messages are lost.
> It looks like the root cause is that SizeAndtimeBasedFNATP does not update the currentPeriodsCounter when parentsRawFileProperty is set.
>  if (tbrp.getParentsRawFileProperty() == null) {
>       String regex = tbrp.fileNamePattern.toRegex(dateInCurrentPeriod);
>       String stemRegex = FileFilterUtil.afterLastSlash(regex);
>       computeCurrentPeriodsHighestCounterValue(stemRegex);
>  }
> SizeAndTimeBasedFNATP should update currentPeriodsCounter regardless whether parentsRawFileProperty is set or not. 
> Here's a fix works for me.
> SizeAndTimeBasedFNATP.java
> @Override
>   public void start() {
>     // we depend on certain fields having been initialized
>     // in super.start()
>     super.start();
>     archiveRemover = new SizeAndTimeBasedArchiveRemover(tbrp.fileNamePattern, rc);
>     archiveRemover.setContext(context);
>     
>     // we need to get the correct value of currentPeriodsCounter.
>     // usually the value is 0, unless the appender or the application
>     // is stopped and restarted within the same period
>     //if (tbrp.getParentsRawFileProperty() == null) {
>       String regex = tbrp.fileNamePattern.toRegex(dateInCurrentPeriod);
>       String stemRegex = FileFilterUtil.afterLastSlash(regex);
>       computeCurrentPeriodsHighestCounterValue(stemRegex);
>       
>     //}
>     started = true;
>   }
> void computeCurrentPeriodsHighestCounterValue(final String stemRegex) {
>     File file = new File(getCurrentPeriodsFileNameWithoutCompressionSuffix());
>     File parentDir = file.getParentFile();
>     File[] matchingFileArray = FileFilterUtil
>         .filesInFolderMatchingStemRegex(parentDir, stemRegex);
>     if (matchingFileArray == null || matchingFileArray.length == 0) {
>       return;
>     }
>     FileFilterUtil.reverseSortFileArrayByName(matchingFileArray);
>     currentPeriodsCounter = FileFilterUtil.extractCounter(matchingFileArray[0], stemRegex);
>     
>     //If parentsRawFileProperty is set, we should increment currentPeriodsCounter by one in order to avoid overwrite the last archive file.
>     if(tbrp.getParentsRawFileProperty() != null) {
>         currentPeriodsCounter ++;
>     }
>   }
> Thanks,
> Tom

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the logback-dev mailing list