The version of Apache log4j used by SoundHelix.

[[ 🗃 ^aEp6o apache-log4j ]] :: [📥 Inbox] [📤 Outbox] [🐤 Followers] [🤝 Collaborators] [🛠 Commits]

Clone

HTTPS: git clone https://vervis.peers.community/repos/aEp6o

SSH: git clone USERNAME@vervis.peers.community:aEp6o

Branches

Tags

PRE_UGLI_MOVE :: src / java / org / apache / log4j / pattern /

NamedPatternConverter.java

/*
 * 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.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.log4j.pattern;

import java.util.List;

import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;


/**
 * 
 * Base class for other pattern converters which can return only parts of their name.
 *  
 * @author Ceki Gülcü
 */
abstract class NamedPatternConverter extends PatternConverter {
	
	
  static Logger logger = Logger.getLogger(NamedPatternConverter.class);

  // We assume that each PatternConveter instance is unique within a layout, 
  // which is unique within an appender. We further assume that callas to the 
  // appender method are serialized (per appender).
  StringBuffer buf;
  int precision;

  public NamedPatternConverter() {
    super();
    this.buf = new StringBuffer(32);
  }

  abstract String getFullyQualifiedName(LoggingEvent event);

  public void setOptions(List optionList) {
    if(optionList == null || optionList.size() == 0) {
      return;
    }

    String option = (String) optionList.get(0);

    /**
       The option is expected to be in decimal and positive. In case of
       error, zero is returned.  */
    int r = 0;

    if (option != null) {
      try {
        precision = Integer.parseInt(option);
        //System.out.println("Precision is "+precision);
        if (precision <= 0) {
          logger.error(
            "Precision option (" + option + ") isn't a positive integer.");
          precision = 0;
        }
      } catch (NumberFormatException e) {
        logger.error(
          "Category option \"" + option + "\" not a decimal integer.", e);
      }
    }
  }

  public StringBuffer convert(LoggingEvent event) {
    buf.setLength(0);

    String n = getFullyQualifiedName(event);
    if (precision <= 0) {
      buf.append(n);
    } else {
      int len = n.length();

      // We substract 1 from 'len' when assigning to 'end' to avoid out of
      // bounds exception in return r.substring(end+1, len). This can happen if
      // precision is 1 and the category name ends with a dot.
      int end = len - 1;

      for (int i = precision; i > 0; i--) {
        end = n.lastIndexOf('.', end - 1);

        if (end == -1) {
        	// not enough dot characters. The whole string should be returned
          return buf.append(n);
        }
      }

      // The end variable should point to the left-most dot character to
      // the right of which all character should be returned.
      buf.append(n.substring(end + 1, len));
    }
    return buf;
  }
}

[See repo JSON]