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