    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.xml;
    19
    20  import org.apache.log4j.Level;
    21
    22
    23  /**
    24     This class introduces a new level level called TRACE. TRACE has
    25     lower level than DEBUG.
    26
    27   */
    28  public class XLevel extends Level {
    29    private static final long serialVersionUID = 7288304330257085144L;
    30
    31    static public final int  TRACE_INT   = Level.DEBUG_INT - 1;
    32    static public final int  LETHAL_INT  = Level.FATAL_INT + 1;
    33
    34
    35    private static String TRACE_STR  = "TRACE";
    36    private static String LETHAL_STR  = "LETHAL";
    37
    38
    39    public static final XLevel TRACE = new XLevel(TRACE_INT, TRACE_STR, 7);
    40    public static final XLevel LETHAL = new XLevel(LETHAL_INT, LETHAL_STR,
    41  						       0);
    42
    43
    44    protected
    45    XLevel(int level, String strLevel, int syslogEquiv) {
    46      super(level, strLevel, syslogEquiv);
    47    }
    48
    49    /**
    50       Convert the string passed as argument to a level. If the
    51       conversion fails, then this method returns {@link #TRACE}.
    52    */
    53    public
    54    static
    55    Level toLevel(String sArg) {
    56      return (Level) toLevel(sArg, XLevel.TRACE);
    57    }
    58
    59
    60    public
    61    static
    62    Level toLevel(String sArg, Level defaultValue) {
    63
    64      if(sArg == null) {
    65        return defaultValue;
    66      }
    67      String stringVal = sArg.toUpperCase();
    68
    69      if(stringVal.equals(TRACE_STR)) {
    70        return XLevel.TRACE;
    71      } else if(stringVal.equals(LETHAL_STR)) {
    72        return XLevel.LETHAL;
    73      }
    74
    75      return Level.toLevel(sArg, (Level) defaultValue);
    76    }
    77
    78
    79    public
    80    static
    81    Level toLevel(int i) throws  IllegalArgumentException {
    82      switch(i) {
    83      case TRACE_INT: return XLevel.TRACE;
    84      case LETHAL_INT: return XLevel.LETHAL;
    85      }
    86      return Level.toLevel(i);
    87    }
    88
    89  }
    90