ch.qos.logback.core.rolling.helper.FileNamePatternTest.convertMultipleDates is currently failing with the following message:
expected:<foo[]2003.05/2003.05.20.t...> but was:<foo[-]2003.05/2003.05.20.t...> Cheers, Joern. On 20.12.2011, at 19:42, Gitbot wrote: > This is an automated email from the git hooks/post-receive script. It was > generated because a ref change was pushed to the repository containing > the project "Logback: the generic, reliable, fast and flexible logging > framework.". > > The branch, master has been updated > via 0fe93ab52a11545a7f88fd367d4777d14c733606 (commit) > from fef529f87d72e94a582e5cd515c7acaddf01e07e (commit) > > Those revisions listed above that are new to this repository have > not appeared on any other notification email; so we list those > revisions in full, below. > > - Log ----------------------------------------------------------------- > http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=0fe93ab52a11545a7f88fd367d4777d14c733606 > http://github.com/ceki/logback/commit/0fe93ab52a11545a7f88fd367d4777d14c733606 > > commit 0fe93ab52a11545a7f88fd367d4777d14c733606 > Author: Ceki Gulcu <[email protected]> > Date: Tue Dec 20 19:41:28 2011 +0100 > > Added support for multiple %d tokens in FileNamePattern > > diff --git a/logback-classic/src/test/resources/TWO_DATE_logback-test.xml > b/logback-classic/src/test/resources/TWO_DATE_logback-test.xml > new file mode 100644 > index 0000000..d2c3444 > --- /dev/null > +++ b/logback-classic/src/test/resources/TWO_DATE_logback-test.xml > @@ -0,0 +1,21 @@ > +<configuration> > + <statusListener > class="ch.qos.logback.core.status.OnConsoleStatusListener"/> > + > + <appender name="FILE" > class="ch.qos.logback.core.rolling.RollingFileAppender"> > + <file>test.log</file> > + > + > + <rollingPolicy > class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> > + <!-- rollover every minute --> > + <fileNamePattern>bla-%d{yyyy-MM-dd, > SECONDARY}/app.%d{yyyy-MM-dd'T'HH_mm}.log</fileNamePattern> > + </rollingPolicy> > + > + <encoder> > + <pattern>%d{"yyyy-MM-dd HH:mm:ss,SSS"} [%thread] %-5level %logger{36} > - %msg%n%xEx</pattern> > + </encoder> > + </appender> > + > + <root level="DEBUG"> > + <appender-ref ref="FILE"/> > + </root> > +</configuration> > \ No newline at end of file > diff --git > a/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java > > b/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java > index b1690ad..b5a05da 100644 > --- > a/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java > +++ > b/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.java > @@ -41,7 +41,7 @@ abstract public class > TimeBasedFileNamingAndTriggeringPolicyBase<E> extends > } > > public void start() { > - DateTokenConverter dtc = tbrp.fileNamePattern.getDateTokenConverter(); > + DateTokenConverter dtc = > tbrp.fileNamePattern.getPrimaryDateTokenConverter(); > if (dtc == null) { > throw new IllegalStateException("FileNamePattern [" > + tbrp.fileNamePattern.getPattern() > diff --git > a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java > > b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java > index 582336d..5225d56 100644 > --- > a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java > +++ > b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DateTokenConverter.java > @@ -14,6 +14,7 @@ > package ch.qos.logback.core.rolling.helper; > > import java.util.Date; > +import java.util.List; > > import ch.qos.logback.core.CoreConstants; > import ch.qos.logback.core.pattern.DynamicConverter; > @@ -30,16 +31,27 @@ public class DateTokenConverter<E> extends > DynamicConverter<E> implements MonoTy > * The conversion word/character with which this converter is registered. > */ > public final static String CONVERTER_KEY = "d"; > + public final static String SECONDARY_TOKEN = "SECONDARY"; > public static final String DEFAULT_DATE_PATTERN = > CoreConstants.DAILY_DATE_PATTERN; > > private String datePattern; > private CachingDateFormatter cdf; > - > + // is this token converter primary or secondary? Only the primary converter > + // determines the rolling period > + private boolean secondary = false; > public void start() { > this.datePattern = getFirstOption(); > if (this.datePattern == null) { > this.datePattern = DEFAULT_DATE_PATTERN; > } > + > + final List<String> optionList = getOptionList(); > + if(optionList != null && optionList.size()> 1) { > + String secondOption = optionList.get(1); > + if(SECONDARY_TOKEN.equalsIgnoreCase(secondOption)) { > + secondary = true; > + } > + } > cdf = new CachingDateFormatter(datePattern); > } > > @@ -72,4 +84,8 @@ public class DateTokenConverter<E> extends > DynamicConverter<E> implements MonoTy > DatePatternToRegexUtil toRegex = new DatePatternToRegexUtil(datePattern); > return toRegex.toRegex(); > } > + > + public boolean isPrimary() { > + return !secondary; > + } > } > diff --git > a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java > > b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java > index 85b494a..8253844 100644 > --- > a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java > +++ > b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/DefaultArchiveRemover.java > @@ -75,7 +75,7 @@ abstract public class DefaultArchiveRemover extends > ContextAwareBase implements > abstract void cleanByPeriodOffset(Date now, int periodOffset); > > boolean computeParentCleaningFlag(FileNamePattern fileNamePattern) { > - DateTokenConverter dtc = fileNamePattern.getDateTokenConverter(); > + DateTokenConverter dtc = fileNamePattern.getPrimaryDateTokenConverter(); > // if the date pattern has a /, then we need parent cleaning > if (dtc.getDatePattern().indexOf('/') != -1) { > return true; > diff --git > a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/FileNamePattern.java > > b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/FileNamePattern.java > index 67f207b..dab1a72 100644 > --- > a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/FileNamePattern.java > +++ > b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/FileNamePattern.java > @@ -81,12 +81,15 @@ public class FileNamePattern extends ContextAwareBase { > return pattern; > } > > - public DateTokenConverter getDateTokenConverter() { > + public DateTokenConverter getPrimaryDateTokenConverter() { > Converter p = headTokenConverter; > > while (p != null) { > if (p instanceof DateTokenConverter) { > - return (DateTokenConverter) p; > + DateTokenConverter dtc = (DateTokenConverter) p; > + // only primary converters should be returned as > + if(dtc.isPrimary()) > + return dtc; > } > > p = p.getNext(); > diff --git > a/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBaseTest.java > > b/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBaseTest.java > new file mode 100644 > index 0000000..7d574a4 > --- /dev/null > +++ > b/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBaseTest.java > @@ -0,0 +1,68 @@ > +package ch.qos.logback.core.rolling; > + > +import ch.qos.logback.core.Context; > +import ch.qos.logback.core.ContextBase; > +import org.junit.Before; > +import org.junit.Test; > + > +import java.util.logging.Logger; > + > +import static org.junit.Assert.assertEquals; > + > +/** > + * @author Ceki Gücü > + */ > +public class TimeBasedFileNamingAndTriggeringPolicyBaseTest { > + > + static long MILLIS_IN_MINUTE = 60*1000; > + > + Context context = new ContextBase(); > + RollingFileAppender rfa = new RollingFileAppender(); > + TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy(); > + DefaultTimeBasedFileNamingAndTriggeringPolicy timeBasedFNATP = new > DefaultTimeBasedFileNamingAndTriggeringPolicy(); > + > + @Before > + public void setUp() { > + rfa.setContext(context); > + tbrp.setContext(context); > + timeBasedFNATP.setContext(context); > + > + rfa.setRollingPolicy(tbrp); > + tbrp.setParent(rfa); > + tbrp.setTimeBasedFileNamingAndTriggeringPolicy(timeBasedFNATP); > + timeBasedFNATP.setTimeBasedRollingPolicy(tbrp); > + } > + > + @Test > + public void singleDate() { > + // Tuesday December 20th 17:59:01 CET 2011 > + long startTime = 1324400341553L; > + tbrp.setFileNamePattern("foo-%d{yyyy-MM'T'mm}.log"); > + tbrp.start(); > + > + timeBasedFNATP.setCurrentTime(startTime); > + timeBasedFNATP.start(); > + > + timeBasedFNATP.setCurrentTime(startTime+MILLIS_IN_MINUTE); > + timeBasedFNATP.isTriggeringEvent(null, null); > + String elapsedPeriodsFileName = > timeBasedFNATP.getElapsedPeriodsFileName(); > + assertEquals("foo-2011-12T59.log", elapsedPeriodsFileName); > + } > + > +@Test > + public void multiDate() { > + // Tuesday December 20th 17:59:01 CET 2011 > + long startTime = 1324400341553L; > + tbrp.setFileNamePattern("foo-%d{yyyy-MM, SECONDARY}/%d{mm}.log"); > + tbrp.start(); > + > + timeBasedFNATP.setCurrentTime(startTime); > + timeBasedFNATP.start(); > + > + timeBasedFNATP.setCurrentTime(startTime+MILLIS_IN_MINUTE); > + timeBasedFNATP.isTriggeringEvent(null, null); > + String elapsedPeriodsFileName = > timeBasedFNATP.getElapsedPeriodsFileName(); > + assertEquals("foo-2011-12/59.log", elapsedPeriodsFileName); > + } > + > +} > diff --git > a/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java > > b/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java > index 7f069cf..8a35f15 100644 > --- > a/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java > +++ > b/logback-core/src/test/java/ch/qos/logback/core/rolling/helper/FileNamePatternTest.java > @@ -17,6 +17,7 @@ import static org.junit.Assert.assertEquals; > > import java.util.Calendar; > > +import ch.qos.logback.core.util.StatusPrinter; > import org.junit.Test; > > import ch.qos.logback.core.Context; > @@ -139,4 +140,13 @@ public class FileNamePatternTest { > assertEquals("foo-\\d{4}\\.\\d{2}\\.\\d{2}T-\\d{1,2}.txt", regex); > } > } > + > + @Test > + public void convertMultipleDates() { > + Calendar cal = Calendar.getInstance(); > + cal.set(2003, 4, 20, 17, 55); > + FileNamePattern fnp = new FileNamePattern("foo-%d{yyyy.MM, > SECONDARY}/%d{yyyy.MM.dd}.txt", context); > + assertEquals("foo2003.05/2003.05.20.txt", fnp.convert(cal.getTime())); > + > + } > } > > ----------------------------------------------------------------------- > > Summary of changes: > .../src/test/resources/TWO_DATE_logback-test.xml | 21 ++++++ > ...TimeBasedFileNamingAndTriggeringPolicyBase.java | 2 +- > .../core/rolling/helper/DateTokenConverter.java | 18 +++++- > .../core/rolling/helper/DefaultArchiveRemover.java | 2 +- > .../core/rolling/helper/FileNamePattern.java | 7 ++- > ...BasedFileNamingAndTriggeringPolicyBaseTest.java | 68 ++++++++++++++++++++ > .../core/rolling/helper/FileNamePatternTest.java | 10 +++ > 7 files changed, 123 insertions(+), 5 deletions(-) > create mode 100644 > logback-classic/src/test/resources/TWO_DATE_logback-test.xml > create mode 100644 > logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBaseTest.java > > > hooks/post-receive > -- > Logback: the generic, reliable, fast and flexible logging framework. > _______________________________________________ > logback-dev mailing list > [email protected] > http://mailman.qos.ch/mailman/listinfo/logback-dev _______________________________________________ logback-dev mailing list [email protected] http://mailman.qos.ch/mailman/listinfo/logback-dev
