Sorry - I forget that when using GMAIL suddenly the TAB and SPACE keys are dangerous nuclear weapons (@#$!@#%!#2 browser based society...)
1. NDC should not auto-pop() until a functional boundary is reached - in other words, IF branches should not cause pop() but new functions should. 2. Identical NDC strings should be merged (as would keys in an MDC). Or, it should be a class setting - NDC::setCoalescesDuplicateStrings(bool); 3. (Enhancement): Allow NDC to be created as an instance variable of an object and printed with that object's logging messages (e.g., allow them to be object based, not thread-based) 4. NDC documentation is sorely in need of updating, as it's still a hacked copy of the Java version Chris On Tue, May 22, 2012 at 6:32 PM, Christopher Nagel <cnagel....@gmail.com>wrote: > 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 >>>> >>> >>> >> >