in src/main/cpp/domconfigurator.cpp [1062:1178]
void DOMConfigurator::parse(
Pool& p,
LOG4CXX_NS::helpers::CharsetDecoderPtr& utf8Decoder,
apr_xml_elem* element,
apr_xml_doc* doc,
AppenderMap& appenders)
{
std::string rootElementName(element->name);
if (rootElementName != CONFIGURATION_TAG)
{
if (rootElementName == OLD_CONFIGURATION_TAG)
{
//LogLog::warn(LOG4CXX_STR("The <")+String(OLD_CONFIGURATION_TAG)+
// LOG4CXX_STR("> element has been deprecated."));
//LogLog::warn(LOG4CXX_STR("Use the <")+String(CONFIGURATION_TAG)+
// LOG4CXX_STR("> element instead."));
}
else
{
LogLog::error(LOG4CXX_STR("DOM element is - not a <configuration> element."));
return;
}
}
LogString debugAttrib = subst(getAttribute(utf8Decoder, element, INTERNAL_DEBUG_ATTR));
static const WideLife<LogString> NULL_STRING(LOG4CXX_STR("NULL"));
if (LogLog::isDebugEnabled())
{
LogLog::debug(LOG4CXX_STR("debug attribute= \"") + debugAttrib + LOG4CXX_STR("\"."));
}
// if the log4j.dtd is not specified in the XML file, then the
// "debug" attribute is returned as the empty string.
if (!debugAttrib.empty() && debugAttrib != NULL_STRING.value())
{
LogLog::setInternalDebugging(OptionConverter::toBoolean(debugAttrib, true));
}
else if (LogLog::isDebugEnabled())
{
LogLog::debug(LOG4CXX_STR("Ignoring internalDebug attribute."));
}
LogString confDebug = subst(getAttribute(utf8Decoder, element, CONFIG_DEBUG_ATTR));
if (!confDebug.empty() && confDebug != NULL_STRING.value())
{
LogLog::warn(LOG4CXX_STR("The \"configDebug\" attribute is deprecated."));
LogLog::warn(LOG4CXX_STR("Use the \"internalDebug\" attribute instead."));
LogLog::setInternalDebugging(OptionConverter::toBoolean(confDebug, true));
}
LogString thresholdStr = subst(getAttribute(utf8Decoder, element, THRESHOLD_ATTR));
if (LogLog::isDebugEnabled())
{
LogLog::debug(LOG4CXX_STR("Threshold =\"") + thresholdStr + LOG4CXX_STR("\"."));
}
if (!thresholdStr.empty() && thresholdStr != NULL_STRING.value())
{
m_priv->repository->setThreshold(thresholdStr);
}
LogString threadSignalValue = subst(getAttribute(utf8Decoder, element, THREAD_CONFIG_ATTR));
if ( !threadSignalValue.empty() && threadSignalValue != NULL_STRING.value() )
{
if ( threadSignalValue == LOG4CXX_STR("NoConfiguration") )
{
helpers::ThreadUtility::configure( ThreadConfigurationType::NoConfiguration );
}
else if ( threadSignalValue == LOG4CXX_STR("BlockSignalsOnly") )
{
helpers::ThreadUtility::configure( ThreadConfigurationType::BlockSignalsOnly );
}
else if ( threadSignalValue == LOG4CXX_STR("NameThreadOnly") )
{
helpers::ThreadUtility::configure( ThreadConfigurationType::NameThreadOnly );
}
else if ( threadSignalValue == LOG4CXX_STR("BlockSignalsAndNameThread") )
{
helpers::ThreadUtility::configure( ThreadConfigurationType::BlockSignalsAndNameThread );
}
}
apr_xml_elem* currentElement;
for (currentElement = element->first_child;
currentElement;
currentElement = currentElement->next)
{
std::string tagName(currentElement->name);
if (tagName == CATEGORY_FACTORY_TAG)
{
parseLoggerFactory(p, utf8Decoder, currentElement);
}
}
for (currentElement = element->first_child;
currentElement;
currentElement = currentElement->next)
{
std::string tagName(currentElement->name);
if (tagName == CATEGORY || tagName == LOGGER)
{
parseLogger(p, utf8Decoder, currentElement, doc, appenders);
}
else if (tagName == ROOT_TAG)
{
parseRoot(p, utf8Decoder, currentElement, doc, appenders);
}
}
}