-
Task
-
Resolution: Done
-
Major
-
2.1.0.Final
-
None
When running:
$[wildfly-core/logging]>mvn test -Dtest=**/Log4jAppenderTestCase
on JDK9 the test is failing.
levelTest(org.jboss.as.logging.logmanager.Log4jAppenderTestCase) Time elapsed: 0.006 sec <<< ERROR! java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager") at org.jboss.logmanager.Logger.getLogger(Logger.java:57) at org.jboss.as.logging.logmanager.Log4jAppenderTestCase.<init>(Log4jAppenderTestCase.java:49) formatTest(org.jboss.as.logging.logmanager.Log4jAppenderTestCase) Time elapsed: 0.001 sec <<< ERROR! java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager") at org.jboss.logmanager.Logger.getLogger(Logger.java:57) at org.jboss.as.logging.logmanager.Log4jAppenderTestCase.<init>(Log4jAppenderTestCase.java:49)
After short debugging I identified the difference between JDK8 and JKD9 that is causing the test to fail. In JDK8 the relevant piece of code was:
// java.util.logging.Logger private static Logger demandLogger(String name, String resourceBundleName, Class<?> caller) { LogManager manager = LogManager.getLogManager(); SecurityManager sm = System.getSecurityManager(); if (sm != null && !SystemLoggerHelper.disableCallerCheck) { if (caller.getClassLoader() == null) { return manager.demandSystemLogger(name, resourceBundleName); } } return manager.demandLogger(name, resourceBundleName, caller); // ends up calling new Logger(name, resourceBundleName, caller) // iff the logger doesn't exist already }
in JDK9 the Security Manager check part disappeared:
// java.util.logging.Logger private static Logger demandLogger(String name, String resourceBundleName, Class<?> caller) { LogManager manager = LogManager.getLogManager(); if (!SystemLoggerHelper.disableCallerCheck) { if (caller.getClassLoader() == null) { return manager.demandSystemLogger(name, resourceBundleName, caller); } } return manager.demandLogger(name, resourceBundleName, caller); // ends up calling new Logger(name, resourceBundleName, caller) // iff the logger doesn't exist already }
This change causes the platform java.util.logging.Logger is returned instead of expected one
org.jboss.logmanager.Logger.
It is possible to workaround this problem by setting sun.util.logging.disableCallerCheck JVM property, like:
$[wildfly-core/logging]>mvn test -Dtest=**/Log4jAppenderTestCase -Dsun.util.logging.disableCallerCheck=true
Please investigate, whether this is regression that should be addressed by Oracle and if there are not other potential problems affecting proper logging functionality on JDK9.
- is related to
-
LOGMGR-130 JDK9 Support
- Resolved
-
WFCORE-1374 Make it build & work on JDK9
- Resolved
-
WFLY-3854 Make it build & work on JDK9
- Closed
-
WFLY-9814 Fix build & testsuite for JDK 9
- Closed