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

Reply via email to