org.apache.commons.logging.impl
Class LogFactoryImpl
public class LogFactoryImpl
Concrete subclass of
LogFactory
that implements the
following algorithm to dynamically select a logging implementation
class to instantiate a wrapper for.
- Use a factory configuration attribute named
org.apache.commons.logging.Log
to identify the
requested implementation class. - Use the
org.apache.commons.logging.Log
system property
to identify the requested implementation class. - If Log4J is available, return an instance of
org.apache.commons.logging.impl.Log4JLogger
. - If JDK 1.4 or later is available, return an instance of
org.apache.commons.logging.impl.Jdk14Logger
. - Otherwise, return an instance of
org.apache.commons.logging.impl.SimpleLog
.
If the selected
Log
implementation class has a
setLogFactory()
method that accepts a
LogFactory
parameter, this method will be called on each newly created instance
to identify the associated factory. This makes factory configuration
attributes available to the Log instance, if it so desires.
This factory will remember previously created
Log
instances
for the same name, and will return them on repeated requests to the
getInstance()
method. This implementation ignores any
configured attributes.
$Revision: 1.33 $ $Date: 2004/03/06 21:52:59 $- Rod Waldhoff
- Craig R. McClanahan
- Richard A. Sitze
private static String | LOG_INTERFACE - The name of the
Log interface class.
|
static String | LOG_PROPERTY - The name of the system property identifying our
Log
implementation class.
|
protected static String | LOG_PROPERTY_OLD - The deprecated system property used for backwards compatibility with
the old
LogSource class.
|
protected Hashtable | attributes - Configuration attributes.
|
protected Hashtable | instances - The
Log instances that have
already been created, keyed by logger name.
|
private String | logClassName - Name of the class implementing the Log interface.
|
protected Constructor | logConstructor - The one-argument constructor of the
Log
implementation class that will be used to create new instances.
|
protected Class[] | logConstructorSignature - The signature of the Constructor to be used.
|
protected Method | logMethod - The one-argument
setLogFactory method of the selected
Log method, if it exists.
|
protected Class[] | logMethodSignature - The signature of the
setLogFactory method to be used.
|
LogFactoryImpl() - Public no-arguments constructor required by the lookup mechanism.
|
Object | getAttribute(String name) - Return the configuration attribute with the specified name (if any),
or
null if there is no such attribute.
|
String[] | getAttributeNames() - Return an array containing the names of all currently defined
configuration attributes.
|
Log | getInstance(Class clazz) - Convenience method to derive a name from the specified class and
call
getInstance(String) with it.
|
Log | getInstance(String name) - Construct (if necessary) and return a
Log instance,
using the factory's current set of configuration attributes.
|
protected String | getLogClassName() - Return the fully qualified Java classname of the
Log
implementation we will be using.
|
protected Constructor | getLogConstructor() - Return the
Constructor that can be called to instantiate
new Log instances.
|
protected boolean | isJdk13LumberjackAvailable() - Is JDK 1.3 with Lumberjack logging available?
|
protected boolean | isJdk14Available() - Return
true if JDK 1.4 or later logging
is available.
|
protected boolean | isLog4JAvailable() - Is a Log4J implementation available?
|
private static Class | loadClass(String name) - MUST KEEP THIS METHOD PRIVATE.
|
protected Log | newInstance(String name) - Create and return a new
Log
instance for the specified name.
|
void | release() - Release any internal references to previously created
Log
instances returned by this factory.
|
void | removeAttribute(String name) - Remove any configuration attribute associated with the specified name.
|
void | setAttribute(String name, Object value) - Set the configuration attribute with the specified name.
|
cacheFactory , getAttribute , getAttributeNames , getCachedFactory , getContextClassLoader , getFactory , getInstance , getInstance , getLog , getLog , getResourceAsStream , newFactory , release , release , releaseAll , removeAttribute , setAttribute |
LOG_INTERFACE
private static final String LOG_INTERFACE
The name of the
Log
interface class.
LOG_PROPERTY
public static final String LOG_PROPERTY
The name of the system property identifying our
Log
implementation class.
LOG_PROPERTY_OLD
protected static final String LOG_PROPERTY_OLD
The deprecated system property used for backwards compatibility with
the old
LogSource
class.
attributes
protected Hashtable attributes
Configuration attributes.
instances
protected Hashtable instances
The
Log
instances that have
already been created, keyed by logger name.
logClassName
private String logClassName
Name of the class implementing the Log interface.
logConstructor
protected Constructor logConstructor
The one-argument constructor of the
Log
implementation class that will be used to create new instances.
This value is initialized by
getLogConstructor()
,
and then returned repeatedly.
logConstructorSignature
protected Class[] logConstructorSignature
The signature of the Constructor to be used.
logMethod
protected Method logMethod
The one-argument
setLogFactory
method of the selected
Log
method, if it exists.
logMethodSignature
protected Class[] logMethodSignature
The signature of the setLogFactory
method to be used.
LogFactoryImpl
public LogFactoryImpl()
Public no-arguments constructor required by the lookup mechanism.
getAttribute
public Object getAttribute(String name)
Return the configuration attribute with the specified name (if any),
or null
if there is no such attribute.
- getAttribute in interface LogFactory
name
- Name of the attribute to return
getAttributeNames
public String[] getAttributeNames()
Return an array containing the names of all currently defined
configuration attributes. If there are no such attributes, a zero
length array is returned.
- getAttributeNames in interface LogFactory
getInstance
public Log getInstance(Class clazz)
throws LogConfigurationException
Convenience method to derive a name from the specified class and
call getInstance(String)
with it.
- getInstance in interface LogFactory
clazz
- Class for which a suitable Log name will be derived
getInstance
public Log getInstance(String name)
throws LogConfigurationException
Construct (if necessary) and return a
Log
instance,
using the factory's current set of configuration attributes.
NOTE - Depending upon the implementation of
the
LogFactory
you are using, the
Log
instance you are returned may or may not be local to the current
application, and may or may not be returned again on a subsequent
call with the same name argument.
- getInstance in interface LogFactory
name
- Logical name of the Log
instance to be
returned (the meaning of this name is only known to the underlying
logging implementation that is being wrapped)
getLogClassName
protected String getLogClassName()
Return the fully qualified Java classname of the
Log
implementation we will be using.
getLogConstructor
protected Constructor getLogConstructor()
throws LogConfigurationException
Return the
Constructor
that can be called to instantiate
new
Log
instances.
IMPLEMENTATION NOTE - Race conditions caused by
calling this method from more than one thread are ignored, because
the same
Constructor
instance will ultimately be derived
in all circumstances.
isJdk13LumberjackAvailable
protected boolean isJdk13LumberjackAvailable()
Is JDK 1.3 with Lumberjack logging available?
isJdk14Available
protected boolean isJdk14Available()
Return true
if JDK 1.4 or later logging
is available. Also checks that the Throwable
class
supports getStackTrace()
, which is required by
Jdk14Logger.
isLog4JAvailable
protected boolean isLog4JAvailable()
Is a Log4J implementation available?
loadClass
private static Class loadClass(String name)
throws ClassNotFoundException
MUST KEEP THIS METHOD PRIVATE.
Exposing this method outside of
org.apache.commons.logging.LogFactoryImpl
will create a security violation:
This method uses
AccessController.doPrivileged()
.
Load a class, try first the thread class loader, and
if it fails use the loader that loaded this class.
newInstance
protected Log newInstance(String name)
throws LogConfigurationException
Create and return a new
Log
instance for the specified name.
name
- Name of the new logger
release
public void release()
Release any internal references to previously created
Log
instances returned by this factory. This is useful in environments
like servlet containers, which implement application reloading by
throwing away a ClassLoader. Dangling references to objects in that
class loader would prevent garbage collection.
- release in interface LogFactory
removeAttribute
public void removeAttribute(String name)
Remove any configuration attribute associated with the specified name.
If there is no such attribute, no action is taken.
- removeAttribute in interface LogFactory
name
- Name of the attribute to remove
setAttribute
public void setAttribute(String name,
Object value)
Set the configuration attribute with the specified name. Calling
this with a null
value is equivalent to calling
removeAttribute(name)
.
- setAttribute in interface LogFactory
name
- Name of the attribute to setvalue
- Value of the attribute to set, or null
to remove any setting for this attribute
Copyright 2002-2004 The Apache Software Foundation.