[prev in list] [next in list] [prev in thread] [next in thread]
List: logback-dev
Subject: [logback-dev] [JIRA] Commented: (LBCORE-221) Error in FileNamePattern::toRegex for index (Integer)
From: "tafit (JIRA)" <noreply-jira () qos ! ch>
Date: 2012-04-25 20:47:26
Message-ID: 798615648.1335386846521.JavaMail.ceki () pixie
[Download RAW message or body]
[ http://jira.qos.ch/browse/LBCORE-221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12398#action_12398 \
]
tafit commented on LBCORE-221:
------------------------------
When using SizeAndTimeBasedFNATP triggering policy and starting the application with \
more than 100 log files, logback incorrectly computes the highest counter value, \
which causes the problem with gzipping tmp files. The tmp files are left behind and \
are never gzipped. The gzipping starts after the internal counter reaches the number \
of files with which the application was started (eg. if the application started with \
existing 121 log files, the gzipping process will compress the first file after 22 \
failures, ie. after leaving 22 tmp files uncompressed). The gzipping process is also \
recovered when the date changes.
The logback writes Warnings about existing files to stdout, when debug="true" is set \
in configuration file.
The issue is easily reproducible - just create more than 100 log files with the \
filenames matching the pattern, start the application with logback and write to log \
enough entries so that it will roll.
Example configuration:
<appender name="EXAMPLE_APPENDER"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>example.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>example.log.%d.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date %level - %msg%n</pattern>
</encoder>
</appender>
The call:
File[] matchingFileArray = FileFilterUtil
.filesInFolderMatchingStemRegex(parentDir, stemRegex);
at lines 58-59 of SizeAndTimeBasedFNATP.java return only files with "%i" replaced by \
at most 2 digits, so the biggest number is 99. After that at line 65
currentPeriodsCounter = FileFilterUtil.findHighestCounter(matchingFileArray, \
stemRegex);
the method findHighestCounter cannot return the number bigger than 99. "%i" can be \
replaced by the number with at most 2 digits, because of the regex in \
FileNamePattern.java. The piece of the pattern "\\d{1,2}" is used in construction of \
the stemRegex at two places: lines 168 and 187.
https://github.com/ceki/logback/blob/master/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/FileNamePattern.java
Changing the regex from "\\d{1,2}" to "\\d{1,9}" fixes the issue.
> Error in FileNamePattern::toRegex for index (Integer)
> -----------------------------------------------------
>
> Key: LBCORE-221
> URL: http://jira.qos.ch/browse/LBCORE-221
> Project: logback-core
> Issue Type: Bug
> Components: Pattern, Rolling
> Affects Versions: 0.9.29
> Reporter: Dieter Mueller
> Assignee: Logback dev list
> Priority: Minor
>
> Deletion of old archived logs on rolling failes for index > 99.
> We have a process which logs much, which results in more than 99 log files per day \
> (config below), e.g. snowball_POLL_MSG_SRV_xdebug-old-2011-09-13.110.log.zip.
> On rolling event, only the first 99 were deleted, due to bug in
> FileNamePattern::toRegex for index (Integer):
> regEx: \d{1,2)
> which means digits with max length of 2.
> We need at least 3 digits:
> regEx: \d{1,3)
> better 4? ;-)
> Workarounds like increasing file size, or hourly-rollover to hold index lower than \
> 100 are not very wellcomed. Thanks in advance,
> Dieter Mueller.
> config:
> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
> <!-- rollover daily -->
> <fileNamePattern>${log.vm.file.prefix}_xdebug-old-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
> <maxHistory>1</maxHistory>
> <timeBasedFileNamingAndTriggeringPolicy \
> class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> \
> <maxFileSize>20MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy>
> </rollingPolicy>
--
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
_______________________________________________
logback-dev mailing list
logback-dev@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-dev
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic