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;
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 }