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

Reply via email to