in src/main/cpp/domconfigurator.cpp [731:807]
void DOMConfigurator::parseLevel(
LOG4CXX_NS::helpers::Pool& p,
LOG4CXX_NS::helpers::CharsetDecoderPtr& utf8Decoder,
apr_xml_elem* element, LoggerPtr logger, bool isRoot)
{
LogString loggerName = logger->getName();
if (isRoot)
{
loggerName = LOG4CXX_STR("root");
}
LogString levelStr(subst(getAttribute(utf8Decoder, element, VALUE_ATTR)));
if (LogLog::isDebugEnabled())
{
LogLog::debug(LOG4CXX_STR("Level value for ") + loggerName + LOG4CXX_STR(" is [") + levelStr + LOG4CXX_STR("]."));
}
if (StringHelper::equalsIgnoreCase(levelStr, LOG4CXX_STR("INHERITED"), LOG4CXX_STR("inherited"))
|| StringHelper::equalsIgnoreCase(levelStr, LOG4CXX_STR("NULL"), LOG4CXX_STR("null")))
{
if (isRoot)
{
LogLog::error(LOG4CXX_STR("Root level cannot be inherited. Ignoring directive."));
}
else
{
logger->setLevel(0);
}
}
else
{
LogString className(subst(getAttribute(utf8Decoder, element, CLASS_ATTR)));
if (className.empty())
{
logger->setLevel(OptionConverter::toLevel(levelStr, Level::getDebug()));
}
else
{
if (LogLog::isDebugEnabled())
{
LogLog::debug(LOG4CXX_STR("Desired Level sub-class: [") + className + LOG4CXX_STR("]"));
}
try
{
Level::LevelClass& levelClass =
(Level::LevelClass&)Loader::loadClass(className);
LevelPtr level = levelClass.toLevel(levelStr);
logger->setLevel(level);
}
catch (Exception& oops)
{
LogLog::error(
LOG4CXX_STR("Could not create level [") + levelStr +
LOG4CXX_STR("]. Reported error follows."),
oops);
return;
}
catch (...)
{
LogLog::error(
LOG4CXX_STR("Could not create level [") + levelStr);
return;
}
}
}
if (LogLog::isDebugEnabled())
{
LogLog::debug(loggerName + LOG4CXX_STR(" level set to ") +
logger->getEffectiveLevel()->toString());
}
}