logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Curt Arnold <carn...@apache.org>
Subject Re: Caching LoggerPtr using local statics (the singleton pattern)
Date Tue, 26 May 2009 13:20:27 GMT
Try using the one parameter constructor for LoggerPtr, instead of the  
default constructor and then an assignment:

>   static LoggerPtr  
> singleton(log4cxx::LogManager::getLogger("some.logger"));

There is a slight difference in order of events between the two.   
Using the default constructor, it is

1. Construct singleton
2. Call LogManager::getLogger()
     2a. initialize APR, etc
3. Assign logger to singleton

With the one parameter it is

1 Call LogManager::getLogger()
    1a initialize APR
3. Construct singleton

Since destruction events occur in reverse order, using the one- 
parameter constructor results in APR being destroyed last.

On May 26, 2009, at 3:37 AM, Assaf Lavie wrote:

> My program always crashes when I try to cache the LoggerPtr returned  
> from getLogger in a local static variable (i.e. singleton) like this:
> LoggerPtr MyLogger()
> {
>   static LoggerPtr singleton =  
> log4cxx::LogManager::getLogger("some.logger");
>   return singleton;
> }
> I assume this happens because of some APR related effect. Can  
> someone please shed light on this? Does this happen to you?

View raw message