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