ceki 2003/06/25 09:47:55
Modified: src/java/org/apache/log4j/pattern MDCPatternConverter.java
LineLocationPatternConverter.java
MessagePatternConverter.java
RelativeTimePatternConverter.java
PatternConverter.java
MethodLocationPatternConverter.java
FileLocationPatternConverter.java
NDCPatternConverter.java
FullLocationPatternConverter.java
PatternParser.java LoggerPatternConverter.java
ClassNamePatternConverter.java
ThreadPatternConverter.java
NamedPatternConverter.java
LevelPatternConverter.java
Log:
The PatternParser is now rule based.
One adds new rules by associating a conversion identifier with a PatternConverter
class name.
This powerful new feature will be abundantly explained in the docs.
Revision Changes Path
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/MDCPatternConverter.java
Index: MDCPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/MDCPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MDCPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ MDCPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -67,8 +67,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public MDCPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public MDCPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/LineLocationPatternConverter.java
Index: LineLocationPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/LineLocationPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LineLocationPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ LineLocationPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -64,8 +64,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public LineLocationPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public LineLocationPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/MessagePatternConverter.java
Index: MessagePatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/MessagePatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MessagePatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ MessagePatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -66,8 +66,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public MessagePatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public MessagePatternConverter() {
+ super();
this.buf = new StringBuffer(BUF_SIZE);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/RelativeTimePatternConverter.java
Index: RelativeTimePatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/RelativeTimePatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RelativeTimePatternConverter.java 23 Jun 2003 16:04:20 -0000 1.1
+++ RelativeTimePatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -63,8 +63,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public RelativeTimePatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public RelativeTimePatternConverter() {
+ super();
this.buf = new StringBuffer(9);
}
1.3 +6 -0
jakarta-log4j/src/java/org/apache/log4j/pattern/PatternConverter.java
Index: PatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/PatternConverter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PatternConverter.java 23 Jun 2003 17:07:11 -0000 1.2
+++ PatternConverter.java 25 Jun 2003 16:47:54 -0000 1.3
@@ -92,6 +92,12 @@
leftAlign = fi.leftAlign;
}
+ public void setFormattingInfo(FormattingInfo fi) {
+ min = fi.min;
+ max = fi.max;
+ leftAlign = fi.leftAlign;
+ }
+
/**
Derived pattern converters must override this method in order to
convert conversion specifiers in the correct way.
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/MethodLocationPatternConverter.java
Index: MethodLocationPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/MethodLocationPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MethodLocationPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ MethodLocationPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -64,8 +64,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public MethodLocationPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public MethodLocationPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/FileLocationPatternConverter.java
Index: FileLocationPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/FileLocationPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FileLocationPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ FileLocationPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -64,8 +64,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public FileLocationPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public FileLocationPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/NDCPatternConverter.java
Index: NDCPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/NDCPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NDCPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ NDCPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -62,8 +62,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public NDCPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public NDCPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/FullLocationPatternConverter.java
Index: FullLocationPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/FullLocationPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FullLocationPatternConverter.java 23 Jun 2003 16:04:22 -0000 1.1
+++ FullLocationPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -64,8 +64,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public FullLocationPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public FullLocationPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +55 -136
jakarta-log4j/src/java/org/apache/log4j/pattern/PatternParser.java
Index: PatternParser.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/PatternParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PatternParser.java 23 Jun 2003 16:04:22 -0000 1.1
+++ PatternParser.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -50,6 +50,7 @@
package org.apache.log4j.pattern;
import org.apache.log4j.Layout;
+import org.apache.log4j.Logger;
import org.apache.log4j.helpers.AbsoluteTimeDateFormat;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
@@ -92,6 +93,25 @@
static final int LEVEL_CONVERTER = 2002;
static final int NDC_CONVERTER = 2003;
static final int MESSAGE_CONVERTER = 2004;
+ static Hashtable globalRulesRegistry;
+
+ static {
+ globalRulesRegistry = new Hashtable(17);
+ globalRulesRegistry.put("c", LoggerPatternConverter.class.getName());
+ globalRulesRegistry.put("C", ClassNamePatternConverter.class.getName());
+ globalRulesRegistry.put("F", FileLocationPatternConverter.class.getName());
+ globalRulesRegistry.put("l", FullLocationPatternConverter.class.getName());
+ globalRulesRegistry.put("L", LineLocationPatternConverter.class.getName());
+ globalRulesRegistry.put("m", MessagePatternConverter.class.getName());
+ globalRulesRegistry.put(
+ "M", MethodLocationPatternConverter.class.getName());
+ globalRulesRegistry.put("p", LevelPatternConverter.class.getName());
+ globalRulesRegistry.put("r", RelativeTimePatternConverter.class.getName());
+ globalRulesRegistry.put("t", ThreadPatternConverter.class.getName());
+ globalRulesRegistry.put("x", NDCPatternConverter.class.getName());
+ globalRulesRegistry.put("X", MDCPatternConverter.class.getName());
+ }
+
int state;
protected StringBuffer currentLiteral = new StringBuffer(32);
protected int patternLength;
@@ -102,6 +122,8 @@
protected String pattern;
Hashtable converterRegistry;
+ static Logger logger = Logger.getLogger("LOG4J."+PatternParser.class.getName());
+
public PatternParser(String pattern) {
this.pattern = pattern;
patternLength = pattern.length();
@@ -126,12 +148,16 @@
* start of a unicode identifier, the value null is returned.
*
*/
- protected String extractConverter() {
+ protected String extractConverter(char lastChar) {
+
+ //System.out.println("lastchar is "+lastChar);
+
StringBuffer convBuf = new StringBuffer(16);
-
- if(i >= patternLength) {
- // the pattern converter was the last character...
- return null;
+ convBuf.append(lastChar);
+
+ if (i >= patternLength) {
+ // the pattern converter was the last character...
+ return convBuf.toString();
}
char c = pattern.charAt(i);
@@ -139,7 +165,7 @@
if (Character.isUnicodeIdentifierStart(c)) {
convBuf.append(c);
} else {
- return null;
+ return convBuf.toString();
}
while (
@@ -301,6 +327,10 @@
}
String findConverterClass(String converterId) {
+ if(converterId == null) {
+ logger.warn("converterId is null");
+ }
+
if (converterRegistry != null) {
String r = (String) converterRegistry.get(converterId);
@@ -308,53 +338,44 @@
return r;
}
}
+
+ String r = (String) globalRulesRegistry.get(converterId);
+ if (r != null) {
+ return r;
+ }
return null;
}
+ /**
+ * When finalizeConverter is called 'c' is the current conversion caracter
+ * and i points to the character following 'c'.
+ */
protected void finalizeConverter(char c) {
PatternConverter pc = null;
- //System.out.println("============================");
-
-
- String converterId = extractConverter();
+ //System.out.println("============================");
+ String converterId = extractConverter(c);
//System.out.println("==============[" + converterId + "]");
//System.out.println("c is [" + c + "]");
-
String className = (String) findConverterClass(converterId);
String option = extractOption();
- //System.out.println("Option is [" + option + "]");
-
+ //System.out.println("Option is [" + option + "]");
if (className != null) {
pc =
(PatternConverter) OptionConverter.instantiateByClassName(
className, PatternConverter.class, null);
+
+ // formattingInfo variable is an instance variable, occasionally reset
+ // and used over and over again
+ pc.setFormattingInfo(formattingInfo);
+ pc.setOption(option);
+ currentLiteral.setLength(0);
} else {
switch (c) {
- case 'c':
- pc = new LoggerPatternConverter(formattingInfo);
- pc.setOption(option);
-
- //LogLog.debug("CATEGORY converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'C':
- pc = new ClassNamePatternConverter(formattingInfo);
- pc.setOption(option);
-
- //LogLog.debug("CLASS_NAME converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
case 'd':
String dateFormatStr = AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT;
@@ -368,6 +389,7 @@
dateFormatStr.equalsIgnoreCase(
AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT)) {
option = "yyyy-mm-dd HH:mm:ss,SSS";
+
//System.out.println("optin is " + option);
} else if (
dateFormatStr.equalsIgnoreCase(
@@ -384,109 +406,6 @@
//LogLog.debug("DATE converter {"+dateFormatStr+"}.");
//formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'F':
- pc = new FileLocationPatternConverter(formattingInfo);
-
- //LogLog.debug("File name converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'l':
- pc = new FullLocationPatternConverter(formattingInfo);
-
- //LogLog.debug("Location converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'L':
- pc = new LineLocationPatternConverter(formattingInfo);
-
- //LogLog.debug("LINE NUMBER converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'm':
- pc = new MessagePatternConverter(formattingInfo);
-
- //LogLog.debug("MESSAGE converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'M':
- pc = new MethodLocationPatternConverter(formattingInfo);
-
- //LogLog.debug("METHOD converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'p':
- pc = new LevelPatternConverter(formattingInfo);
-
- //LogLog.debug("LEVEL converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 'r':
- pc = new RelativeTimePatternConverter(formattingInfo);
-
- //LogLog.debug("RELATIVE time converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- case 't':
- pc = new ThreadPatternConverter(formattingInfo);
-
- //LogLog.debug("THREAD converter.");
- //formattingInfo.dump();
- currentLiteral.setLength(0);
-
- break;
-
- /*case 'u':
- if(i < patternLength) {
- char cNext = pattern.charAt(i);
- if(cNext >= '0' && cNext <= '9') {
- pc = new UserFieldPatternConverter(formattingInfo, cNext - '0');
- LogLog.debug("USER converter ["+cNext+"].");
- formattingInfo.dump();
- currentLiteral.setLength(0);
- i++;
- }
- else
- LogLog.error("Unexpected char" +cNext+" at position "+i);
- }
- break;*/
- case 'x':
- pc = new NDCPatternConverter(formattingInfo);
-
- //LogLog.debug("NDC converter.");
- currentLiteral.setLength(0);
-
- break;
-
- case 'X':
-
- //String xOpt = extractOption(); // extractOption returns null if no
argument is supplied
- pc = new MDCPatternConverter(formattingInfo);
- pc.setOption(option);
currentLiteral.setLength(0);
break;
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/LoggerPatternConverter.java
Index: LoggerPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/LoggerPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LoggerPatternConverter.java 23 Jun 2003 16:04:22 -0000 1.1
+++ LoggerPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -61,8 +61,8 @@
// which is unique within an appender. We further assume that callas to the
// appender method are serialized (per appender).
- public LoggerPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public LoggerPatternConverter() {
+ super();
}
String getFullyQualifiedName(LoggingEvent event) {
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/ClassNamePatternConverter.java
Index: ClassNamePatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/ClassNamePatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ClassNamePatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ ClassNamePatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -63,8 +63,8 @@
StringBuffer buf;
int precision;
- public ClassNamePatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public ClassNamePatternConverter() {
+ super();
}
String getFullyQualifiedName(LoggingEvent event) {
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/ThreadPatternConverter.java
Index: ThreadPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/ThreadPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ThreadPatternConverter.java 23 Jun 2003 16:04:22 -0000 1.1
+++ ThreadPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -63,8 +63,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public ThreadPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public ThreadPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/NamedPatternConverter.java
Index: NamedPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/NamedPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NamedPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ NamedPatternConverter.java 25 Jun 2003 16:47:54 -0000 1.2
@@ -70,8 +70,8 @@
StringBuffer buf;
int precision;
- public NamedPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public NamedPatternConverter() {
+ super();
this.buf = new StringBuffer(32);
}
1.2 +2 -2
jakarta-log4j/src/java/org/apache/log4j/pattern/LevelPatternConverter.java
Index: LevelPatternConverter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/LevelPatternConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LevelPatternConverter.java 23 Jun 2003 16:04:21 -0000 1.1
+++ LevelPatternConverter.java 25 Jun 2003 16:47:55 -0000 1.2
@@ -62,8 +62,8 @@
// appender method are serialized (per appender).
StringBuffer buf;
- public LevelPatternConverter(FormattingInfo formattingInfo) {
- super(formattingInfo);
+ public LevelPatternConverter() {
+ super();
this.buf = new StringBuffer(5);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]