Home » apache-log4j-1.2.15 » org.apache » log4j » helpers » [javadoc | source]
    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    * 
    9    *      http://www.apache.org/licenses/LICENSE-2.0
   10    * 
   11    * Unless required by applicable law or agreed to in writing, software
   12    * distributed under the License is distributed on an "AS IS" BASIS,
   13    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    * See the License for the specific language governing permissions and
   15    * limitations under the License.
   16    */
   17   
   18   package org.apache.log4j.helpers;
   19   
   20   import org.apache.log4j.spi.LoggingEvent;
   21   
   22   /**
   23   
   24      <p>PatternConverter is an abtract class that provides the
   25      formatting functionality that derived classes need.
   26   
   27      <p>Conversion specifiers in a conversion patterns are parsed to
   28      individual PatternConverters. Each of which is responsible for
   29      converting a logging event in a converter specific manner.
   30   
   31      @author <a href="mailto:cakalijp@Maritz.com">James P. Cakalic</a>
   32      @author Ceki G&uuml;lc&uuml;
   33   
   34      @since 0.8.2
   35    */
   36   public abstract class PatternConverter {
   37     public PatternConverter next;
   38     int min = -1;
   39     int max = 0x7FFFFFFF;
   40     boolean leftAlign = false;
   41   
   42     protected
   43     PatternConverter() {  }
   44     
   45     protected
   46     PatternConverter(FormattingInfo fi) {
   47       min = fi.min;
   48       max = fi.max;
   49       leftAlign = fi.leftAlign;
   50     }
   51   
   52     /**
   53        Derived pattern converters must override this method in order to
   54        convert conversion specifiers in the correct way.
   55     */
   56     abstract
   57     protected
   58     String convert(LoggingEvent event);
   59   
   60     /**
   61        A template method for formatting in a converter specific way.
   62      */
   63     public
   64     void format(StringBuffer sbuf, LoggingEvent e) {
   65       String s = convert(e);
   66   
   67       if(s == null) {
   68         if(0 < min)
   69   	spacePad(sbuf, min);
   70         return;
   71       }
   72   
   73       int len = s.length();
   74   
   75       if(len > max)
   76         sbuf.append(s.substring(len-max));
   77       else if(len < min) {
   78         if(leftAlign) {	
   79   	sbuf.append(s);
   80   	spacePad(sbuf, min-len);
   81         }
   82         else {
   83   	spacePad(sbuf, min-len);
   84   	sbuf.append(s);
   85         }
   86       }
   87       else
   88         sbuf.append(s);
   89     }	
   90   
   91     static String[] SPACES = {" ", "  ", "    ", "        ", //1,2,4,8 spaces
   92   			    "                ", // 16 spaces
   93   			    "                                " }; // 32 spaces
   94   
   95     /**
   96        Fast space padding method.
   97     */
   98     public
   99     void spacePad(StringBuffer sbuf, int length) {
  100       while(length >= 32) {
  101         sbuf.append(SPACES[5]);
  102         length -= 32;
  103       }
  104       
  105       for(int i = 4; i >= 0; i--) {	
  106         if((length & (1<<i)) != 0) {
  107   	sbuf.append(SPACES[i]);
  108         }
  109       }
  110     }
  111   }

Save This Page
Home » apache-log4j-1.2.15 » org.apache » log4j » helpers » [javadoc | source]