After migrating to Java 11 we were suddenly seeing a lot of caught exceptions sun.rmi.runtime.Log#getSource(). This was surprising to use because we WildFly which sets the "sun.rmi" logger to level WARN. Upon closer inspection the issue is that the logger used by sun.rmi.runtime.Log has level ALL (Integer#MIN_VALUE).
The issue for this seems to be the following:
- since Java 9 java.util.logging differentiates between system loggers (used by modules in the platform classloader) and user loggers (everything else), see java.util.logging#Logger.demandLogger(String, String, Class<?>)
- when a system logger is created a second user logger is created and their configurations are merged, however they are merged based on internal state maintained by #setLevel(Level), see java.util.logging.LogManager#demandSystemLogger(String, String, Module) and java.util.logging.Logger#mergeWithSystemLogger(Logger)
- org.jboss.logmanager.Logger only ends up calling #setLevel(Level) with Level.ALL therefore the resulting system logger always has the level ALL
The issue is quite hard to test because:
- the effect only happens when the caller of #getLoggger(String) is a system module
- the log output is not different, only #isLoggable(Level) checks that shouldn't succeed suddenly succeed so you only see the overhead
- is incorporated by
-
JBEAP-19255 (7.2.z) Upgrade jboss-logmanager from 2.1.14.Final to 2.1.15.Final
- Closed
-
WFCORE-4930 Upgrade jboss-logmanager from 2.1.14.Final to 2.1.15.Final
- Closed