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 >> > >