in src/main/cpp/propertyconfigurator.cpp [344:425]
void PropertyConfigurator::parseLogger(
helpers::Properties& props, LoggerPtr& logger, const LogString& /* optionKey */,
const LogString& loggerName, const LogString& value, bool additivity)
{
LogLog::debug(((LogString) LOG4CXX_STR("Parsing for ["))
+ loggerName
+ LOG4CXX_STR("] with value=[")
+ value + LOG4CXX_STR("]."));
// We must skip over ',' but not white space
StringTokenizer st(value, LOG4CXX_STR(","));
// If value is not in the form ", appender.." or "", then we should set
// the level of the logger.
if (!(value.find(LOG4CXX_STR(",")) == 0 || value.empty()))
{
// just to be on the safe side...
if (!st.hasMoreTokens())
{
return;
}
LogString levelStr = st.nextToken();
LogLog::debug((LogString) LOG4CXX_STR("Level token is [")
+ levelStr + LOG4CXX_STR("]."));
// If the level value is inherited, set logger level value to
// null. We also check that the user has not specified inherited for the
// root logger.
if (StringHelper::equalsIgnoreCase(levelStr, LOG4CXX_STR("INHERITED"), LOG4CXX_STR("inherited"))
|| StringHelper::equalsIgnoreCase(levelStr, LOG4CXX_STR("NULL"), LOG4CXX_STR("null")))
{
static const LogString INTERNAL_ROOT_NAME(LOG4CXX_STR("root"));
if (loggerName == INTERNAL_ROOT_NAME)
{
LogLog::warn(LOG4CXX_STR("The root logger cannot be set to null."));
}
else
{
logger->setLevel(0);
LogLog::debug((LogString) LOG4CXX_STR("Logger ")
+ loggerName + LOG4CXX_STR(" set to null"));
}
}
else
{
logger->setLevel(OptionConverter::toLevel(levelStr, Level::getDebug()));
LogLog::debug((LogString) LOG4CXX_STR("Logger ")
+ loggerName + LOG4CXX_STR(" set to ")
+ logger->getLevel()->toString());
}
}
AppenderPtr appender;
LogString appenderName;
std::vector<AppenderPtr> newappenders;
while (st.hasMoreTokens())
{
appenderName = StringHelper::trim(st.nextToken());
if (appenderName.empty() || appenderName == LOG4CXX_STR(","))
{
continue;
}
LogLog::debug(LOG4CXX_STR("Parsing appender named ")
+ appenderName + LOG4CXX_STR("\"."));
appender = parseAppender(props, appenderName);
if (appender != 0)
{
newappenders.push_back(appender);
}
}
logger->reconfigure( newappenders, additivity );
}