View Javadoc

    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.spi;
    19
    20  import org.apache.log4j.Level;
    21  import org.apache.log4j.Logger;
    22  import org.apache.log4j.helpers.LogLog;
    23
    24
    25  // Contibutors: Mathias Bogaert
    26
    27  /**
    28     RootLogger sits at the top of the logger hierachy. It is a
    29     regular logger except that it provides several guarantees.
    30
    31     <p>First, it cannot be assigned a <code>null</code>
    32     level. Second, since root logger cannot have a parent, the
    33     {@link #getChainedLevel} method always returns the value of the
    34     level field without walking the hierarchy.
    35
    36     @author Ceki G&uuml;lc&uuml;
    37
    38   */
    39  public final class RootLogger extends Logger {
    40    /**
    41       The root logger names itself as "root". However, the root
    42       logger cannot be retrieved by name.
    43    */
    44    public RootLogger(Level level) {
    45      super("root");
    46      setLevel(level);
    47    }
    48
    49    /**
    50       Return the assigned level value without walking the logger
    51       hierarchy.
    52    */
    53    public final Level getChainedLevel() {
    54      return level;
    55    }
    56
    57    /**
    58       Setting a null value to the level of the root logger may have catastrophic
    59       results. We prevent this here.
    60
    61       @since 0.8.3 */
    62    public final void setLevel(Level level) {
    63      if (level == null) {
    64        LogLog.error(
    65          "You have tried to set a null level to root.", new Throwable());
    66      } else {
    67        this.level = level;
    68      }
    69    }
    70
    71  }