KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > logging > impl > Log4jFactory


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 JavaDoc;
21 import java.util.Hashtable JavaDoc;
22 import java.util.Vector JavaDoc;
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 JavaDoc attributes = new Hashtable JavaDoc();
49
50     // Previously returned instances, to avoid creation of proxies
51
private Hashtable JavaDoc instances = new Hashtable JavaDoc();
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 JavaDoc getAttribute(String JavaDoc 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 JavaDoc[] getAttributeNames() {
72         Vector JavaDoc names = new Vector JavaDoc();
73         Enumeration JavaDoc keys = attributes.keys();
74         while (keys.hasMoreElements()) {
75             names.addElement((String JavaDoc) keys.nextElement());
76         }
77         String JavaDoc results[] = new String JavaDoc[names.size()];
78         for (int i = 0; i < results.length; i++) {
79             results[i] = (String JavaDoc) 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc name, Object JavaDoc value) {
156         if (value == null) {
157             attributes.remove(name);
158         } else {
159             attributes.put(name, value);
160         }
161     }
162
163 }
164
Popular Tags