OMG, Well, unfortunately although this worked fine in debug mode I'm afraid it is just different at runtime outside GDB: the pop() is, as confirmed by log entries, happening at the tail end of the IF branch!! Yet, across function calls in other parts of the code, I get TWO NDC's.
At this point, I am thinking this is actually several bugs: This is just baffling me. I really doubt the thing would pop() On Tue, May 22, 2012 at 3:27 PM, Christopher Nagel <cnagel....@gmail.com>wrote: > Just to be a good citizen, I thought I'd offer the solution I am using: > > if( log4cxx::NDC::getDepth() == 0 ) > log4cxx::NDC ndc(m_loggingContext); > > Chris > > > On Fri, May 18, 2012 at 3:23 PM, Christopher Nagel > <cnagel....@gmail.com>wrote: > >> BTW, I should also note that in stepping through the code, NDC::empty() >> returns true so the new NDC is then instantiated. >> >> Could it be that the scope of the IF statement causes it to pop() as soon >> as it's push()ed by the ctor? >> >> Chris >> >> >> On Fri, May 18, 2012 at 3:14 PM, Christopher Nagel >> <cnagel....@gmail.com>wrote: >> >>> I had the following code at the beginning of every method of an object: >>> >>> log4cxx::NDC ndc( m_loggingContext ); >>> LOG4CXX_TRACE(logger, "Doing whatever!") ; >>> >>> m_loggingContext was set in an init method to be like "Chan 4 / Dev 3". >>> >>> This worked OK but eventually, if one method called another, I'd get >>> NDC's in the log (pattern = "<%t>") that were concatenated duplicates, >>> e.g., >>> >>> ... <Chan 4 / Dev 3 Chan 4 / Dev 3> ... Doing whatever! >>> >>> Not good. >>> >>> So, I changed the code to this: >>> >>> if( log4cxx::NDC::empty() ) >>> log4cxx::NDC ndc( m_loggingContext ); >>> LOG4CXX_TRACE(logger, " Doing whatever!") ; >>> >>> Now, the logs all show <null> for ALL NDC's, everywhere. >>> >>> What is the correct way to avoid duplicate NDC's but also get some >>> output? >>> >>> Thanks, >>> Chris >>> >> >> >