1
0

Improved error handling. Added custom message when the configured LogFactory implementation does not extend LogFactory. This should make it easier to diagnose when a user has made a mistake in the logging configuration, for example by setting LogFactory to a Log implementation.

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/logging/trunk@138977 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Burrell Donkin
2003-05-01 10:32:36 +00:00
parent 8d5b06149b
commit d8abaeb2b5
2 changed files with 26 additions and 12 deletions

View File

@@ -1,7 +1,7 @@
/* /*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/java/org/apache/commons/logging/LogConfigurationException.java,v 1.2 2003/03/30 23:42:36 craigmcc Exp $ * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/java/org/apache/commons/logging/LogConfigurationException.java,v 1.3 2003/05/01 10:32:36 rdonkin Exp $
* $Revision: 1.2 $ * $Revision: 1.3 $
* $Date: 2003/03/30 23:42:36 $ * $Date: 2003/05/01 10:32:36 $
* *
* ==================================================================== * ====================================================================
* *
@@ -68,7 +68,7 @@ package org.apache.commons.logging;
* factory methods.</p> * factory methods.</p>
* *
* @author Craig R. McClanahan * @author Craig R. McClanahan
* @version $Revision: 1.2 $ $Date: 2003/03/30 23:42:36 $ * @version $Revision: 1.3 $ $Date: 2003/05/01 10:32:36 $
*/ */
public class LogConfigurationException extends RuntimeException { public class LogConfigurationException extends RuntimeException {
@@ -117,7 +117,7 @@ public class LogConfigurationException extends RuntimeException {
*/ */
public LogConfigurationException(String message, Throwable cause) { public LogConfigurationException(String message, Throwable cause) {
super(message); super(message + " (Caused by " + cause + ")");
this.cause = cause; // Two-argument version requires JDK 1.4 or later this.cause = cause; // Two-argument version requires JDK 1.4 or later
} }

View File

@@ -1,7 +1,7 @@
/* /*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/java/org/apache/commons/logging/LogFactory.java,v 1.21 2003/03/30 23:42:36 craigmcc Exp $ * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/java/org/apache/commons/logging/LogFactory.java,v 1.22 2003/05/01 10:32:36 rdonkin Exp $
* $Revision: 1.21 $ * $Revision: 1.22 $
* $Date: 2003/03/30 23:42:36 $ * $Date: 2003/05/01 10:32:36 $
* *
* ==================================================================== * ====================================================================
* *
@@ -87,7 +87,7 @@ import java.util.Properties;
* @author Craig R. McClanahan * @author Craig R. McClanahan
* @author Costin Manolache * @author Costin Manolache
* @author Richard A. Sitze * @author Richard A. Sitze
* @version $Revision: 1.21 $ $Date: 2003/03/30 23:42:36 $ * @version $Revision: 1.22 $ $Date: 2003/05/01 10:32:36 $
*/ */
public abstract class LogFactory { public abstract class LogFactory {
@@ -561,6 +561,9 @@ public abstract class LogFactory {
Object result = AccessController.doPrivileged( Object result = AccessController.doPrivileged(
new PrivilegedAction() { new PrivilegedAction() {
public Object run() { public Object run() {
// This will be used to diagnose bad configurations
// and allow a useful message to be sent to the user
Class logFactoryClass = null;
try { try {
if (classLoader != null) { if (classLoader != null) {
try { try {
@@ -568,7 +571,9 @@ public abstract class LogFactory {
// warning: must typecast here & allow exception // warning: must typecast here & allow exception
// to be generated/caught & recast propertly. // to be generated/caught & recast propertly.
return (LogFactory)classLoader.loadClass(factoryClass).newInstance(); logFactoryClass = classLoader.loadClass(factoryClass);
return (LogFactory) logFactoryClass.newInstance();
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
if (classLoader == LogFactory.class.getClassLoader()) { if (classLoader == LogFactory.class.getClassLoader()) {
// Nothing more to try, onwards. // Nothing more to try, onwards.
@@ -604,8 +609,17 @@ public abstract class LogFactory {
*/ */
// warning: must typecast here & allow exception // warning: must typecast here & allow exception
// to be generated/caught & recast propertly. // to be generated/caught & recast propertly.
return (LogFactory)Class.forName(factoryClass).newInstance(); logFactoryClass = Class.forName(factoryClass);
return (LogFactory) logFactoryClass.newInstance();
} catch (Exception e) { } catch (Exception e) {
// check to see if we've got a bad configuration
if (logFactoryClass != null
&& !LogFactory.class.isAssignableFrom(logFactoryClass)) {
return new LogConfigurationException(
"The chosen LogFactory implementation does not extend LogFactory."
+ " Please check your configuration.",
e);
}
return new LogConfigurationException(e); return new LogConfigurationException(e);
} }
} }