]
Richard Opalka moved WFLY-6359 to WFCORE-1494:
----------------------------------------------
Project: WildFly Core (was: WildFly)
Key: WFCORE-1494 (was: WFLY-6359)
Component/s: Logging
(was: Logging)
Affects Version/s: 2.1.0.Final
(was: 10.0.0.Final)
Fix Version/s: 3.0.0.Alpha1
(was: 10.1.0.Final)
Investigate consequences of changes in JDK9 on JBoss Logging
------------------------------------------------------------
Key: WFCORE-1494
URL:
https://issues.jboss.org/browse/WFCORE-1494
Project: WildFly Core
Issue Type: Task
Components: Logging
Affects Versions: 2.1.0.Final
Reporter: Richard Opalka
Assignee: James Perkins
Fix For: 3.0.0.Alpha1
When running:
$[wildfly-core/logging]>mvn test -Dtest=**/Log4jAppenderTestCase
on JDK9 the test is failing.
{noformat}
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)
{noformat}
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:
{code}
// 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
}
{code}
in JDK9 the Security Manager check part disappeared:
{code}
// 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
}
{code}
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.