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]

Reply via email to