[
http://jira.qos.ch/browse/LBCORE-226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ceki Gulcu resolved LBCORE-226.
-------------------------------
Resolution: Fixed
Fixed by [1, 2]. TimeBasedRollingPolicy now admits a new boolean property
called cleanHistoryOnStart. If cleanHistoryOnStart is set true, archival
removal is performed at appender start up, which handles the case of
short-lived applications described in this issue.
[1] https://github.com/ceki/logback/commit/be9513c
[2] https://github.com/ceki/logback/commit/14125a6
> TimeBasedRollingPolicy does not trigger at application startup - MaxHistory
> not working
> ---------------------------------------------------------------------------------------
>
> Key: LBCORE-226
> URL: http://jira.qos.ch/browse/LBCORE-226
> Project: logback-core
> Issue Type: Bug
> Components: Rolling
> Affects Versions: 0.9.30
> Environment: Windows XP, Java 1.6.0_27
> Reporter: Bruce E. Irving
> Assignee: Ceki Gulcu
>
> I am using the RollingFileAppender with TimeBasedRolliingPolicy. The
> application is a desktop utility that may be run several times per day but is
> almost never running at midnight when the roll would normally occur.
> The log file naming is working correctly - each day's file is date stamped,
> but the MaxHistory is not working at all since it is not enforced at app
> startup.
> Pertinent config section:
> <appender name="FILE"
> class="ch.qos.logback.core.rolling.RollingFileAppender">
> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
> <fileNamePattern>MyApp_%d.log</fileNamePattern> <!-- Daily rollover
> -->
> <maxHistory>7</maxHistory> <!-- keep 1 week history -->
> </rollingPolicy>
> <encoder>
> <pattern>%date %-5level [%thread] %logger{10} %msg%n</pattern>
> </encoder>
> </appender>
> I found what I believe is the source of the issue in
> TimeBasedFileNamingAndTriggeringPolicyBase:
> public void start() {
> ...
> setDateInCurrentPeriod(new Date(getCurrentTime()));
> if (tbrp.getParentsRawFileProperty() != null) {
> File currentFile = new File(tbrp.getParentsRawFileProperty());
> if (currentFile.exists() && currentFile.canRead()) {
> setDateInCurrentPeriod(new Date(currentFile.lastModified()));
> }
> }
> addInfo("Setting initial period to " + dateInCurrentPeriod);
> computeNextCheck();
> }
> Since there is no parentsRawFileProperty, this uses the current time and sets
> the next check at midnight tonight. Therefore the check is not run at
> startup, and in my case is never run. This would work fine if
> dateInCurrentPeriod was set to anything before today. I would suggest the
> following change:
> public void start() {
> ...
> File currentFile = new File(tbrp.getActiveFileName()); // Use same logic
> if ParentsRawFileProperty is set or not.
> if (currentFile.exists() && currentFile.canRead()) {
> setDateInCurrentPeriod(new Date(currentFile.lastModified()));
> } else {
> setDateInCurrentPeriod(0); // No current file found, force a triggering
> event
> // or if the above is too brute-force:
> setDateInCurrentPeriod(rc.getRelativeDate(new Date(), -1));
> }
> addInfo("Setting initial period to " + dateInCurrentPeriod);
> computeNextCheck();
> }
> Note - this was originally reported as a comment on LBCORE-147; moved here to
> be tracked as a separate issue.
> Thanks,
> -Bruce
--
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
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-dev