All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.log4j.Logger Maven / Gradle / Ivy

Go to download

The Pax Logging API Library is to allow for the Pax Logging Service to be reloaded without stopping the many dependent bundles. It also contains the OSGi Log Service API and the Knopflerfish Log API.

There is a newer version: 2.2.7
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.ops4j.pax.logging.PaxLogger;
import org.ops4j.pax.logging.internal.Activator;
import org.ops4j.pax.logging.spi.support.FallbackLogFactory;
import org.osgi.framework.FrameworkUtil;

/**
 * This is the central class in the log4j package. Most logging operations, except configuration, are done through this
 * class.
 *
 * pax-logging-api has to treat this class both as a factory and as logger itself - with all the configuration-related
 * consequences.
 *
 * @author Ceki Gülcü
 * @since log4j 1.2
 */
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);
    }

    protected Logger(String name, PaxLogger delegate) {
        super(name, delegate);
    }

    // public API of original org.apache.log4j.Logger follows.
    // no need to call isXXXEnabled, as the delegated logger (PaxLogger) does it anyway
    // non-public API is removed or changed to no-op if that's reasonable in
    // pax-logging case.

    /**
     * Log a message object with the {@link Level#FINE FINE} level which is just an
     * alias for the {@link Level#DEBUG DEBUG} level.
     *
     * 

* This method first checks if this category is DEBUG enabled by * comparing the level of this category with the {@link Level#DEBUG DEBUG} * level. If this category is DEBUG 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. * *

* WARNING Note that passing a {@link Throwable} to this method will * print the name of the Throwable 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 FINE level including the stack * trace of the {@link Throwable} t passed as parameter. * *

* 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 name parameter. If the named logger already * exists, then the existing instance will be returned. Otherwise, a new instance is created. * *

* 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. * *

* In pax-logging, loggers are obtained from current or fallback {@link org.ops4j.pax.logging.PaxLoggingManager} * * @param name The name of the logger to retrieve. */ static public Logger getLogger(String name) { PaxLogger logger; if (m_paxLogging == null) { logger = FallbackLogFactory.createFallbackLog(FrameworkUtil.getBundle(Logger.class), name); } else { logger = m_paxLogging.getLogger(name, LOG4J_FQCN); } Logger log4jlogger = new Logger(name, logger); if (m_paxLogging == null) { synchronized (Activator.m_loggers) { Activator.m_loggers.add(log4jlogger); } } return log4jlogger; } /** * Shorthand for getLogger(clazz.getName()). * * @param clazz The name of clazz 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 getLogger(clazz.getName()); } /** * Return the root logger for the current logger repository. *

* The {@link #getName Logger.getName()} method for the root logger always returns string value: "root". However, * calling * Logger.getLogger("root") does not retrieve the root logger but a * logger just under root named "root". *

* In other words, calling this method is the only way to retrieve the root logger. */ public static Logger getRootLogger() { return getLogger(""); } /** * Like {@link #getLogger(String)} except that the type of logger instantiated depends on the type returned by the * {@link LoggerFactory#makeNewLoggerInstance} method of the * factory parameter. * *

* 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 getLogger(name); } // Here are added overriden methods from the Category class (all methods that can be potentially used for logging). // It is needed, because Category class is included in the stack trace in which log4j backend is // looking for the LocationInfo instead of Logger class. // These methods just call their super methods in the Category class /** * 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) { super.trace(message); } /** * Log a message object with the TRACE level including the stack trace of the * {@link Throwable}t passed as parameter. * *

* See {@link #debug(Object)} form for more detailed information. *

* * @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) { super.trace(message, t); } public void trace(Object messagePattern, Object arg) { super.trace(messagePattern, arg); } public void trace(String messagePattern, Object arg1, Object arg2) { super.trace(messagePattern, arg1, arg2); } /** * Check whether this category is enabled for the TRACE Level. * * @return boolean - true if this category is enabled for level TRACE, false otherwise. * @since 1.2.12 */ public boolean isTraceEnabled() { return super.isTraceEnabled(); } public void debug(final Object message) { super.debug(message); } public void debug(final Object message, final Throwable t) { super.debug(message, t); } public void debug(Object messagePattern, Object arg) { super.debug(messagePattern, arg); } public void debug(String messagePattern, Object arg1, Object arg2) { super.debug(messagePattern, arg1, arg2); } public void error(final Object message) { super.error(message); } public void error(final Object message, final Throwable t) { super.error(message, t); } public void error(Object messagePattern, Object arg) { super.error(messagePattern, arg); } public void error(String messagePattern, Object arg1, Object arg2) { super.error(messagePattern, arg1, arg2); } public void fatal(final Object message) { super.fatal(message); } public void fatal(final Object message, final Throwable t) { super.fatal(message, t); } public void fatal(Object messagePattern, Object arg) { super.fatal(messagePattern, arg); } public void fatal(String messagePattern, Object arg1, Object arg2) { super.fatal(messagePattern, arg1, arg2); } public void info(final Object message) { super.info(message); } public void info(final Object message, final Throwable t) { super.info(message, t); } public void info(Object messagePattern, Object arg) { super.info(messagePattern, arg); } public void info(String messagePattern, Object arg1, Object arg2) { super.info(messagePattern, arg1, arg2); } public void warn(final Object message) { super.warn(message); } public void warn(final Object message, final Throwable t) { super.warn(message, t); } public void warn(Object messagePattern, Object arg) { super.warn(messagePattern, arg); } public void warn(String messagePattern, Object arg1, Object arg2) { super.warn(messagePattern, arg1, arg2); } @Override public void assertLog(boolean assertion, String msg) { super.assertLog(assertion, msg); } @Override public void log(Priority priority, Object message, Throwable t) { super.log(priority, message, t); } @Override public void log(Priority priority, Object message) { super.log(priority, message); } @Override public void log(String callerFQCN, Priority level, Object message, Throwable t) { super.log(callerFQCN, level, message, t); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy