[logback-dev] [GIT] Logback: the generic, reliable, fast and flexible logging framework. branch master updated. v_1.0.0-55-g0fe93ab

Joern Huxhorn jhuxhorn at googlemail.com
Wed Dec 21 10:23:24 CET 2011


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 <ceki at 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);
> +  }
> +
> + at 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 at qos.ch
> http://mailman.qos.ch/mailman/listinfo/logback-dev



More information about the logback-dev mailing list