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

    1   /*
    2    * Copyright 2001-2004 The Apache Software Foundation.
    3    * 
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    * 
    8    *      http://www.apache.org/licenses/LICENSE-2.0
    9    * 
   10    * Unless required by applicable law or agreed to in writing, software
   11    * distributed under the License is distributed on an "AS IS" BASIS,
   12    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   13    * See the License for the specific language governing permissions and
   14    * limitations under the License.
   15    */ 
   16   
   17   package org.apache.commons.logging.impl;
   18   
   19   
   20   import java.util.Enumeration;
   21   import java.util.Hashtable;
   22   import java.util.Vector;
   23   
   24   import org.apache.commons.logging.Log;
   25   import org.apache.commons.logging.LogConfigurationException;
   26   import org.apache.commons.logging.LogFactory;
   27   import org.apache.log4j.Logger;
   28   
   29   /**
   30    * <p>Concrete subclass of {@link LogFactory} specific to log4j.
   31    *
   32    * @deprecated Per discussion on COMMONS-DEV, the behind-the-scenes use
   33    *  of this class as a proxy factory has been removed.  For 1.0, you
   34    *  can still request it directly if you wish, but it doesn't really
   35    *  do anything useful, and will be removed in 1.1.
   36    *
   37    * @author Costin Manolache
   38    */
   39   public final class Log4jFactory extends LogFactory {
   40   
   41       public Log4jFactory() {
   42           super();
   43       }
   44   
   45       /**
   46        * The configuration attributes for this {@link LogFactory}.
   47        */
   48       private Hashtable attributes = new Hashtable();
   49   
   50       // Previously returned instances, to avoid creation of proxies
   51       private Hashtable instances = new Hashtable();
   52   
   53       // --------------------------------------------------------- Public Methods
   54   
   55       /**
   56        * Return the configuration attribute with the specified name (if any),
   57        * or <code>null</code> if there is no such attribute.
   58        *
   59        * @param name Name of the attribute to return
   60        */
   61       public Object getAttribute(String name) {
   62           return (attributes.get(name));
   63       }
   64   
   65   
   66       /**
   67        * Return an array containing the names of all currently defined
   68        * configuration attributes.  If there are no such attributes, a zero
   69        * length array is returned.
   70        */
   71       public String[] getAttributeNames() {
   72           Vector names = new Vector();
   73           Enumeration keys = attributes.keys();
   74           while (keys.hasMoreElements()) {
   75               names.addElement((String) keys.nextElement());
   76           }
   77           String results[] = new String[names.size()];
   78           for (int i = 0; i < results.length; i++) {
   79               results[i] = (String) names.elementAt(i);
   80           }
   81           return (results);
   82       }
   83   
   84   
   85       /**
   86        * Convenience method to derive a name from the specified class and
   87        * call <code>getInstance(String)</code> with it.
   88        *
   89        * @param clazz Class for which a suitable Log name will be derived
   90        *
   91        * @exception LogConfigurationException if a suitable <code>Log</code>
   92        *  instance cannot be returned
   93        */
   94       public Log getInstance(Class clazz)
   95           throws LogConfigurationException
   96       {
   97           Log instance = (Log) instances.get(clazz);
   98           if( instance != null )
   99               return instance;
  100   
  101           instance=new Log4JLogger( Logger.getLogger( clazz ));
  102           instances.put( clazz, instance );
  103           return instance;
  104       }
  105   
  106   
  107       public Log getInstance(String name)
  108           throws LogConfigurationException
  109       {
  110           Log instance = (Log) instances.get(name);
  111           if( instance != null )
  112               return instance;
  113   
  114           instance=new Log4JLogger( Logger.getLogger( name ));
  115           instances.put( name, instance );
  116           return instance;
  117       }
  118   
  119   
  120       /**
  121        * Release any internal references to previously created {@link Log}
  122        * instances returned by this factory.  This is useful in environments
  123        * like servlet containers, which implement application reloading by
  124        * throwing away a ClassLoader.  Dangling references to objects in that
  125        * class loader would prevent garbage collection.
  126        */
  127       public void release() {
  128   
  129           instances.clear();
  130   
  131           // what's the log4j mechanism to cleanup ???
  132       }
  133   
  134   
  135       /**
  136        * Remove any configuration attribute associated with the specified name.
  137        * If there is no such attribute, no action is taken.
  138        *
  139        * @param name Name of the attribute to remove
  140        */
  141       public void removeAttribute(String name) {
  142           attributes.remove(name);
  143       }
  144   
  145   
  146       /**
  147        * Set the configuration attribute with the specified name.  Calling
  148        * this with a <code>null</code> value is equivalent to calling
  149        * <code>removeAttribute(name)</code>.
  150        *
  151        * @param name Name of the attribute to set
  152        * @param value Value of the attribute to set, or <code>null</code>
  153        *  to remove any setting for this attribute
  154        */
  155       public void setAttribute(String name, Object value) {
  156           if (value == null) {
  157               attributes.remove(name);
  158           } else {
  159               attributes.put(name, value);
  160           }
  161       }
  162   
  163   }

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