ceki 2004/11/20 03:27:19
Modified: src/java/org/apache/log4j/spi/location LocationInfo.java
LegacyExtractor.java
StackTraceElementExtractor.java
tests/input/pattern patternLayout11.properties
patternLayout14.properties
patternLayout.mdc.1.properties
patternLayout5.properties patternLayout4.properties
patternLayout3.properties
patternLayout12.properties
patternLayout9.properties patternLayout7.properties
patternLayout13.properties
patternLayout8.properties patternLayout1.properties
patternLayout10.properties
patternLayout2.properties patternLayout6.properties
src/java/org/apache/log4j PropertyConfigurator.java
AsyncAppender.java
src/java/org/apache/log4j/pattern NamedPatternConverter.java
ClassNamePatternConverter.java
src/java/org/apache/log4j/spi RootCategory.java
RootLogger.java LoggingEvent.java
src/java/org/apache/log4j/varia ListAppender.java
Log:
- Ensuring that test cases run correctly.
- Fixed problem with null return values in LocationInfo and
StackElementExtractor.
- Fixed problem deferred logging in o.a.l.varia.ListAppender
Revision Changes Path
1.5 +3 -3
logging-log4j/src/java/org/apache/log4j/spi/location/LocationInfo.java
Index: LocationInfo.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/spi/location/LocationInfo.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- LocationInfo.java 18 Nov 2004 11:33:13 -0000 1.4
+++ LocationInfo.java 20 Nov 2004 11:27:18 -0000 1.5
@@ -99,15 +99,15 @@
location information, especially between the parentheses.
*/
- public LocationInfo(Throwable t, String fqnOfCallingClass) {
+ public LocationInfo(Throwable t, String fqnOfInvokingClass) {
if (t == null) {
return;
}
if(PlatformInfo.hasStackTraceElement()) {
- StackTraceElementExtractor.extract(this, t, fqnOfCallingClass);
+ StackTraceElementExtractor.extract(this, t, fqnOfInvokingClass);
} else {
- LegacyExtractor.extract(this, t, fqnOfCallingClass);
+ LegacyExtractor.extract(this, t, fqnOfInvokingClass);
}
}
1.5 +3 -3
logging-log4j/src/java/org/apache/log4j/spi/location/LegacyExtractor.java
Index: LegacyExtractor.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/spi/location/LegacyExtractor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- LegacyExtractor.java 10 Sep 2004 15:09:19 -0000 1.4
+++ LegacyExtractor.java 20 Nov 2004 11:27:18 -0000 1.5
@@ -40,11 +40,11 @@
private LegacyExtractor() {
}
- static void extract(LocationInfo li, Throwable t, String
fqnOfCallingClass) {
+ static void extract(LocationInfo li, Throwable t, String
fqnOfInvokingClass) {
// on AS400, package path separator in stack trace is not dot '.',
// but slash '/'
if (PlatformInfo.isOnAS400()) {
- fqnOfCallingClass = fqnOfCallingClass.replace('.', '/');
+ fqnOfInvokingClass = fqnOfInvokingClass.replace('.', '/');
}
String s;
@@ -67,7 +67,7 @@
// This method of searching may not be fastest but it's safer
// than counting the stack depth which is not guaranteed to be
// constant across JVM implementations.
- ibegin = s.lastIndexOf(fqnOfCallingClass);
+ ibegin = s.lastIndexOf(fqnOfInvokingClass);
if (ibegin == -1) {
return;
1.2 +22 -9
logging-log4j/src/java/org/apache/log4j/spi/location/StackTraceElementExtractor.java
Index: StackTraceElementExtractor.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/spi/location/StackTraceElementExtractor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StackTraceElementExtractor.java 7 Sep 2004 18:58:42 -0000 1.1
+++ StackTraceElementExtractor.java 20 Nov 2004 11:27:18 -0000 1.2
@@ -57,7 +57,7 @@
}
}
- static void extract(LocationInfo li, Throwable t, String
fqnOfCallingClass) {
+ static void extract(LocationInfo li, Throwable t, String
fqnOfInvokingClass) {
if (t == null) {
return;
}
@@ -69,20 +69,32 @@
boolean match = false;
for (int i = 0; i < stes.length; i++) {
if (((String) getClassName.invoke(stes[i], nullArgs)).equals(
- fqnOfCallingClass)) {
+ fqnOfInvokingClass)) {
match = true;
} else if(match) {
location = stes[i];
break;
- }
+ }
}
} catch (Throwable e) {
- // some trouble worth announcing...
+ // Extraction failed, not much we could do now. We can't event log
this
+ // failure because if there is one failure, there may be many others
which
+ // are likely to follow. As location extraction is done on a
best-effort
+ // basis, silence is preferable to overwhelming the user...
+ }
+
+ // If we failed to extract the location line, then default to
LocationInfo.NA
+ if(location == null) {
+ li.className = LocationInfo.NA;
+ li.fileName = LocationInfo.NA;
+ li.lineNumber = LocationInfo.NA;
+ li.methodName = LocationInfo.NA;
+ } else { // otherwise, get the real info
+ setClassName(li, location);
+ setFileName(li, location);
+ setMethodName(li, location);
+ setLineNumber(li, location);
}
- setClassName(li, location);
- setFileName(li, location);
- setMethodName(li, location);
- setLineNumber(li, location);
}
/**
@@ -93,7 +105,8 @@
try {
li.className = (String) getClassName.invoke(location, nullArgs);
} catch (Throwable e) {
- } // this should work, shouldn't it?
+ li.className = LocationInfo.NA;
+ }
}
static void setFileName(LocationInfo li, Object location) {
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout11.properties
Index: patternLayout11.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout11.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout11.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout11.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%-5p [%t] %c{2}: %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%-5p [%t] %c{2}: %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +5 -0
logging-log4j/tests/input/pattern/patternLayout14.properties
Index: patternLayout14.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout14.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout14.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout14.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -4,3 +4,8 @@
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=pattern.MyPatternLayout
log4j.appender.testAppender.layout.ConversionPattern=%5p %-4counter - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout.mdc.1.properties
Index: patternLayout.mdc.1.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout.mdc.1.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout.mdc.1.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout.mdc.1.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%-5p - %m %X
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%-5p - %m %X%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout5.properties
Index: patternLayout5.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout5.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout5.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout5.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%d{dd MMM yyyy
HH:mm:ss,SSS} [%t] %-5p %.16c - %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%d{dd MMM yyyy
HH:mm:ss,SSS} [%t] %-5p %.16c - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout4.properties
Index: patternLayout4.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout4.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout4.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout4.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%d{DATE} [%t] %-5p
%.16c - %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%d{DATE} [%t] %-5p
%.16c - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout3.properties
Index: patternLayout3.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout3.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout3.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout3.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%d{yyyy-MM-dd
HH:mm:ss,SSS} [%t] %-5p %.16c - %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%d{yyyy-MM-dd
HH:mm:ss,SSS} [%t] %-5p %.16c - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout12.properties
Index: patternLayout12.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout12.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout12.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout12.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p %C.%M(%F:%L):
%m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p %C.%M(%F:%L):
%m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout9.properties
Index: patternLayout9.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout9.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout9.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout9.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p %.16c : %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p %.16c : %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +5 -0
logging-log4j/tests/input/pattern/patternLayout7.properties
Index: patternLayout7.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout7.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout7.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout7.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -4,3 +4,8 @@
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.testAppender.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%t]
%-5p %.16c - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout13.properties
Index: patternLayout13.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout13.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout13.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout13.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File= output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p
%C{3}.%M(%F:%L): %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p
%C{3}.%M(%F:%L): %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout8.properties
Index: patternLayout8.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout8.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout8.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout8.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%r [%t] %-5p %.16c -
%m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%r [%t] %-5p %.16c -
%m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +7 -2
logging-log4j/tests/input/pattern/patternLayout1.properties
Index: patternLayout1.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout1.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout1.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout1.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -1,6 +1,11 @@
-log4j.rootCategory=DEBUG, testAppender
+log4j.rootLogger=DEBUG, testAppender
log4j.appender.testAppender=org.apache.log4j.FileAppender
log4j.appender.testAppender.file=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%-5p - %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%-5p - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +6 -1
logging-log4j/tests/input/pattern/patternLayout10.properties
Index: patternLayout10.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout10.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout10.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout10.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,9 @@
log4j.appender.testAppender.File= output/temp
log4j.appender.testAppender.Append= false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p %l: %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=[%t] %-5p %l: %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +5 -0
logging-log4j/tests/input/pattern/patternLayout2.properties
Index: patternLayout2.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout2.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout2.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout2.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -4,3 +4,8 @@
log4j.appender.testAppender.Append= false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.testAppender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p
%.16c - %m%n
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.2 +7 -1
logging-log4j/tests/input/pattern/patternLayout6.properties
Index: patternLayout6.properties
===================================================================
RCS file:
/home/cvs/logging-log4j/tests/input/pattern/patternLayout6.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- patternLayout6.properties 18 Nov 2004 19:27:06 -0000 1.1
+++ patternLayout6.properties 20 Nov 2004 11:27:18 -0000 1.2
@@ -3,4 +3,10 @@
log4j.appender.testAppender.File=output/temp
log4j.appender.testAppender.Append=false
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.testAppender.layout.ConversionPattern=%d{ABSOLUTE} [%t] %-5p
%.16c - %m%n
\ No newline at end of file
+log4j.appender.testAppender.layout.ConversionPattern=%d{ABSOLUTE} [%t] %-5p
%.16c - %m%n
+
+
+# Prevent internal log4j DEBUG messages from polluting the output.
+log4j.logger.org.apache.log4j.PropertyConfigurator=INFO
+log4j.logger.org.apache.log4j.config.PropertySetter=INFO
+log4j.logger.org.apache.log4j.FileAppender=INFO
1.71 +77 -55
logging-log4j/src/java/org/apache/log4j/PropertyConfigurator.java
Index: PropertyConfigurator.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/PropertyConfigurator.java,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -r1.70 -r1.71
--- PropertyConfigurator.java 19 Nov 2004 15:20:06 -0000 1.70
+++ PropertyConfigurator.java 20 Nov 2004 11:27:19 -0000 1.71
@@ -1,12 +1,12 @@
/*
* Copyright 1999,2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-
// Contibutors: "Luke Blanshard" <[EMAIL PROTECTED]>
// "Mark DONSZELMANN" <[EMAIL PROTECTED]>
// Anders Kristensen <[EMAIL PROTECTED]>
@@ -108,7 +107,7 @@
protected Hashtable registry = new Hashtable(11);
protected LoggerFactory loggerFactory = new DefaultCategoryFactory();
protected List errorList = new Vector();
-
+
/**
Read configuration from a file. <b>The existing configuration is
not cleared nor reset.</b> If you require a different behavior,
@@ -310,7 +309,8 @@
props.load(istream);
istream.close();
} catch (IOException e) {
- String errMsg = "Could not read configuration file [" + configFileName
+ "].";
+ String errMsg =
+ "Could not read configuration file [" + configFileName + "].";
addError(new ErrorItem(errMsg, e));
getLogger(repo).error(errMsg, e);
return;
@@ -346,7 +346,7 @@
new PropertyConfigurator().doConfigure(
properties, LogManager.getLoggerRepository());
}
-
+
/**
Read configuration options from <code>properties</code>.
@@ -355,37 +355,46 @@
public void doConfigure(Properties properties, LoggerRepository
repository) {
String value = properties.getProperty(DEBUG_KEY);
- boolean attached = false;
- if (value != null && OptionConverter.toBoolean(value, true)) {
- attachTemporaryConsoleAppender(repository);
- attached = true;
- }
+ try {
+ // we start by attaching a temporary list appender
+ attachListAppender(repository);
- // As soon as we start configuration process, the pristine flag is set
to
- // false.
- repository.setPristine(false);
-
- String thresholdStr =
- OptionConverter.findAndSubst(THRESHOLD_PREFIX, properties);
+ boolean attachedConsoleApepnder = false;
+ if ((value != null) && OptionConverter.toBoolean(value, true)) {
+ attachTemporaryConsoleAppender(repository);
+ attachedConsoleApepnder = true;
+ }
- if (thresholdStr != null) {
- repository.setThreshold(OptionConverter.toLevel(thresholdStr,
Level.ALL));
- getLogger(repository).debug(
- "Hierarchy threshold set to [" + repository.getThreshold() + "].");
- }
+ // As soon as we start configuration process, the pristine flag is set
to
+ // false.
+ repository.setPristine(false);
+
+ String thresholdStr =
+ OptionConverter.findAndSubst(THRESHOLD_PREFIX, properties);
+
+ if (thresholdStr != null) {
+ repository.setThreshold(
+ OptionConverter.toLevel(thresholdStr, Level.ALL));
+ getLogger(repository).debug(
+ "Hierarchy threshold set to [" + repository.getThreshold() + "].");
+ }
- configureRootCategory(properties, repository);
- configureLoggerFactory(properties);
- parseCatsAndRenderers(properties, repository);
+ configureRootCategory(properties, repository);
+ configureLoggerFactory(properties);
+ parseCatsAndRenderers(properties, repository);
- getLogger(repository).debug("Finished configuring.");
+ getLogger(repository).debug("Finished configuring.");
- if(attached) {
- detachTemporaryConsoleAppender(repository, errorList);
+ if (attachedConsoleApepnder) {
+ detachTemporaryConsoleAppender(repository, errorList);
+ }
+
+ // We don't want to hold references to appenders preventing their
+ // garbage collection.
+ registry.clear();
+ } finally {
+ detachListAppender(repository);
}
- // We don't want to hold references to appenders preventing their
- // garbage collection.
- registry.clear();
}
/**
@@ -393,14 +402,16 @@
*/
public void doConfigure(java.net.URL configURL, LoggerRepository
repository) {
Properties props = new Properties();
- getLogger(repository).debug("Reading configuration from URL {}",
configURL);
+ getLogger(repository).debug(
+ "Reading configuration from URL {}", configURL);
try {
InputStream in = configURL.openStream();
props.load(in);
in.close();
} catch (java.io.IOException e) {
- String errMsg = "Could not read configuration file from URL [" +
configURL + "].";
+ String errMsg =
+ "Could not read configuration file from URL [" + configURL + "].";
addError(new ErrorItem(errMsg, e));
getLogger(repository).error(errMsg, e);
return;
@@ -466,12 +477,14 @@
}
if (value == null) {
- getLogger(repository).debug("Could not find root logger information.
Is this OK?");
+ getLogger(repository).debug(
+ "Could not find root logger information. Is this OK?");
} else {
Logger root = repository.getRootLogger();
synchronized (root) {
- parseCategory(repository, props, root, effectiveFrefix,
INTERNAL_ROOT_NAME, value);
+ parseCategory(
+ repository, props, root, effectiveFrefix, INTERNAL_ROOT_NAME,
value);
}
}
}
@@ -517,8 +530,9 @@
/**
Parse the additivity option for a non-root category.
*/
- void parseAdditivityForLogger(LoggerRepository repository,
- Properties props, Logger cat, String loggerName) {
+ void parseAdditivityForLogger(
+ LoggerRepository repository, Properties props, Logger cat,
+ String loggerName) {
String value =
OptionConverter.findAndSubst(ADDITIVITY_PREFIX + loggerName, props);
getLogger(repository).debug(
@@ -536,9 +550,9 @@
/**
This method must work for the root category as well.
*/
- void parseCategory(LoggerRepository repository,
- Properties props, Logger logger, String optionKey, String loggerName,
- String value) {
+ void parseCategory(
+ LoggerRepository repository, Properties props, Logger logger,
+ String optionKey, String loggerName, String value) {
getLogger(repository).debug(
"Parsing for [{}] with value=[{}].", loggerName, value);
@@ -571,7 +585,8 @@
logger.setLevel(OptionConverter.toLevel(levelStr, Level.DEBUG));
}
- getLogger(repository).debug("Category {} set to {}.", loggerName,
logger.getLevel());
+ getLogger(repository).debug(
+ "Category {} set to {}.", loggerName, logger.getLevel());
}
// Begin by removing all existing appenders.
@@ -587,7 +602,8 @@
continue;
}
- getLogger(repository).debug("Parsing appender named \"{}\".",
appenderName);
+ getLogger(repository).debug(
+ "Parsing appender named \"{}\".", appenderName);
appender = parseAppender(repository, props, appenderName);
if (appender != null) {
@@ -596,11 +612,13 @@
}
}
- Appender parseAppender(LoggerRepository repository, Properties props,
String appenderName) {
+ Appender parseAppender(
+ LoggerRepository repository, Properties props, String appenderName) {
Appender appender = registryGet(appenderName);
if ((appender != null)) {
- getLogger(repository).debug("Appender \"{}\" was already parsed.",
appenderName);
+ getLogger(repository).debug(
+ "Appender \"{}\" was already parsed.", appenderName);
return appender;
}
@@ -614,7 +632,8 @@
props, prefix, org.apache.log4j.Appender.class, null);
if (appender == null) {
- String errMsg = "Could not instantiate appender named
\""+appenderName+"\".";
+ String errMsg =
+ "Could not instantiate appender named \"" + appenderName + "\".";
addError(new ErrorItem(errMsg));
getLogger(repository).error(errMsg);
return null;
@@ -623,21 +642,25 @@
appender.setName(appenderName);
if (appender instanceof OptionHandler) {
- String layoutClassName = OptionConverter.findAndSubst(layoutPrefix,
props);
+ String layoutClassName =
+ OptionConverter.findAndSubst(layoutPrefix, props);
+
// if there are layout related directives, we process these now
- if(layoutClassName != null) {
+ if (layoutClassName != null) {
// Trim layoutClassName to avoid trailing spaces that cause problems.
Layout layout =
- (Layout)
OptionConverter.instantiateByClassName(layoutClassName.trim(),
- Layout.class, null);
+ (Layout) OptionConverter.instantiateByClassName(
+ layoutClassName.trim(), Layout.class, null);
if (layout != null) {
appender.setLayout(layout);
- getLogger(repository).debug("Parsing layout options for \"" +
appenderName + "\".");
+ getLogger(repository).debug(
+ "Parsing layout options for \"" + appenderName + "\".");
PropertySetter.setProperties(layout, props, layoutPrefix + ".");
activateOptions(layout);
- getLogger(repository).debug("End of parsing for \"" + appenderName
+ "\".");
+ getLogger(repository).debug(
+ "End of parsing for \"" + appenderName + "\".");
}
}
@@ -650,7 +673,7 @@
return appender;
}
-
+
void activateOptions(Object obj) {
if (obj instanceof OptionHandler) {
((OptionHandler) obj).activateOptions();
@@ -668,5 +691,4 @@
public List getErrorList() {
return errorList;
}
-
-}
\ No newline at end of file
+}
1.40 +3 -12
logging-log4j/src/java/org/apache/log4j/AsyncAppender.java
Index: AsyncAppender.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/AsyncAppender.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- AsyncAppender.java 17 Nov 2004 21:25:23 -0000 1.39
+++ AsyncAppender.java 20 Nov 2004 11:27:19 -0000 1.40
@@ -85,18 +85,9 @@
}
public void append(LoggingEvent event) {
- // Set the NDC and thread name for the calling thread as these
- // LoggingEvent fields were not set at event creation time.
- event.getNDC();
- event.getThreadName();
-
- // Get a copy of this thread's MDC.
- event.initializeProperties();
-
- // we need to get the rendered message in case it changes between now
- // and handling by the worker thread
- event.getRenderedMessage();
-
+ // extract all the thread dependent information now as later it will
+ // be too late.
+ event.prepareForSerialization();
if (locationInfo) {
event.getLocationInformation();
}
1.4 +0 -2
logging-log4j/src/java/org/apache/log4j/pattern/NamedPatternConverter.java
Index: NamedPatternConverter.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/pattern/NamedPatternConverter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NamedPatternConverter.java 27 Feb 2004 16:47:32 -0000 1.3
+++ NamedPatternConverter.java 20 Nov 2004 11:27:19 -0000 1.4
@@ -72,8 +72,6 @@
buf.setLength(0);
String n = getFullyQualifiedName(event);
- //System.out.println("qname: "+n);
-
if (precision <= 0) {
buf.append(n);
} else {
1.9 +8 -2
logging-log4j/src/java/org/apache/log4j/pattern/ClassNamePatternConverter.java
Index: ClassNamePatternConverter.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/pattern/ClassNamePatternConverter.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ClassNamePatternConverter.java 16 Sep 2004 19:18:58 -0000 1.8
+++ ClassNamePatternConverter.java 20 Nov 2004 11:27:19 -0000 1.9
@@ -17,6 +17,7 @@
package org.apache.log4j.pattern;
import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.spi.location.LocationInfo;
/**
* Most of the work is done in the parent class [EMAIL PROTECTED]
@@ -35,8 +36,13 @@
}
String getFullyQualifiedName(LoggingEvent event) {
- return
event.getLocationInformation()!=null?event.getLocationInformation().getClassName():"";
- }
+ LocationInfo li = event.getLocationInformation();
+ if(li == null) {
+ return LocationInfo.NA;
+ } else {
+ return li.getClassName();
+ }
+ }
public String getName() {
return NAME;
1.14 +5 -4
logging-log4j/src/java/org/apache/log4j/spi/RootCategory.java
Index: RootCategory.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/spi/RootCategory.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RootCategory.java 19 May 2004 09:29:03 -0000 1.13
+++ RootCategory.java 20 Nov 2004 11:27:19 -0000 1.14
@@ -17,8 +17,6 @@
package org.apache.log4j.spi;
import org.apache.log4j.*;
-import org.apache.log4j.helpers.LogLog;
-
// Contibutors: Mathias Bogaert
@@ -53,8 +51,11 @@
@since 0.8.3 */
public final void setLevel(Level level) {
if (level == null) {
- LogLog.error(
- "You have tried to set a null level to root.", new Throwable());
+ if (repository != null) {
+ repository.addErrorItem(
+ new ErrorItem(
+ "You have tried to set a null level to root.", new Exception()));
+ }
} else {
this.level = level;
}
1.3 +7 -8
logging-log4j/src/java/org/apache/log4j/spi/RootLogger.java
Index: RootLogger.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/spi/RootLogger.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RootLogger.java 19 Nov 2004 15:19:07 -0000 1.2
+++ RootLogger.java 20 Nov 2004 11:27:19 -0000 1.3
@@ -1,12 +1,12 @@
/*
* Copyright 1999,2004 The Apache Software Foundation.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -58,14 +58,13 @@
@since 0.8.3 */
public final void setLevel(Level level) {
if (level == null) {
- if(repository != null) {
- repository.addErrorItem(new ErrorItem("You have tried to set a null
level to root.", new Exception()));
- } else {
- throw new IllegalStateException("LoggerRepository has not been set");
+ if (repository != null) {
+ repository.addErrorItem(
+ new ErrorItem(
+ "You have tried to set a null level to root.", new Exception()));
}
} else {
this.level = level;
}
}
-
}
1.65 +5 -25
logging-log4j/src/java/org/apache/log4j/spi/LoggingEvent.java
Index: LoggingEvent.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/spi/LoggingEvent.java,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- LoggingEvent.java 7 Sep 2004 17:16:02 -0000 1.64
+++ LoggingEvent.java 20 Nov 2004 11:27:19 -0000 1.65
@@ -85,7 +85,9 @@
/**
* Fully qualified name of the calling category class. This field does not
- * survive serialization.
+ * survive serialization.
+ *
+ * <p>Note that the getLocationInfo() method relies on this fact.
*/
transient String fqnOfLoggerClass;
@@ -279,30 +281,6 @@
sequenceNumber = sequenceCount++;
}
-
- // TODO CG Remove these commented out lines
-// /**
-// * Alternate constructor to allow a string array to be passed in as the
throwable.
-// */
-// public LoggingEvent(String fqnOfCategoryClass, Logger logger, long
timeStamp, Level level, String threadName,
-// Object message, String ndc, Hashtable properties, String[]
throwableStrRep, LocationInfo li) {
-// ndcLookupRequired = false;
-// this.logger = logger;
-// this.loggerName = logger.getName();
-// this.level = level;
-// this.message = message;
-//
-// if (throwableStrRep != null) {
-// this.throwableInfo = new ThrowableInformation(throwableStrRep);
-// }
-// this.locationInfo = li;
-// this.fqnOfLoggerClass = fqnOfCategoryClass;
-// this.timeStamp = timeStamp;
-// this.threadName = threadName;
-// this.ndc = ndc;
-// this.properties = properties;
-// }
-
/**
* Two events are considerd equal if they refer to the same instance, or if
* both their timestamps and sequence numbers match.
@@ -359,6 +337,8 @@
* location information. In that case null is returned.</p>
*/
public LocationInfo getLocationInformation() {
+ // we rely on the fact that fqnOfLoggerClass does not survive
+ // serialization
if (locationInfo == null && fqnOfLoggerClass != null) {
locationInfo = new LocationInfo(new Throwable(), fqnOfLoggerClass);
}
1.5 +7 -2
logging-log4j/src/java/org/apache/log4j/varia/ListAppender.java
Index: ListAppender.java
===================================================================
RCS file:
/home/cvs/logging-log4j/src/java/org/apache/log4j/varia/ListAppender.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ListAppender.java 15 Nov 2004 17:40:57 -0000 1.4
+++ ListAppender.java 20 Nov 2004 11:27:19 -0000 1.5
@@ -28,8 +28,8 @@
* java.util.List for late retrieval.
*
* Note: This implemenation intentionally does not allow direct modification
- * of the internal List model to reduce the synchronization complexity that
this would
- * require.
+ * of the internal List model to reduce the synchronization complexity that
+ * this would require.
*
* @see org.apache.log4j.varia.ListModelAppender
*
@@ -59,6 +59,11 @@
* @see
org.apache.log4j.AppenderSkeleton#append(org.apache.log4j.spi.LoggingEvent)
*/
protected void append(LoggingEvent event) {
+ event.prepareForSerialization();
+
+ // Extract location info now. Later it might not be possible.
+ event.getLocationInformation();
+
synchronized (model) {
model.add(event);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]