Jim,
The logging deadlock issue is subtle and complex. Do we have a test
case that verifies your fix that is deadlock-free?
I can't tell for sure but looks like it smells the potential deadlock if
Logger.getGlobal() triggers the LogManager class initialization but
LogManager.<clinit> calls Logger.getLogger().setLogManager().
Maybe you already see this - 4994705 may give you some idea of the
deadlock problem.
Hope this helps.
Mandy
On 10/24/2012 4:13 PM, Jim Gish wrote:
Please review
http://cr.openjdk.java.net/~jgish/Bug7184195-global-logger-init-fix/
In JDK7, Logger.global was deprecated because of potential deadlock
problems. The method getGlobal() was introduced as a convenience
method to get the global logger in lieu of this or calling
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME). Unfortunately, this was
broken out of the gate. getGlobal() simply used the deprecated static
variable global, but this had the result of returning the global
logger without initializing the logging system. As a result, simply
calling Logger.getGlobal().INFO("msg") does nothing. So much for the
convenience of a simple global logger for devs to use ootb without any
setup required.
This simple fix simply returns
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME) when getGlobal() is called
and hence results in proper setup of the logging sytem /and /a working
global logger with no "assembly" required :-)
Thanks,
Jim