Dale King wrote:
   MDC::put( "key", "value1" );
   MDC::put( "key", "value2" );


Without a code example, I must ask; are these MDC::put calls in the same thread right next to each other?

The attached program correctly swaps keys in 0.9.7. I don't have an installed 0.10.0 build handy at the moment.

--
Jacob Anawalt
Gecko Software, Inc.
[EMAIL PROTECTED]
435-752-8026
// g++ appender_threshold.cpp -llog4cxx
#include <log4cxx/logger.h>
#include <log4cxx/xml/domconfigurator.h>
//#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/mdc.h>

int 
main(void)
{
        log4cxx::xml::DOMConfigurator::configure("log4cxx.xml");
        //log4cxx::PropertyConfigurator::configure("log4cxx.properties");
        log4cxx::LoggerPtr loggerRoot = log4cxx::Logger::getRootLogger();
        log4cxx::LoggerPtr loggerApp = log4cxx::Logger::getLogger("MyApp");

        log4cxx::MDC::put( "key", "value1");

        LOG4CXX_DEBUG(loggerRoot,"1");
        LOG4CXX_DEBUG(loggerApp,"2");

        log4cxx::MDC::put( "key", "value2");
        
        LOG4CXX_WARN(loggerRoot,"3");
        LOG4CXX_WARN(loggerApp,"4");

        if(loggerRoot->isDebugEnabled())
        {
                loggerRoot->forcedLog(::log4cxx::Level::DEBUG
                        ,"Message"
                        ,__FILE__
                        ,__LINE__);
        }

        return EXIT_SUCCESS;
}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
	xmlns:log4j="http://jakarta.apache.org/log4j/";>

	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<param name="Threshold" value="WARN"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{%Y-%m-%d %H:%M:%S} %-5p %c %x - %m %X{key}%n"/>
		</layout>
		<filter class="LevelRangeFilter">
			<param name="AcceptOnMatch" value="true"/>
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="FATAL" />
		</filter>
	</appender>

	<root>
		<level value="ALL"/>
		<appender-ref ref="CONSOLE"/>
	</root>
</log4j:configuration>
Threshold ="".
Level value for root is [ALL].
OptionConverter::toLevel: no class name specified, level=[ALL]
root level set to ALL
Class name: [org.apache.log4j.ConsoleAppender]
Setting option name=[Threshold], value=[WARN]
Parsing layout of class: "org.apache.log4j.PatternLayout"
Setting option name=[ConversionPattern], value=[%d{%Y-%m-%d %H:%M:%S} %-5p %c 
%x - %m %X{key}%n]
Setting option name=[AcceptOnMatch], value=[true]
Setting option name=[LevelMin], value=[DEBUG]
OptionConverter::toLevel: no class name specified, level=[DEBUG]
Setting option name=[LevelMax], value=[FATAL]
OptionConverter::toLevel: no class name specified, level=[FATAL]
Adding filter of type [LevelRangeFilter] to appender named [CONSOLE].
Adding appender named [CONSOLE] to logger [root].
2008-04-16 15:30:36 DEBUG root  - 1 value1
2008-04-16 15:30:36 DEBUG MyApp  - 2 value1
2008-04-16 15:30:36 WARN  root  - 3 value2
2008-04-16 15:30:36 WARN  MyApp  - 4 value2
2008-04-16 15:30:36 DEBUG root  - Message value2

Reply via email to