/* * Copyright 1999-2005 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; import org.apache.log4j.spi.LoggerFactory; import org.apache.log4j.Level; /** This is the central class in the log4j package. Most logging operations, except configuration, are done through this class. @since log4j 1.2 @author Ceki Gülcü */ public class Logger extends Category { /** The fully qualified name of the Logger class. See also the getFQCN method. */ private static final String FQCN = Logger.class.getName(); protected Logger(String name) { super(name); } /** Log a message object with the {@link Level#FINE FINE} level which is just an alias for the {@link Level#DEBUG DEBUG} level. <p>This method first checks if this category is <code>DEBUG</code> enabled by comparing the level of this category with the {@link Level#DEBUG DEBUG} level. If this category is <code>DEBUG</code> enabled, then it converts the message object (passed as parameter) to a string by invoking the appropriate {@link org.apache.log4j.or.ObjectRenderer}. It then proceeds to call all the registered appenders in this category and also higher in the hierarchy depending on the value of the additivity flag. <p><b>WARNING</b> Note that passing a {@link Throwable} to this method will print the name of the <code>Throwable</code> but no stack trace. To print a stack trace use the {@link #debug(Object, Throwable)} form instead. @param message the message object to log. */ //public //void fine(Object message) { // if(repository.isDisabled(Level.DEBUG_INT)) // return; // if(Level.DEBUG.isGreaterOrEqual(this.getChainedLevel())) { // forcedLog(FQCN, Level.DEBUG, message, null); // } //} /** Log a message object with the <code>FINE</code> level including the stack trace of the {@link Throwable} <code>t</code> passed as parameter. <p>See {@link #fine(Object)} form for more detailed information. @param message the message object to log. @param t the exception to log, including its stack trace. */ //public //void fine(Object message, Throwable t) { // if(repository.isDisabled(Level.DEBUG_INT)) // return; // if(Level.DEBUG.isGreaterOrEqual(this.getChainedLevel())) // forcedLog(FQCN, Level.FINE, message, t); //} /** * Retrieve a logger named according to the value of the * <code>name</code> parameter. If the named logger already exists, * then the existing instance will be returned. Otherwise, a new * instance is created. * * <p>By default, loggers do not have a set level but inherit it * from their neareast ancestor with a set level. This is one of the * central features of log4j. * * @param name The name of the logger to retrieve. */ static public Logger getLogger(String name) { return LogManager.getLogger(name); } /** * Shorthand for <code>getLogger(clazz.getName())</code>. * * @param clazz The name of <code>clazz</code> will be used as the * name of the logger to retrieve. See {@link #getLogger(String)} * for more detailed information. */ static public Logger getLogger(Class clazz) { return LogManager.getLogger(clazz.getName()); } /** * Return the root logger for the current logger repository. * <p> * The {@link #getName Logger.getName()} method for the root logger always returns * stirng value: "root". However, calling * <code>Logger.getLogger("root")</code> does not retrieve the root * logger but a logger just under root named "root". * <p> * In other words, calling this method is the only way to retrieve the * root logger. */ public static Logger getRootLogger() { return LogManager.getRootLogger(); } /** Like {@link #getLogger(String)} except that the type of logger instantiated depends on the type returned by the {@link LoggerFactory#makeNewLoggerInstance} method of the <code>factory</code> parameter. <p>This method is intended to be used by sub-classes. @param name The name of the logger to retrieve. @param factory A {@link LoggerFactory} implementation that will actually create a new Instance. @since 0.8.5 */ public static Logger getLogger(String name, LoggerFactory factory) { return LogManager.getLogger(name, factory); } /** * Log a message object with the {@link org.apache.log4j.Level#TRACE TRACE} level. * * @param message the message object to log. * @see #debug(Object) for an explanation of the logic applied. * @since 1.2.12 */ public void trace(Object message) { if (repository.isDisabled(Level.TRACE_INT)) { return; } if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.TRACE, message, null); } } /** * Log a message object with the <code>TRACE</code> level including the * stack trace of the {@link Throwable}<code>t</code> passed as parameter. * * <p> * See {@link #debug(Object)} form for more detailed information. * </p> * * @param message the message object to log. * @param t the exception to log, including its stack trace. * @since 1.2.12 */ public void trace(Object message, Throwable t) { if (repository.isDisabled(Level.TRACE_INT)) { return; } if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.TRACE, message, t); } } /** * Check whether this category is enabled for the TRACE Level. * @since 1.2.12 * * @return boolean - <code>true</code> if this category is enabled for level * TRACE, <code>false</code> otherwise. */ public boolean isTraceEnabled() { if (repository.isDisabled(Level.TRACE_INT)) { return false; } return Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel()); } }