You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ce...@apache.org on 2003/05/22 23:26:24 UTC

cvs commit: jakarta-log4j/src/java/org/apache/log4j Category.java

ceki        2003/05/22 14:26:24

  Modified:    src/java/org/apache/log4j/rolling RollingFileAppender.java
                        TimeBasedRollingPolicy.java
               tests/src/java/org/apache/log4j/rolling
                        TimeBasedRollingTestCase.java
               src/java/org/apache/log4j Category.java
  Log:
  
  - New tests cases for TimeBasedRollingPolicy which uncovered bugs.
  - Fixes to TimeBasedRollingPolicy.
  - Slightly improved docs for Category.java
  
  Revision  Changes    Path
  1.13      +9 -5      jakarta-log4j/src/java/org/apache/log4j/rolling/RollingFileAppender.java
  
  Index: RollingFileAppender.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/rolling/RollingFileAppender.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- RollingFileAppender.java	22 May 2003 16:22:40 -0000	1.12
  +++ RollingFileAppender.java	22 May 2003 21:26:24 -0000	1.13
  @@ -89,11 +89,13 @@
   
       if (rollingPolicy != null) {
         rollingPolicy.activateOptions();
  -      logger.debug("Active log file name: "+rollingPolicy.getActiveLogFileName());
  -      setFile(rollingPolicy.getActiveLogFileName());
  +      String afn = rollingPolicy.getActiveLogFileName();
  +      activeFile = new File(afn);
  +      logger.debug("Active log file name: "+afn);
  +      setFile(afn);
         
         // the activeFile variable is used by the triggeringPolicy.isTriggeringEvent method
  -      activeFile = new File(rollingPolicy.getActiveLogFileName());
  +      activeFile = new File(afn);
         super.activateOptions();
       } else {
         logger.warn("Please set a rolling policy");
  @@ -144,12 +146,14 @@
        class.
     */
     protected void subAppend(LoggingEvent event) {
  -    super.subAppend(event);
  -
  +    // The rollover check must precede actual writing. This is the 
  +    // only correct behavior for time driven triggers. 
       if (triggeringPolicy.isTriggeringEvent(activeFile)) {
         logger.debug("About to rollover");
         rollover();
       }
  +      
  +    super.subAppend(event);
     }
   
     public RollingPolicy getRollingPolicy() {
  
  
  
  1.4       +1 -0      jakarta-log4j/src/java/org/apache/log4j/rolling/TimeBasedRollingPolicy.java
  
  Index: TimeBasedRollingPolicy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/rolling/TimeBasedRollingPolicy.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TimeBasedRollingPolicy.java	22 May 2003 16:22:40 -0000	1.3
  +++ TimeBasedRollingPolicy.java	22 May 2003 21:26:24 -0000	1.4
  @@ -133,6 +133,7 @@
      *  
      */
     public String getActiveLogFileName() {
  +    logger.debug("getActiveLogFileName called");
       if (activeFileName == null) {
         return fileNamePattern.convert(now);
       } else {
  
  
  
  1.4       +148 -65   jakarta-log4j/tests/src/java/org/apache/log4j/rolling/TimeBasedRollingTestCase.java
  
  Index: TimeBasedRollingTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/tests/src/java/org/apache/log4j/rolling/TimeBasedRollingTestCase.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TimeBasedRollingTestCase.java	22 May 2003 16:22:40 -0000	1.3
  +++ TimeBasedRollingTestCase.java	22 May 2003 21:26:24 -0000	1.4
  @@ -60,6 +60,10 @@
   import org.apache.log4j.rolling.helpers.Compress;
   import org.apache.log4j.util.Compare;
   
  +import java.text.SimpleDateFormat;
  +
  +import java.util.Calendar;
  +
   
   /**
    *
  @@ -77,105 +81,184 @@
     }
   
     public void tearDown() {
  -    logger.debug("Tear down called.");
       LogManager.shutdown();
     }
   
  +  // Test rolling without compression, activeFileName left blank
     public void test1() throws Exception {
       Logger root = Logger.getRootLogger();
  -    root.addAppender(new ConsoleAppender(new PatternLayout("%d %5p %c{1} %m%n")));
  +    root.addAppender(
  +      new ConsoleAppender(new PatternLayout("%d{ABSOLUTE} %c{1} - %m%n")));
   
  -    PatternLayout layout = new PatternLayout("%d %5p %c{1} %m%n");
  +    PatternLayout layout = new PatternLayout("%c{1} - %m%n");
       RollingFileAppender rfa = new RollingFileAppender();
       rfa.setLayout(layout);
   
  +    String datePattern = "yyyy-MM-dd_HH_mm_ss";
  +
       TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy();
  -    tbrp.setFileNamePattern("output/test1%d{yyyy-MM-dd_HH_mm_ss}.gz");
  +    tbrp.setFileNamePattern("output/test1-%d{" + datePattern + "}");
       rfa.setRollingPolicy(tbrp);
       rfa.activateOptions();
  -    root.addAppender(rfa);
  +    logger.addAppender(rfa);
  +
  +    SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
  +    String[] filenames = new String[4];
  +
  +    Calendar cal = Calendar.getInstance();
  +
  +    for (int i = 0; i < 4; i++) {
  +      filenames[i] = "output/test1-" + sdf.format(cal.getTime());
  +      cal.add(Calendar.SECOND, 1);
  +    }
   
  +    root.debug("Waiting until next second and 100 millis.");
  +    delayUntilNextSecond(100);
  +    root.debug("Done waiting.");
   
       for (int i = 0; i < 5; i++) {
  +      logger.debug("Hello---" + i);
         Thread.sleep(500);
  -      if (i < 10) {
  -        logger.debug("Hello---" + i);
  -      } else if (i < 100) {
  -        logger.debug("Hello--" + i);
  -      } else {
  -        logger.debug("Hello-" + i);
  -      }
       }
   
  -    // The File.length() method is not accurate under Windows    
  +    for (int i = 0; i < 4; i++) {
  +      //System.out.println(i + " expected filename [" + filenames[i] + "].");
  +    }
  +
  +    for (int i = 0; i < 4; i++) {
  +      Compare.compare(filenames[i], "witness/tbr-test1." + i);
  +    }
     }
  -  
  +
  +  // No compression with stop/restart, activeFileName left blank
     public void test2() throws Exception {
  -      Logger root = Logger.getRootLogger();
  -      root.addAppender(new ConsoleAppender(new PatternLayout()));
  +    Logger root = Logger.getRootLogger();
  +    root.addAppender(
  +      new ConsoleAppender(new PatternLayout("%d{ABSOLUTE} %c{1} - %m%n")));
   
  -      // We purposefully use the \n as the line separator. 
  -      // This makes the regression test system indepent.
  -      PatternLayout layout = new PatternLayout("%d %c %m\n");
  -      RollingFileAppender rfa = new RollingFileAppender();
  -      rfa.setLayout(layout);
  -
  -      TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy();
  -      tbrp.setFileNamePattern("output/test2%d{yyyy-MM-dd_HH_mm_ss}");
  -      rfa.setRollingPolicy(tbrp);
  -      rfa.activateOptions();
  -      root.addAppender(rfa);
  -
  -      // Write exactly 10 bytes with each log
  -      for (int i = 0; i < 30; i++) {
  -        Thread.sleep(100);
  -        if (i < 10) {
  -          logger.debug("Hello---" + i);
  -        } else if (i < 100) {
  -          logger.debug("Hello--" + i);
  -        } else {
  -          logger.debug("Hello-" + i);
  -        }
  -      }
  +    String datePattern = "yyyy-MM-dd_HH_mm_ss";
  +
  +    PatternLayout layout1 = new PatternLayout("%c{1} - %m%n");
  +    RollingFileAppender rfa1 = new RollingFileAppender();
  +    rfa1.setLayout(layout1);
  +    TimeBasedRollingPolicy tbrp1 = new TimeBasedRollingPolicy();
  +    tbrp1.setFileNamePattern("output/test2-%d{" + datePattern + "}");
  +    rfa1.setRollingPolicy(tbrp1);
  +    rfa1.activateOptions();
  +    logger.addAppender(rfa1);
  +
  +    SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
  +    String[] filenames = new String[4];
  +
  +    Calendar cal = Calendar.getInstance();
  +
  +    for (int i = 0; i < 4; i++) {
  +      filenames[i] = "output/test2-" + sdf.format(cal.getTime());
  +      cal.add(Calendar.SECOND, 1);
  +    }
  +
  +    root.debug("Waiting until next second and 100 millis.");
  +    delayUntilNextSecond(100);
  +    root.debug("Done waiting.");
  +
  +    for (int i = 0; i <= 2; i++) {
  +      logger.debug("Hello---" + i);
  +      Thread.sleep(500);
  +    }
  +
  +    logger.removeAppender(rfa1);
  +    rfa1.close();
  +
  +    PatternLayout layout2 = new PatternLayout("%c{1} - %m%n");
  +    RollingFileAppender rfa2 = new RollingFileAppender();
  +    rfa2.setLayout(layout2);
  +    TimeBasedRollingPolicy tbrp2 = new TimeBasedRollingPolicy();
  +    tbrp2.setFileNamePattern("output/test2-%d{" + datePattern + "}");
  +    rfa2.setRollingPolicy(tbrp2);
  +    rfa2.activateOptions();
  +    logger.addAppender(rfa2);
   
  -      // The File.length() method is not accurate under Windows    
  +    for (int i = 0; i < 4; i++) {
  +      //System.out.println(i+" expected filename ["+filenames[i]+"].");
       }
   
  +    for (int i = 3; i <= 4; i++) {
  +      logger.debug("Hello---" + i);
  +      Thread.sleep(500);
  +    }
  +
  +    for (int i = 0; i < 4; i++) {
  +      Compare.compare(filenames[i], "witness/tbr-test2."+i);
  +    }
  +  }
   
     public void test3() throws Exception {
  -      Logger root = Logger.getRootLogger();
  -      root.addAppender(new ConsoleAppender(new PatternLayout()));
  +    Logger root = Logger.getRootLogger();
  +    root.addAppender(new ConsoleAppender(new PatternLayout()));
  +
  +    // We purposefully use the \n as the line separator. 
  +    // This makes the regression test system indepent.
  +    PatternLayout layout = new PatternLayout("%d %c %m\n");
  +    RollingFileAppender rfa = new RollingFileAppender();
  +    rfa.setLayout(layout);
  +
  +    TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy();
  +    tbrp.setFileNamePattern("output/test2%d{yyyy-MM-dd_HH_mm}.gz");
  +    rfa.setRollingPolicy(tbrp);
  +    rfa.activateOptions();
  +    root.addAppender(rfa);
   
  -      // We purposefully use the \n as the line separator. 
  -      // This makes the regression test system indepent.
  -      PatternLayout layout = new PatternLayout("%d %c %m\n");
  -      RollingFileAppender rfa = new RollingFileAppender();
  -      rfa.setLayout(layout);
  -
  -      TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy();
  -      tbrp.setFileNamePattern("output/test2%d{yyyy-MM-dd_HH_mm}.gz");
  -      rfa.setRollingPolicy(tbrp);
  -      rfa.activateOptions();
  -      root.addAppender(rfa);
  -
  -      // Write exactly 10 bytes with each log
  -      for (int i = 0; i < 20; i++) {
  -        Thread.sleep(1000);
  -        if (i < 10) {
  -          logger.debug("Hello---" + i);
  -        } else if (i < 100) {
  -          logger.debug("Hello--" + i);
  -        }
  +    // Write exactly 10 bytes with each log
  +    for (int i = 0; i < 20; i++) {
  +      Thread.sleep(5000);
  +
  +      if (i < 10) {
  +        logger.debug("Hello---" + i);
  +      } else if (i < 100) {
  +        logger.debug("Hello--" + i);
         }
       }
  +  }
  +
  +  void delayUntilNextSecond(int millis) {
  +    long now = System.currentTimeMillis();
  +    Calendar cal = Calendar.getInstance();
  +    cal.setTimeInMillis(now);
  +
  +    cal.set(Calendar.MILLISECOND, millis);
  +    cal.add(Calendar.SECOND, 1);
  +
  +    long next = cal.getTimeInMillis();
  +
  +    try {
  +      Thread.sleep(next - now);
  +    } catch (Exception e) {
  +    }
  +  }
  +
  +  void delayUntilNextMinute(int seconds) {
  +    long now = System.currentTimeMillis();
  +    Calendar cal = Calendar.getInstance();
  +    cal.setTimeInMillis(now);
  +
  +    cal.set(Calendar.SECOND, seconds);
  +    cal.add(Calendar.MINUTE, 1);
  +
  +    long next = cal.getTimeInMillis();
  +
  +    try {
  +      Thread.sleep(next - now);
  +    } catch (Exception e) {
  +    }
  +  }
   
     public static Test suite() {
       TestSuite suite = new TestSuite();
   
       //suite.addTest(new TimeBasedRollingTestCase("test1"));
  -    //suite.addTest(new TimeBasedRollingTestCase("test2"));
  -    suite.addTest(new TimeBasedRollingTestCase("test3"));
  -    
  +    suite.addTest(new TimeBasedRollingTestCase("test2"));
  +
  +    //suite.addTest(new TimeBasedRollingTestCase("test3"));
       return suite;
     }
   }
  
  
  
  1.73      +7 -5      jakarta-log4j/src/java/org/apache/log4j/Category.java
  
  Index: Category.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Category.java,v
  retrieving revision 1.72
  retrieving revision 1.73
  diff -u -r1.72 -r1.73
  --- Category.java	18 Mar 2003 19:46:30 -0000	1.72
  +++ Category.java	22 May 2003 21:26:24 -0000	1.73
  @@ -948,10 +948,8 @@
   
     /**
      * Remove all previously added appenders from this Category instance.
  -   * 
  -   * <p>
  -   * This is useful when re-reading configuration information.
  -   * </p>
  +   * <p>Removed appenders are closed.</p>
  +   * <p>This is useful when re-reading configuration information.</p>
      */
     public synchronized void removeAllAppenders() {
       if (aai != null) {
  @@ -962,7 +960,9 @@
   
     /**
      * Remove the appender passed as parameter form the list of appenders.
  -   *
  +   * 
  +   * <p>Does <em>not</em> close the appender.</p>
  +   * 
      * @since 0.8.2
      */
     public synchronized void removeAppender(Appender appender) {
  @@ -976,6 +976,8 @@
     /**
      * Remove the appender with the name passed as parameter form the list of
      * appenders.
  +   *
  +   *<p>Does <em>not</em> close the appender.</p>
      *
      * @since 0.8.2
      */
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-dev-help@jakarta.apache.org