Uploaded image for project: 'JBoss Logging'
  1. JBoss Logging
  2. JBLOGGING-94

JBoss Logging does not detect log4j 2.0

XMLWordPrintable

      The class org.jboss.logging.LoggerProviders checks for the presence of log4j using the code:

         private static LoggerProvider tryLog4j(final ClassLoader cl) throws ClassNotFoundException {
              Class.forName("org.apache.log4j.LogManager", true, cl);
              // JBLOGGING-65 - slf4j can disguise itself as log4j.  Test for a class that slf4j doesn't provide.
              Class.forName("org.apache.log4j.Hierarchy", true, cl);
              return new Log4jLoggerProvider();
          }
      

      However, despite having the log4j-1.2-api-2.0.jar bridge included, this fails as the class org.apache.log4j.Hierarchy is not present in log4j 2.0.

      I worked around this by forcing JBoss logging to use slf4j (which is then proxied to log4j) by setting the -Dorg.jboss.logging.provider=slf4j option.

      As a proper fix, however, how about checking for a class that is included in log4j 1.2, 2.0 but not slf4j? org.apache.log4j.config.PropertySetter seems to tick the box.

      I tested changing the afore mentioned method to:

          private static LoggerProvider tryLog4j(final ClassLoader cl) throws ClassNotFoundException {
              Class.forName("org.apache.log4j.LogManager", true, cl);
              // JBLOGGING-65 - slf4j can disguise itself as log4j.  Test for a class that slf4j doesn't provide.
              Class.forName("org.apache.log4j.config.PropertySetter", true, cl);
              return new Log4jLoggerProvider();
          }
      

      And indeed I started receiving logging messages from Hibernate (via JBoss logging.)

              jperkins-rhn James Perkins
              bighenry_jira Henry Clout (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: