
Author: ceki Date: Fri Aug 7 12:01:16 2009 New Revision: 2418 Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/ArchiveRemover.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java - copied, changed from r2417, /logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/TimeBasedCleaner.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithHistoryCleanTest.java - copied, changed from r2417, /logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java Removed: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/TimeBasedCleaner.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/DefaultTimeBasedFileNamingAndTriggeringPolicy.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicy.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java Log: - The TimeBasedCleaner class was refactored into the ArchiverRemover interface and DefailtArchiverRemover class. - Providing an archive cleaner is now a responsibility of any TimeBasedFileNamingAndTriggeringPolicy Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/DefaultTimeBasedFileNamingAndTriggeringPolicy.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/DefaultTimeBasedFileNamingAndTriggeringPolicy.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/DefaultTimeBasedFileNamingAndTriggeringPolicy.java Fri Aug 7 12:01:16 2009 @@ -12,6 +12,8 @@ import java.io.File; import java.util.Date; +import ch.qos.logback.core.rolling.helper.DefaultArchiveRemover; + /** * * @author Ceki Gülcü @@ -20,15 +22,15 @@ */ public class DefaultTimeBasedFileNamingAndTriggeringPolicy<E> extends TimeBasedFileNamingAndTriggeringPolicyBase<E> { - - + + @Override public void start() { super.start(); + archiveRemover = new DefaultArchiveRemover(tbrp.fileNamePattern, rc); started = true; } - public boolean isTriggeringEvent(File activeFile, final E event) { long time = getCurrentTime(); if (time >= nextCheck) { Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP.java Fri Aug 7 12:01:16 2009 @@ -102,5 +102,4 @@ this.maxFileSizeAsString = maxFileSize; this.maxFileSize = FileSize.valueOf(maxFileSize); } - } Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicy.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicy.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicy.java Fri Aug 7 12:01:16 2009 @@ -12,7 +12,7 @@ import java.util.Date; -import ch.qos.logback.core.rolling.helper.RollingCalendar; +import ch.qos.logback.core.rolling.helper.ArchiveRemover; import ch.qos.logback.core.spi.ContextAware; /** @@ -50,12 +50,10 @@ String getCurrentPeriodsFileNameWithoutCompressionSuffix(); /** - * Return the rolling calendar used by this instance. - * - * @return + * Return the archive remover appropriate for this instance. */ - RollingCalendar getRollingCalendar(); - + public ArchiveRemover getArchiveRemover(); + /** * Return the current time which is usually the value returned by * System.currentMillis(). However, for <b>testing</b> purposed this value Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java Fri Aug 7 12:01:16 2009 @@ -2,6 +2,7 @@ import java.util.Date; +import ch.qos.logback.core.rolling.helper.ArchiveRemover; import ch.qos.logback.core.rolling.helper.DateTokenConverter; import ch.qos.logback.core.rolling.helper.RollingCalendar; import ch.qos.logback.core.spi.ContextAwareBase; @@ -11,7 +12,7 @@ protected TimeBasedRollingPolicy<E> tbrp; - + protected ArchiveRemover archiveRemover = null; protected String elapsedPeriodsFileName; protected RollingCalendar rc; @@ -21,7 +22,6 @@ protected boolean isTimeForced = false; protected Date dateInCurrentPeriod = null; - protected long nextCheck; protected boolean started = false; @@ -104,8 +104,8 @@ } - public RollingCalendar getRollingCalendar() { - return rc; + public ArchiveRemover getArchiveRemover() { + return archiveRemover; } } Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java Fri Aug 7 12:01:16 2009 @@ -14,12 +14,12 @@ import java.util.concurrent.Future; import ch.qos.logback.core.CoreConstants; +import ch.qos.logback.core.rolling.helper.ArchiveRemover; import ch.qos.logback.core.rolling.helper.AsynchronousCompressor; import ch.qos.logback.core.rolling.helper.CompressionMode; import ch.qos.logback.core.rolling.helper.Compressor; import ch.qos.logback.core.rolling.helper.FileNamePattern; import ch.qos.logback.core.rolling.helper.RenameUtil; -import ch.qos.logback.core.rolling.helper.TimeBasedCleaner; /** * <code>TimeBasedRollingPolicy</code> is both easy to configure and quite @@ -38,15 +38,16 @@ // WCS: without compression suffix FileNamePattern fileNamePatternWCS; - + private Compressor compressor; private RenameUtil renameUtil = new RenameUtil(); Future<?> future; private int maxHistory = NO_DELETE_HISTORY; - private TimeBasedCleaner tbCleaner; + private ArchiveRemover archiveRemover; TimeBasedFileNamingAndTriggeringPolicy<E> timeBasedTriggering; + public void start() { // set the LR for our utility object renameUtil.setContext(this.context); @@ -65,26 +66,30 @@ compressor = new Compressor(compressionMode); compressor.setContext(context); - fileNamePatternWCS = new FileNamePattern(computeFileNameStr_WCS(fileNamePatternStr, - compressionMode), this.context); + fileNamePatternWCS = new FileNamePattern(computeFileNameStr_WCS( + fileNamePatternStr, compressionMode), this.context); addInfo("Will use the pattern " + fileNamePatternWCS + " for the active file"); - if(timeBasedTriggering == null) { + if (timeBasedTriggering == null) { timeBasedTriggering = new DefaultTimeBasedFileNamingAndTriggeringPolicy<E>(); } timeBasedTriggering.setContext(context); timeBasedTriggering.setTimeBasedRollingPolicy(this); timeBasedTriggering.start(); + // the maxHistory property is given to TimeBasedRollingPolicy instead of to + // the TimeBasedFileNamingAndTriggeringPolicy. This makes it more convenient + // for the user at the cost of inconsistency at the level of this code. if (maxHistory != NO_DELETE_HISTORY) { - tbCleaner = new TimeBasedCleaner(fileNamePattern, timeBasedTriggering.getRollingCalendar(), - maxHistory); + archiveRemover = timeBasedTriggering.getArchiveRemover(); + archiveRemover.setMaxHistory(maxHistory); } } - public void setTimeBasedFileNamingAndTriggeringPolicy(TimeBasedFileNamingAndTriggeringPolicy<E> timeBasedTriggering) { + public void setTimeBasedFileNamingAndTriggeringPolicy( + TimeBasedFileNamingAndTriggeringPolicy<E> timeBasedTriggering) { this.timeBasedTriggering = timeBasedTriggering; } @@ -92,7 +97,6 @@ return timeBasedTriggering; } - static String computeFileNameStr_WCS(String fileNamePatternStr, CompressionMode compressionMode) { int len = fileNamePatternStr.length(); @@ -127,8 +131,8 @@ } } - if (tbCleaner != null) { - tbCleaner.clean(new Date(timeBasedTriggering.getCurrentTime())); + if (archiveRemover != null) { + archiveRemover.clean(new Date(timeBasedTriggering.getCurrentTime())); } } @@ -171,7 +175,8 @@ if (parentsRawFileProperty != null) { return parentsRawFileProperty; } else { - return timeBasedTriggering.getCurrentPeriodsFileNameWithoutCompressionSuffix(); + return timeBasedTriggering + .getCurrentPeriodsFileNameWithoutCompressionSuffix(); } } Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/ArchiveRemover.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/ArchiveRemover.java Fri Aug 7 12:01:16 2009 @@ -0,0 +1,22 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2009, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ +package ch.qos.logback.core.rolling.helper; + +import java.util.Date; + +/** + * Given a date remove older archived log files. + * + * @author Ceki Gülcü + */ +public interface ArchiveRemover { + public void clean(Date now); + public void setMaxHistory(int maxHistory); +} \ No newline at end of file Copied: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java (from r2417, /logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/TimeBasedCleaner.java) ============================================================================== --- /logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/TimeBasedCleaner.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java Fri Aug 7 12:01:16 2009 @@ -13,22 +13,20 @@ import java.io.File; import java.util.Date; -public class TimeBasedCleaner { +public class DefaultArchiveRemover implements ArchiveRemover { FileNamePattern fileNamePattern; RollingCalendar rc; - int numberOfPeriods; - - public TimeBasedCleaner(FileNamePattern fileNamePattern, RollingCalendar rc, - int numberOfPeriods) { + int maxHistory; + int periodOffset; + + public DefaultArchiveRemover(FileNamePattern fileNamePattern, RollingCalendar rc) { this.fileNamePattern = fileNamePattern; this.rc = rc; - // - this.numberOfPeriods = -numberOfPeriods -1; } public void clean(Date now) { - Date date2delete = rc.getRelativeDate(now, numberOfPeriods); + Date date2delete = rc.getRelativeDate(now, periodOffset); String filename = fileNamePattern.convert(date2delete); @@ -39,4 +37,9 @@ } } + public void setMaxHistory(int maxHistory) { + this.maxHistory = maxHistory; + this.periodOffset = -maxHistory -1; + } + } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java Fri Aug 7 12:01:16 2009 @@ -5,7 +5,7 @@ @RunWith(Suite.class) @Suite.SuiteClasses( { RenamingTest.class, SizeBasedRollingTest.class, - TimeBasedRollingTest.class, TimeBasedRollingWithCleanTest.class, + TimeBasedRollingTest.class, TimeBasedRollingWithHistoryCleanTest.class, MultiThreadedRollingTest.class, SizeAndTimeBasedFNATP_Test.class, ch.qos.logback.core.rolling.helper.PackageTest.class }) Copied: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithHistoryCleanTest.java (from r2417, /logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java) ============================================================================== --- /logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithHistoryCleanTest.java Fri Aug 7 12:01:16 2009 @@ -15,7 +15,7 @@ import ch.qos.logback.core.layout.EchoLayout; import ch.qos.logback.core.util.CoreTestConstants; -public class TimeBasedRollingWithCleanTest { +public class TimeBasedRollingWithHistoryCleanTest { Context context = new ContextBase(); EchoLayout<Object> layout = new EchoLayout<Object>(); Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/DatePatternToRegexTest.java Fri Aug 7 12:01:16 2009 @@ -95,7 +95,7 @@ } String regex = dtc.toSRegex(); //System.out.println("expected="+expected); - System.out.println(regex); + //System.out.println(regex); assertTrue("[" + expected + "] does not match regex [" + regex + "]", expected.matches(regex)); } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java Fri Aug 7 12:01:16 2009 @@ -89,7 +89,7 @@ pp = new FileNamePattern("%d{yyyy.MM.dd HH:mm} foo", context); assertEquals("2003.05.20 17:55 foo", pp.convert(cal.getTime())); - } + } @Test public void withBackslash() {