Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.1.0
-
None
-
Commons-Logging + Log4j
Description
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 )Unknown macro: {+ InvocationTargetException ite = (InvocationTargetException)discoveryFlaw;+ Throwable cause = ite.getTargetException();+ logDiagnostic("... InvocationTargetException}+ + }
{ throw new LogConfigurationException(discoveryFlaw); }
+ if (!allowFlawedDiscovery)
-
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))
***************
-
-
- 112,117 ****
- 114,124 ----
/** For use with a log4j factory.
*/
public Log4JLogger(Logger logger )Unknown macro: {+ + if( logger == null ) { + throw new IllegalArgumentException("Warning - logger == null, possible Log4j misconfiguration?"); + }+ this.name = logger.getName(); this.logger=logger; }
-
Attachments
Issue Links
- is duplicated by
-
LOGGING-114 Silent Swallowing of NoClassDefFoundError
- Closed