
Thanks Joern. Fixed in https://github.com/ceki/logback/commit/a796df50 On 21.12.2011 10:23, Joern Huxhorn wrote:
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=0fe93ab52a11545a7f88fd367... http://github.com/ceki/logback/commit/0fe93ab52a11545a7f88fd367d4777d14c7336...
commit 0fe93ab52a11545a7f88fd367d4777d14c733606 Author: Ceki Gulcu<ceki@qos.ch> 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 logback-dev@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-dev
_______________________________________________ logback-dev mailing list logback-dev@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-dev
-- Ceki http://twitter.com/#!/ceki