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; 19 20 import org.apache.log4j.spi.LoggerFactory; 21 22 23 /** 24 This is the central class in the log4j package. Most logging 25 operations, except configuration, are done through this class. 26 27 @since log4j 1.2 28 29 @author Ceki Gülcü */ 30 public class Logger extends Category { 31 32 /** 33 The fully qualified name of the Logger class. See also the 34 getFQCN method. */ 35 private static final String FQCN = Logger.class.getName(); 36 37 38 protected 39 Logger(String name) { 40 super(name); 41 } 42 43 /** 44 Log a message object with the {@link Level#FINE FINE} level which 45 is just an alias for the {@link Level#DEBUG DEBUG} level. 46 47 <p>This method first checks if this category is <code>DEBUG</code> 48 enabled by comparing the level of this category with the {@link 49 Level#DEBUG DEBUG} level. If this category is 50 <code>DEBUG</code> enabled, then it converts the message object 51 (passed as parameter) to a string by invoking the appropriate 52 {@link org.apache.log4j.or.ObjectRenderer}. It then proceeds to call all the 53 registered appenders in this category and also higher in the 54 hierarchy depending on the value of the additivity flag. 55 56 <p><b>WARNING</b> Note that passing a {@link Throwable} to this 57 method will print the name of the <code>Throwable</code> but no 58 stack trace. To print a stack trace use the {@link #debug(Object, 59 Throwable)} form instead. 60 61 @param message the message object to log. */ 62 //public 63 //void fine(Object message) { 64 // if(repository.isDisabled(Level.DEBUG_INT)) 65 // return; 66 // if(Level.DEBUG.isGreaterOrEqual(this.getChainedLevel())) { 67 // forcedLog(FQCN, Level.DEBUG, message, null); 68 // } 69 //} 70 71 72 /** 73 Log a message object with the <code>FINE</code> level including 74 the stack trace of the {@link Throwable} <code>t</code> passed as 75 parameter. 76 77 <p>See {@link #fine(Object)} form for more detailed information. 78 79 @param message the message object to log. 80 @param t the exception to log, including its stack trace. */ 81 //public 82 //void fine(Object message, Throwable t) { 83 // if(repository.isDisabled(Level.DEBUG_INT)) 84 // return; 85 // if(Level.DEBUG.isGreaterOrEqual(this.getChainedLevel())) 86 // forcedLog(FQCN, Level.FINE, message, t); 87 //} 88 89 /** 90 * Retrieve a logger named according to the value of the 91 * <code>name</code> parameter. If the named logger already exists, 92 * then the existing instance will be returned. Otherwise, a new 93 * instance is created. 94 * 95 * <p>By default, loggers do not have a set level but inherit it 96 * from their neareast ancestor with a set level. This is one of the 97 * central features of log4j. 98 * 99 * @param name The name of the logger to retrieve. 100 */ 101 static 102 public 103 Logger getLogger(String name) { 104 return LogManager.getLogger(name); 105 } 106 107 /** 108 * Shorthand for <code>getLogger(clazz.getName())</code>. 109 * 110 * @param clazz The name of <code>clazz</code> will be used as the 111 * name of the logger to retrieve. See {@link #getLogger(String)} 112 * for more detailed information. 113 */ 114 static 115 public 116 Logger getLogger(Class clazz) { 117 return LogManager.getLogger(clazz.getName()); 118 } 119 120 121 /** 122 * Return the root logger for the current logger repository. 123 * <p> 124 * The {@link #getName Logger.getName()} method for the root logger always returns 125 * string value: "root". However, calling 126 * <code>Logger.getLogger("root")</code> does not retrieve the root 127 * logger but a logger just under root named "root". 128 * <p> 129 * In other words, calling this method is the only way to retrieve the 130 * root logger. 131 */ 132 public 133 static 134 Logger getRootLogger() { 135 return LogManager.getRootLogger(); 136 } 137 138 /** 139 Like {@link #getLogger(String)} except that the type of logger 140 instantiated depends on the type returned by the {@link 141 LoggerFactory#makeNewLoggerInstance} method of the 142 <code>factory</code> parameter. 143 144 <p>This method is intended to be used by sub-classes. 145 146 @param name The name of the logger to retrieve. 147 148 @param factory A {@link LoggerFactory} implementation that will 149 actually create a new Instance. 150 151 @since 0.8.5 */ 152 public 153 static 154 Logger getLogger(String name, LoggerFactory factory) { 155 return LogManager.getLogger(name, factory); 156 } 157 158 /** 159 * Log a message object with the {@link org.apache.log4j.Level#TRACE TRACE} level. 160 * 161 * @param message the message object to log. 162 * @see #debug(Object) for an explanation of the logic applied. 163 * @since 1.2.12 164 */ 165 public void trace(Object message) { 166 if (repository.isDisabled(Level.TRACE_INT)) { 167 return; 168 } 169 170 if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel())) { 171 forcedLog(FQCN, Level.TRACE, message, null); 172 } 173 } 174 175 /** 176 * Log a message object with the <code>TRACE</code> level including the 177 * stack trace of the {@link Throwable}<code>t</code> passed as parameter. 178 * 179 * <p> 180 * See {@link #debug(Object)} form for more detailed information. 181 * </p> 182 * 183 * @param message the message object to log. 184 * @param t the exception to log, including its stack trace. 185 * @since 1.2.12 186 */ 187 public void trace(Object message, Throwable t) { 188 if (repository.isDisabled(Level.TRACE_INT)) { 189 return; 190 } 191 192 if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel())) { 193 forcedLog(FQCN, Level.TRACE, message, t); 194 } 195 } 196 197 /** 198 * Check whether this category is enabled for the TRACE Level. 199 * @since 1.2.12 200 * 201 * @return boolean - <code>true</code> if this category is enabled for level 202 * TRACE, <code>false</code> otherwise. 203 */ 204 public boolean isTraceEnabled() { 205 if (repository.isDisabled(Level.TRACE_INT)) { 206 return false; 207 } 208 209 return Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel()); 210 } 211 212 }