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