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:
[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;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]