[
https://issues.jboss.org/browse/JBLOGGING-65?page=com.atlassian.jira.plug...
]
David Lloyd commented on JBLOGGING-65:
--------------------------------------
Yeah but what you are not understanding is another common use case: have jboss-logmanager
on the backend, with jboss-logging and slf4j-jboss-logmanager. In this case we want to
choose jboss-logmanager, not slf4j.
This really has nothing to do with utility libraries. That doesn't even come into the
picture. Users are of course free to use slf4j for whatever they want; however
jboss-logging logs to a *backend* normally, of which there are only four majors: log4j,
logback, JUL, and jboss-logmanager.
In your case I think the problem is correctly stated that log4j is falsely detected, but
your workaround is not correct. #1 will be falsely triggered in any environment which has
slf4j present, which will be most environments. However because of the extra indirection,
this could have a major performance impact.
The correct process is probably to detect a second class which is present in log4j but not
in log4j-over-slf4j.
JBoss Logging fails to support log4j-over-slf4j
-----------------------------------------------
Key: JBLOGGING-65
URL:
https://issues.jboss.org/browse/JBLOGGING-65
Project: JBoss Logging
Issue Type: Bug
Security Level: Public(Everyone can see)
Affects Versions: 3.0.0.Beta5-jboss-logging
Reporter: Jeff Ramsdale
Assignee: David Lloyd
Priority: Critical
org.jboss.logging.LoggerProviders tests for the existence of org.apache.log4j.LogManager
and if it discovers it assumes Log4j is in use. This is incorrect in the scenario where
log4j events are routed to slf4j for eventual routing to another logging engine (a very
common use case). This engine may be Logback, but may not. Therefore, the test for whether
slf4j is in use is not whether Logback is in the classpath (Logback is AN implementation
of slf4j, not THE implementation...), but whether org.slf4j.impl.StaticLoggerBinder is.
There should be no attempt to detect Logback itself. JBoss Logging cannot tell through
simply loading org.apache.log4j.LogManager whether this class is provided by log4j or by
log4j-over-slf4j so cannot use this class to detect log4j use. To clarify, the logic
should be:
1) If org.slf4j.impl.StaticLoggerBinder is available, use slf4j.
2) If org.apache.log4j.LogManager (but not StaticLoggerBinder) is available, use log4j.
3) Otherwise use java.util.logging
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira