rwaldhoff 01/08/17 08:56:05
Modified: logging/src/java/org/apache/commons/logging LogSource.java
Log:
* add try/catch blocks in case the security restrictions in the VM are tight
* add support for "propertyless' configuration of log factory
* drop Iterator from the public interface of this class (using String[] instead)
Revision Changes Path
1.5 +65 -13
jakarta-commons-sandbox/logging/src/java/org/apache/commons/logging/LogSource.java
Index: LogSource.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/logging/src/java/org/apache/commons/logging/LogSource.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- LogSource.java 2001/08/15 21:23:23 1.4
+++ LogSource.java 2001/08/17 15:56:04 1.5
@@ -11,12 +11,13 @@
import java.util.HashMap;
import java.lang.reflect.Constructor;
import java.util.Iterator;
+import java.lang.reflect.InvocationTargetException;
/**
* Factory for creating {@link Log} instances.
*
* @author Rod Waldhoff
- * @version $Id: LogSource.java,v 1.4 2001/08/15 21:23:23 rwaldhoff Exp $
+ * @version $Id: LogSource.java,v 1.5 2001/08/17 15:56:04 rwaldhoff Exp $
*/
public class LogSource {
static protected HashMap _logs = new HashMap();
@@ -30,12 +31,62 @@
}
} catch(ClassNotFoundException e) {
_log4jIsAvailable = false;
+ } catch(ExceptionInInitializerError e) {
+ _log4jIsAvailable = false;
+ } catch(LinkageError e) {
+ _log4jIsAvailable = false;
+ }
+ }
+
+ static protected Constructor _logimplctor = null;
+ static {
+ try {
+
setLogImplementation(System.getProperty("org.apache.commons.logging.log","org.apache.commons.logging.NoOpLog"));
+ } catch(SecurityException e) {
+ _logimplctor = null;
+ } catch(LinkageError e) {
+ _logimplctor = null;
+ } catch(NoSuchMethodException e) {
+ _logimplctor = null;
+ } catch(ClassNotFoundException e) {
+ _logimplctor = null;
}
}
private LogSource() {
}
+ /**
+ * Set the log implementation/log implementation factory
+ * by the name of the class. The given class
+ * must implement {@link Log}, and provide a constructor that
+ * takes a single {@link String} argument (containing the name
+ * of the log).
+ */
+ static public void setLogImplementation(String classname) throws
+ LinkageError, ExceptionInInitializerError,
+ NoSuchMethodException, SecurityException,
+ ClassNotFoundException {
+ Class logclass = Class.forName(classname);
+ Class[] argtypes = new Class[1];
+ argtypes[0] = "".getClass();
+ _logimplctor = logclass.getConstructor(argtypes);
+ }
+
+ /**
+ * Set the log implementation/log implementation factory
+ * by class. The given class must implement {@link Log},
+ * and provide a constructor that takes a single {@link String}
+ * argument (containing the name of the log).
+ */
+ static public void setLogImplementation(Class logclass) throws
+ LinkageError, ExceptionInInitializerError,
+ NoSuchMethodException, SecurityException {
+ Class[] argtypes = new Class[1];
+ argtypes[0] = "".getClass();
+ _logimplctor = logclass.getConstructor(argtypes);
+ }
+
static public Log getInstance(String name) {
Log log = (Log)(_logs.get(name));
if(null == log) {
@@ -74,18 +125,19 @@
*/
static public Log makeNewLogInstance(String name) {
Log log = null;
- String logclassname =
- System.getProperty("org.apache.commoons.logging.log",
- "org.apache.commons.logging.NoOpLog");
try {
- Class logclass = Class.forName(logclassname);
- Class[] argtypes = new Class[1];
- argtypes[0] = "".getClass();
- Constructor ctor = logclass.getConstructor(argtypes);
Object[] args = new Object[1];
args[0] = name;
- log = (Log)(ctor.newInstance(args));
- } catch(Exception e) {
+ log = (Log)(_logimplctor.newInstance(args));
+ } catch (InstantiationException e) {
+ log = null;
+ } catch (IllegalAccessException e) {
+ log = null;
+ } catch (IllegalArgumentException e) {
+ log = null;
+ } catch (InvocationTargetException e) {
+ log = null;
+ } catch (NullPointerException e) {
log = null;
}
if(null == log) {
@@ -111,11 +163,11 @@
}
/**
- * Returns an iterator over the names of
+ * Returns a {@link String} array containing the names of
* all logs known to me.
*/
- static public Iterator getLogNames() {
- return _logs.keySet().iterator();
+ static public String[] getLogNames() {
+ return (String[])(_logs.keySet().toArray(new String[_logs.size()]));
}
}