[
https://issues.apache.org/jira/browse/LOGGING-114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12517484
]
Simon Kitching commented on LOGGING-114:
----------------------------------------
Rather than use smtp appender, presumably the log4j config file could also just
reference an appender that doesn't exist, eg "example.no.such.appender".
However why should log4j be called directly? I thought the problem is that when
JCL is called directly and log4j is not yet initialised, this causes log4j to
auto-initialise which then fails.
JCL then *silently* selects a different logging system where it should at least
write a message to the diagnostics.
Presumably this test would need to catch stderr (ie the diagnostics output) and
search that output text for a message stating that log4j was not selected
because it failed to initialise.
The test will need to be careful to restore stderr to its original destination
in all situations; it would be awkward if the unit test left stderr redirected
;-)
Another useful test might be to check what happens when the
commons-logging.properties file explicitly selects log4j and it fails. I don't
actually know what we do in that case (will check...)
> Silent Swallowing of NoClassDefFoundError
> -----------------------------------------
>
> Key: LOGGING-114
> URL: https://issues.apache.org/jira/browse/LOGGING-114
> Project: Commons Logging
> Issue Type: Bug
> Affects Versions: 1.1.0
> Environment: Various OSs, in combination with log4j 1.2.14.
> Reporter: Malcolm Cleaton
> Priority: Minor
>
> Hi. I'm using commons logging with log4j; my team ship a library which uses
> log4j, and some of our clients use it with commons-logging.
> If commons-logging is in its default configuration, and log4j is present but
> fails to load its configuration with an unhandled exception, the results are
> pretty nasty:
> - commons-logging silently swallows the exception and logs with something
> else. If diagnostics are turned on, the message is:
> Could not instantiate Log 'org.apache.commons.logging.impl.Log4JLogger'
> -- java.lang.reflect.InvocationTargetException: null
> - future attempts to use log4j directly get a pretty unhelpful error:
> java.lang.NoClassDefFoundError at
> org.apache.log4j.Logger.getLogger(Logger.java:117).
> I realise you're trying to deal with a very large number of cases in this
> code, but it does seem like something better could be done here. If nothing
> else is possible, at least recognising the InvocationTargetException and
> pulling out the target exception for the diagnostic log would have helped
> with tracking this one down.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.