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?

Reply via email to