commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lilianne E. Blaze" <lilianne_bl...@tlen.pl>
Subject Re: [jira] Commented: (LOGGING-111) Small patch to make debugging easier
Date Sun, 19 Nov 2006 11:19:15 GMT
Simon Kitching (JIRA) wrote:
>     [ http://issues.apache.org/jira/browse/LOGGING-111?page=comments#action_12451127
] 
>             
> Simon Kitching commented on LOGGING-111:
> ----------------------------------------
>
> Looks good to me. I've committed this patch (with a couple of extra checks for null causes).
> Thanks very much for your contribution.
>
> SVN commit: 476772 (LogFactoryImpl), 476774 (Log4JLogger).
>
> Could you please check that this works fine for you?
>   

Yes, thank you.

I noticed some small differences between my patch and your commits, was 
it just a matter of code formatting conventions, or did I do something 
wrong? Asking just in case.

Also, the "// note - it still works with log4j 1.3.8-alpha" comment was 
removed? I know it wasn't strictly a part of this enhancement, but isn't 
it worth mentioning, especially since Log4j 1.3 is in .7 - .8 alpha for 
a long time now and probably will be for some time?

Greetings, Lilianne E. Blaze


> Note for others: InvocationTargetException.getTargetException and ExceptionInInitializerError.getException
both exist in jdk1.2.2 (supported platform for JCL).
>
>   
>> 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:
>> [LogFactoryImpl@14810083 from org.apache.catalina.loader.WebappClassLoader@1904280]
Could not instantiate Log 'org.apache.commons.logging.impl.Log4JLogger' -- java.lang.reflect.InvocationTargetException:
null
>> which explains, basically, nothing, you get for example:
>> [LogFactoryImpl@14810083 from org.apache.catalina.loader.WebappClassLoader@1904280]
Could not instantiate Log 'org.apache.commons.logging.impl.Log4JLogger' -- java.lang.reflect.InvocationTargetException:
null
>> [LogFactoryImpl@14810083 from org.apache.catalina.loader.WebappClassLoader@1904280]
... InvocationTargetException: java.lang.ExceptionInInitializerError: null
>> [LogFactoryImpl@14810083 from org.apache.catalina.loader.WebappClassLoader@1904280]
... 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;
>>      } 
>>     
>
>   



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message