RFR: 7184195 - java.util.logging.Logger.getGlobal().info() doesn't log without configuration

Mandy Chung mandy.chung at oracle.com
Mon Oct 29 22:05:50 UTC 2012


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
>



More information about the core-libs-dev mailing list