Small patch to make debugging easier
------------------------------------

                 Key: LOGGING-111
                 URL: http://issues.apache.org/jira/browse/LOGGING-111
             Project: Commons Logging
          Issue Type: Improvement
    Affects Versions: 1.1.1
         Environment: Commons-Logging + Log4j
            Reporter: Lilianne E. Blaze


During the last few days I had major problems trying to configure 
Commons-Logging + Log4j on Glassfish.
It turned out to be related to Log4j UDPAppender, but it took me needlessly 
long time to verify the problem was indeed in Log4j and not in Commons-Logging, 
Glassfish or something else. Now, why am I posting it here then - I made a 
small modification which logs Log4j failures more precisely, instead of just:

[EMAIL PROTECTED] from [EMAIL PROTECTED] Could not instantiate Log 
'org.apache.commons.logging.impl.Log4JLogger' -- 
java.lang.reflect.InvocationTargetException: null

which explains, basically, nothing, you get for example:

[EMAIL PROTECTED] from [EMAIL PROTECTED] Could not instantiate Log 
'org.apache.commons.logging.impl.Log4JLogger' -- 
java.lang.reflect.InvocationTargetException: null
[EMAIL PROTECTED] from [EMAIL PROTECTED] ... InvocationTargetException: 
java.lang.ExceptionInInitializerError: null
[EMAIL PROTECTED] from [EMAIL PROTECTED] ... ExceptionInInitializerError: 
java.lang.IllegalStateException: Property layout must be set for UDPAppender 
named appenderLocalhostUdp

which states clearly that Log4j was indeed loaded, and the problem was in its 
configuration.
All it does is expand those two exceptions if they occurred. It could be more 
general and more elegant, but this code should work in pre-1.4 Java.

Could you please include it in next build of Commons-Logging?

Attaching the patch text below.

Greetings, Lilianne E. Blaze

Index: LogFactoryImpl.java
*** 
D:\Work\Projects\Apache\commons-logging-custom\src\org\apache\commons\logging\impl\LogFactoryImpl.java
 Base (BASE)
--- 
D:\Work\Projects\Apache\commons-logging-custom\src\org\apache\commons\logging\impl\LogFactoryImpl.java
 Locally Modified (Based On LOCAL)
***************
*** 1362,1369 ****
--- 1362,1388 ----
                       + logAdapterClassName + "' -- "
                       + discoveryFlaw.getClass().getName() + ": "
                       + discoveryFlaw.getLocalizedMessage());
+            +             if ( discoveryFlaw instanceof 
InvocationTargetException ) {
+                 InvocationTargetException ite = 
(InvocationTargetException)discoveryFlaw;
+                 Throwable cause = ite.getTargetException();
+                 logDiagnostic("... InvocationTargetException: " +
+                         cause.getClass().getName() + ": " +
+                         cause.getLocalizedMessage());
+                +                 if( cause instanceof 
ExceptionInInitializerError ) {
+                     ExceptionInInitializerError eiie = 
(ExceptionInInitializerError)cause;
+                     Throwable cause2 = eiie.getException();
+                     logDiagnostic("... ExceptionInInitializerError: " +
+                             cause2.getClass().getName() + ": " +
+                             cause2.getLocalizedMessage());
+                                     }
                +             }
+            +         }
+                 if (!allowFlawedDiscovery) {
             throw new LogConfigurationException(discoveryFlaw);
         }

Index: Log4JLogger.java
*** 
D:\Work\Projects\Apache\commons-logging-custom\src\org\apache\commons\logging\impl\Log4JLogger.java
 Base (BASE)
--- 
D:\Work\Projects\Apache\commons-logging-custom\src\org\apache\commons\logging\impl\Log4JLogger.java
 Locally Modified (Based On LOCAL)
***************
*** 77,84 ****
--- 77,86 ----
     // ------------------------------------------------------------

     static {
+
         if (!Priority.class.isAssignableFrom(Level.class)) {
             // nope, this is log4j 1.3, so force an ExceptionInInitializerError
+             // note - it still works with log4j 1.3.8-alpha
             throw new InstantiationError("Log4J 1.2 not available");
         }
        ***************
*** 112,117 ****
--- 114,124 ----
     /** For use with a log4j factory.
      */
     public Log4JLogger(Logger logger ) {
+      +         if( logger == null ) {
+             throw new IllegalArgumentException("Warning - logger == null, 
possible Log4j misconfiguration?");
+         }
+               this.name = logger.getName();
         this.logger=logger;
     } 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to