+/*
+ * 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;
+
+
+/**
+ 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);
+ }
+
+ /**
+ * 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
+ * string 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());
+ }
+
+}