Home » SLF4J-1.5.8 » org.apache.commons » logging » impl » [javadoc | source]

    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   
   19   package org.apache.commons.logging.impl;
   20   
   21   import java.io.Serializable;
   22   import org.apache.commons.logging.Log;
   23   import org.apache.log4j.Logger;
   24   import org.apache.log4j.Priority;
   25   import org.apache.log4j.Level;
   26   
   27   /**
   28    * Implementation of {@link Log} that maps directly to a
   29    * <strong>Logger</strong> for log4J version 1.2.
   30    * <p>
   31    * Initial configuration of the corresponding Logger instances should be done
   32    * in the usual manner, as outlined in the Log4J documentation.
   33    * <p>
   34    * The reason this logger is distinct from the 1.3 logger is that in version 1.2
   35    * of Log4J:
   36    * <ul>
   37    * <li>class Logger takes Priority parameters not Level parameters.
   38    * <li>class Level extends Priority
   39    * </ul>
   40    * Log4J1.3 is expected to change Level so it no longer extends Priority, which is
   41    * a non-binary-compatible change. The class generated by compiling this code against
   42    * log4j 1.2 will therefore not run against log4j 1.3.
   43    *
   44    * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
   45    * @author Rod Waldhoff
   46    * @author Robert Burrell Donkin
   47    * @version $Id: Log4JLogger.java 479747 2006-11-27 20:15:01Z dennisl $
   48    */
   49   
   50   public class Log4JLogger implements Log, Serializable {
   51   
   52       // ------------------------------------------------------------- Attributes
   53   
   54       /** The fully qualified name of the Log4JLogger class. */
   55       private static final String FQCN = Log4JLogger.class.getName();
   56       
   57       /** Log to this logger */
   58       private transient Logger logger = null;
   59   
   60       /** Logger name */
   61       private String name = null;
   62   
   63       private static Priority traceLevel;
   64       
   65       // ------------------------------------------------------------
   66       // Static Initializer.
   67       //
   68       // Note that this must come after the static variable declarations
   69       // otherwise initialiser expressions associated with those variables
   70       // will override any settings done here.
   71       //
   72       // Verify that log4j is available, and that it is version 1.2.
   73       // If an ExceptionInInitializerError is generated, then LogFactoryImpl
   74       // will treat that as meaning that the appropriate underlying logging
   75       // library is just not present - if discovery is in progress then
   76       // discovery will continue.
   77       // ------------------------------------------------------------
   78   
   79       static {
   80           if (!Priority.class.isAssignableFrom(Level.class)) {
   81               // nope, this is log4j 1.3, so force an ExceptionInInitializerError
   82               throw new InstantiationError("Log4J 1.2 not available");
   83           }
   84           
   85           // Releases of log4j1.2 >= 1.2.12 have Priority.TRACE available, earlier
   86           // versions do not. If TRACE is not available, then we have to map
   87           // calls to Log.trace(...) onto the DEBUG level.
   88           
   89           try {
   90               traceLevel = (Priority) Level.class.getDeclaredField("TRACE").get(null);
   91           } catch(Exception ex) {
   92               // ok, trace not available
   93               traceLevel = Priority.DEBUG;
   94           }
   95       }
   96   
   97       
   98       // ------------------------------------------------------------ Constructor
   99   
  100       public Log4JLogger() {
  101       }
  102   
  103   
  104       /**
  105        * Base constructor.
  106        */
  107       public Log4JLogger(String name) {
  108           this.name = name;
  109           this.logger = getLogger();
  110       }
  111   
  112       /** 
  113        * For use with a log4j factory.
  114        */
  115       public Log4JLogger(Logger logger ) {
  116           if (logger == null) {
  117               throw new IllegalArgumentException(
  118                   "Warning - null logger in constructor; possible log4j misconfiguration.");
  119           }
  120           this.name = logger.getName();
  121           this.logger=logger;
  122       }
  123   
  124   
  125       // --------------------------------------------------------- 
  126       // Implementation
  127       //
  128       // Note that in the methods below the Priority class is used to define
  129       // levels even though the Level class is supported in 1.2. This is done
  130       // so that at compile time the call definitely resolves to a call to
  131       // a method that takes a Priority rather than one that takes a Level.
  132       // 
  133       // The Category class (and hence its subclass Logger) in version 1.2 only
  134       // has methods that take Priority objects. The Category class (and hence
  135       // Logger class) in version 1.3 has methods that take both Priority and
  136       // Level objects. This means that if we use Level here, and compile
  137       // against log4j 1.3 then calls would be bound to the versions of
  138       // methods taking Level objects and then would fail to run against
  139       // version 1.2 of log4j.
  140       // --------------------------------------------------------- 
  141   
  142   
  143       /**
  144        * Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
  145        * When using a log4j version that does not support the <code>TRACE</code>
  146        * level, the message will be logged at the <code>DEBUG</code> level.
  147        *
  148        * @param message to log
  149        * @see org.apache.commons.logging.Log#trace(Object)
  150        */
  151       public void trace(Object message) {
  152           getLogger().log(FQCN, traceLevel, message, null );
  153       }
  154   
  155   
  156       /**
  157        * Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
  158        * When using a log4j version that does not support the <code>TRACE</code>
  159        * level, the message will be logged at the <code>DEBUG</code> level.
  160        *
  161        * @param message to log
  162        * @param t log this cause
  163        * @see org.apache.commons.logging.Log#trace(Object, Throwable)
  164        */
  165       public void trace(Object message, Throwable t) {
  166           getLogger().log(FQCN, traceLevel, message, t );
  167       }
  168   
  169   
  170       /**
  171        * Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
  172        *
  173        * @param message to log
  174        * @see org.apache.commons.logging.Log#debug(Object)
  175        */
  176       public void debug(Object message) {
  177           getLogger().log(FQCN, Priority.DEBUG, message, null );
  178       }
  179   
  180       /**
  181        * Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
  182        *
  183        * @param message to log
  184        * @param t log this cause
  185        * @see org.apache.commons.logging.Log#debug(Object, Throwable)
  186        */
  187       public void debug(Object message, Throwable t) {
  188           getLogger().log(FQCN, Priority.DEBUG, message, t );
  189       }
  190   
  191   
  192       /**
  193        * Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
  194        *
  195        * @param message to log
  196        * @see org.apache.commons.logging.Log#info(Object)
  197        */
  198       public void info(Object message) {
  199           getLogger().log(FQCN, Priority.INFO, message, null );
  200       }
  201   
  202   
  203       /**
  204        * Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
  205        *
  206        * @param message to log
  207        * @param t log this cause
  208        * @see org.apache.commons.logging.Log#info(Object, Throwable)
  209        */
  210       public void info(Object message, Throwable t) {
  211           getLogger().log(FQCN, Priority.INFO, message, t );
  212       }
  213   
  214   
  215       /**
  216        * Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
  217        *
  218        * @param message to log
  219        * @see org.apache.commons.logging.Log#warn(Object)
  220        */
  221       public void warn(Object message) {
  222           getLogger().log(FQCN, Priority.WARN, message, null );
  223       }
  224   
  225   
  226       /**
  227        * Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
  228        *
  229        * @param message to log
  230        * @param t log this cause
  231        * @see org.apache.commons.logging.Log#warn(Object, Throwable)
  232        */
  233       public void warn(Object message, Throwable t) {
  234           getLogger().log(FQCN, Priority.WARN, message, t );
  235       }
  236   
  237   
  238       /**
  239        * Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
  240        *
  241        * @param message to log
  242        * @see org.apache.commons.logging.Log#error(Object)
  243        */
  244       public void error(Object message) {
  245           getLogger().log(FQCN, Priority.ERROR, message, null );
  246       }
  247   
  248   
  249       /**
  250        * Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
  251        *
  252        * @param message to log
  253        * @param t log this cause
  254        * @see org.apache.commons.logging.Log#error(Object, Throwable)
  255        */
  256       public void error(Object message, Throwable t) {
  257           getLogger().log(FQCN, Priority.ERROR, message, t );
  258       }
  259   
  260   
  261       /**
  262        * Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
  263        *
  264        * @param message to log
  265        * @see org.apache.commons.logging.Log#fatal(Object)
  266        */
  267       public void fatal(Object message) {
  268           getLogger().log(FQCN, Priority.FATAL, message, null );
  269       }
  270   
  271   
  272       /**
  273        * Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
  274        *
  275        * @param message to log
  276        * @param t log this cause
  277        * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
  278        */
  279       public void fatal(Object message, Throwable t) {
  280           getLogger().log(FQCN, Priority.FATAL, message, t );
  281       }
  282   
  283   
  284       /**
  285        * Return the native Logger instance we are using.
  286        */
  287       public Logger getLogger() {
  288           if (logger == null) {
  289               logger = Logger.getLogger(name);
  290           }
  291           return (this.logger);
  292       }
  293   
  294   
  295       /**
  296        * Check whether the Log4j Logger used is enabled for <code>DEBUG</code> priority.
  297        */
  298       public boolean isDebugEnabled() {
  299           return getLogger().isDebugEnabled();
  300       }
  301   
  302   
  303        /**
  304        * Check whether the Log4j Logger used is enabled for <code>ERROR</code> priority.
  305        */
  306       public boolean isErrorEnabled() {
  307           return getLogger().isEnabledFor(Priority.ERROR);
  308       }
  309   
  310   
  311       /**
  312        * Check whether the Log4j Logger used is enabled for <code>FATAL</code> priority.
  313        */
  314       public boolean isFatalEnabled() {
  315           return getLogger().isEnabledFor(Priority.FATAL);
  316       }
  317   
  318   
  319       /**
  320        * Check whether the Log4j Logger used is enabled for <code>INFO</code> priority.
  321        */
  322       public boolean isInfoEnabled() {
  323           return getLogger().isInfoEnabled();
  324       }
  325   
  326   
  327       /**
  328        * Check whether the Log4j Logger used is enabled for <code>TRACE</code> priority.
  329        * When using a log4j version that does not support the TRACE level, this call
  330        * will report whether <code>DEBUG</code> is enabled or not.
  331        */
  332       public boolean isTraceEnabled() {
  333           return getLogger().isEnabledFor(traceLevel);
  334       }
  335   
  336       /**
  337        * Check whether the Log4j Logger used is enabled for <code>WARN</code> priority.
  338        */
  339       public boolean isWarnEnabled() {
  340           return getLogger().isEnabledFor(Priority.WARN);
  341       }
  342   }

Home » SLF4J-1.5.8 » org.apache.commons » logging » impl » [javadoc | source]