This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git


The following commit(s) were added to refs/heads/master by this push:
     new 84fa35a2 Improve internal debug logging message consistency in 
configuration file parsing (#527)
84fa35a2 is described below

commit 84fa35a25c3a05a5f113b169ac3fb7c89d4eb272
Author: Stephen Webb <[email protected]>
AuthorDate: Fri Aug 29 10:49:11 2025 +1000

    Improve internal debug logging message consistency in configuration file 
parsing (#527)
    
    * Remove duplicate/unhelpful/misleading/ancient messages
    
    * Prefer pooled constant strings over static std::string
    
    * Use consistent error message formats
    
    * Warn of a threadConfiguration value typo
    
    * Handle LoggerFactory instances consistently
---
 src/main/cpp/domconfigurator.cpp      | 147 +++++++++++++----------------
 src/main/cpp/optionconverter.cpp      |  66 ++++++-------
 src/main/cpp/propertyconfigurator.cpp | 171 ++++++++++++----------------------
 3 files changed, 153 insertions(+), 231 deletions(-)

diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index 93102d9c..3ec80773 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -209,8 +209,8 @@ AppenderPtr DOMConfigurator::findAppenderByReference(
 
        if (!appender)
        {
-               LogLog::error(LOG4CXX_STR("No appender named [") +
-                       appenderName + LOG4CXX_STR("] could be found."));
+               LogLog::error(LOG4CXX_STR("No ") + 
Appender::getStaticClass().getName()
+                       + LOG4CXX_STR(" named [") + appenderName + 
LOG4CXX_STR("] could be found."));
        }
 
        return appender;
@@ -229,7 +229,8 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
        LogString className(subst(getAttribute(utf8Decoder, appenderElement, 
CLASS_ATTR)));
        if (LogLog::isDebugEnabled())
        {
-               LogLog::debug(LOG4CXX_STR("Class name: [") + className + 
LOG4CXX_STR("]"));
+               LogLog::debug(LOG4CXX_STR("Desired ") + 
Appender::getStaticClass().getName()
+                                       + LOG4CXX_STR(" sub-class: [") + 
className + LOG4CXX_STR("]"));
        }
 
        try
@@ -237,7 +238,7 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
                ObjectPtr instance = 
ObjectPtr(Loader::loadClass(className).newInstance());
                AppenderPtr appender = LOG4CXX_NS::cast<Appender>(instance);
                if(!appender){
-                       LogLog::error(LOG4CXX_STR("Could not cast class of type 
[") + className + LOG4CXX_STR("] to appender"));
+                       LogLog::error(LOG4CXX_STR("Could not cast [") + 
className + LOG4CXX_STR("] to ") + Appender::getStaticClass().getName());
                        return AppenderPtr();
                }
                PropertySetter propSetter(appender);
@@ -316,21 +317,22 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
                                        AppenderAttachablePtr aa = 
LOG4CXX_NS::cast<AppenderAttachable>(appender);
                                        if (LogLog::isDebugEnabled())
                                        {
-                                               
LogLog::debug(LOG4CXX_STR("Attaching appender named [") +
-                                                       refName + 
LOG4CXX_STR("] to appender named [") +
-                                                       appender->getName() + 
LOG4CXX_STR("]."));
+                                               
LogLog::debug(LOG4CXX_STR("Attaching ") + Appender::getStaticClass().getName()
+                                                       + LOG4CXX_STR(" named 
[") + refName + LOG4CXX_STR("] to ") + Appender::getStaticClass().getName()
+                                                       + LOG4CXX_STR(" named 
[") + appender->getName() + LOG4CXX_STR("]"));
                                        }
                                        
aa->addAppender(findAppenderByReference(p, utf8Decoder, currentElement, doc, 
appenders));
                                }
                                else if (refName.empty())
                                {
-                                       LogLog::error(LOG4CXX_STR("Can't add 
appender with empty ref attribute"));
+                                       LogLog::error(LOG4CXX_STR("Can't add ") 
+ Appender::getStaticClass().getName() + LOG4CXX_STR(" with empty ref 
attribute"));
                                }
                                else
                                {
-                                       LogLog::error(LOG4CXX_STR("Requesting 
attachment of appender named [") +
-                                               refName + LOG4CXX_STR("] to 
appender named [") + appender->getName() +
-                                               LOG4CXX_STR("] which does not 
implement AppenderAttachable."));
+                                       LogLog::error(LOG4CXX_STR("Requesting 
attachment of ") + Appender::getStaticClass().getName()
+                                               + LOG4CXX_STR(" named [") + 
refName + LOG4CXX_STR("] to ") + Appender::getStaticClass().getName()
+                                               + LOG4CXX_STR(" named [") + 
appender->getName() + LOG4CXX_STR("]")
+                                               + LOG4CXX_STR(" which does not 
implement ") + AppenderAttachable::getStaticClass().getName());
                                }
                        }
                }
@@ -342,8 +344,7 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
            problem: we can't create an Appender */
        catch (Exception& oops)
        {
-               LogLog::error(LOG4CXX_STR("Could not create an Appender. 
Reported error follows."),
-                       oops);
+               LogLog::error(LOG4CXX_STR("Could not create ") + 
Appender::getStaticClass().getName() + LOG4CXX_STR(" sub-class"), oops);
                return 0;
        }
 }
@@ -473,7 +474,7 @@ void DOMConfigurator::parseLogger(
        if (LogLog::isDebugEnabled())
        {
                LogLog::debug(LOG4CXX_STR("Setting [") + logger->getName() + 
LOG4CXX_STR("] additivity to [") +
-                       (additivity ? LogString(LOG4CXX_STR("true")) : 
LogString(LOG4CXX_STR("false"))) + LOG4CXX_STR("]."));
+                       (additivity ? LogString(LOG4CXX_STR("true")) : 
LogString(LOG4CXX_STR("false"))) + LOG4CXX_STR("]"));
        }
        logger->setAdditivity(additivity);
        parseChildrenOfLoggerElement(p, utf8Decoder, loggerElement, logger, 
false, doc, appenders);
@@ -495,14 +496,15 @@ void DOMConfigurator::parseLoggerFactory(
        }
        else
        {
-               if (LogLog::isDebugEnabled())
-               {
-                       LogLog::debug(LOG4CXX_STR("Desired logger factory: [") 
+ className + LOG4CXX_STR("]"));
-               }
-               std::shared_ptr<Object> obj = 
OptionConverter::instantiateByClassName(
-                               className,
-                               LoggerFactory::getStaticClass(),
-                               0);
+               auto obj = OptionConverter::instantiateByClassName
+                       ( StringHelper::trim(className)
+                       , LoggerFactory::getStaticClass()
+#if LOG4CXX_ABI_VERSION <= 15
+                       , std::make_shared<DefaultLoggerFactory>()
+#else
+                       , std::make_shared<LoggerFactory>()
+#endif
+                       );
                m_priv->loggerFactory = LOG4CXX_NS::cast<LoggerFactory>(obj);
                PropertySetter propSetter(m_priv->loggerFactory);
 
@@ -561,8 +563,11 @@ void DOMConfigurator::parseChildrenOfLoggerElement(
                        if (appender)
                        {
                                if (LogLog::isDebugEnabled())
-                                       LogLog::debug(LOG4CXX_STR("Adding 
appender named [") + refName +
-                                               LOG4CXX_STR("] to logger [") + 
logger->getName() + LOG4CXX_STR("]."));
+                               {
+                                       LogLog::debug(LOG4CXX_STR("Adding ") + 
Appender::getStaticClass().getName()
+                                               + LOG4CXX_STR(" named [") + 
refName + LOG4CXX_STR("]")
+                                               + LOG4CXX_STR(" to logger [") + 
logger->getName() + LOG4CXX_STR("]"));
+                               }
                                newappenders.push_back(appender);
                        }
                        else
@@ -604,7 +609,8 @@ LayoutPtr DOMConfigurator::parseLayout (
        LogString className(subst(getAttribute(utf8Decoder, layout_element, 
CLASS_ATTR)));
        if (LogLog::isDebugEnabled())
        {
-               LogLog::debug(LOG4CXX_STR("Parsing layout of class: \"") + 
className + LOG4CXX_STR("\""));
+               LogLog::debug(LOG4CXX_STR("Desired ") + 
Layout::getStaticClass().getName()
+                                       + LOG4CXX_STR(" sub-class: [") + 
className + LOG4CXX_STR("]"));
        }
 
        try
@@ -630,8 +636,7 @@ LayoutPtr DOMConfigurator::parseLayout (
        }
        catch (Exception& oops)
        {
-               LogLog::error(LOG4CXX_STR("Could not create the Layout. 
Reported error follows."),
-                       oops);
+               LogLog::error(LOG4CXX_STR("Could not create ") + 
Layout::getStaticClass().getName() + LOG4CXX_STR(" sub-class"), oops);
                return 0;
        }
 }
@@ -647,7 +652,8 @@ ObjectPtr DOMConfigurator::parseTriggeringPolicy (
        LogString className = subst(getAttribute(utf8Decoder, layout_element, 
CLASS_ATTR));
        if (LogLog::isDebugEnabled())
        {
-               LogLog::debug(LOG4CXX_STR("Parsing triggering policy of class: 
\"") + className + LOG4CXX_STR("\""));
+               LogLog::debug(LOG4CXX_STR("Desired ") + 
TriggeringPolicy::getStaticClass().getName()
+                                       + LOG4CXX_STR(" sub-class: [") + 
className + LOG4CXX_STR("]"));
        }
 
        try
@@ -686,8 +692,7 @@ ObjectPtr DOMConfigurator::parseTriggeringPolicy (
        }
        catch (Exception& oops)
        {
-               LogLog::error(LOG4CXX_STR("Could not create the 
TriggeringPolicy. Reported error follows."),
-                       oops);
+               LogLog::error(LOG4CXX_STR("Could not create ") + 
TriggeringPolicy::getStaticClass().getName() + LOG4CXX_STR(" sub-class"), oops);
                return 0;
        }
 }
@@ -703,7 +708,8 @@ RollingPolicyPtr DOMConfigurator::parseRollingPolicy (
        LogString className = subst(getAttribute(utf8Decoder, layout_element, 
CLASS_ATTR));
        if (LogLog::isDebugEnabled())
        {
-               LogLog::debug(LOG4CXX_STR("Parsing rolling policy of class: 
\"") + className + LOG4CXX_STR("\""));
+               LogLog::debug(LOG4CXX_STR("Desired ") + 
RollingPolicy::getStaticClass().getName()
+                                       + LOG4CXX_STR(" sub-class: [") + 
className + LOG4CXX_STR("]"));
        }
 
        try
@@ -729,8 +735,7 @@ RollingPolicyPtr DOMConfigurator::parseRollingPolicy (
        }
        catch (Exception& oops)
        {
-               LogLog::error(LOG4CXX_STR("Could not create the RollingPolicy. 
Reported error follows."),
-                       oops);
+               LogLog::error(LOG4CXX_STR("Could not create ") + 
RollingPolicy::getStaticClass().getName() + LOG4CXX_STR(" sub-class"), oops);
                return 0;
        }
 }
@@ -755,7 +760,7 @@ void DOMConfigurator::parseLevel(
        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("]."));
+               LogLog::debug(LOG4CXX_STR("Level value for ") + loggerName + 
LOG4CXX_STR(" is [") + levelStr + LOG4CXX_STR("]"));
        }
 
        if (StringHelper::equalsIgnoreCase(levelStr, LOG4CXX_STR("INHERITED"), 
LOG4CXX_STR("inherited"))
@@ -763,7 +768,7 @@ void DOMConfigurator::parseLevel(
        {
                if (isRoot)
                {
-                       LogLog::error(LOG4CXX_STR("Root level cannot be 
inherited. Ignoring directive."));
+                       LogLog::error(LOG4CXX_STR("Root level cannot be ") + 
levelStr + LOG4CXX_STR(". Ignoring directive."));
                }
                else
                {
@@ -782,7 +787,8 @@ void DOMConfigurator::parseLevel(
                {
                        if (LogLog::isDebugEnabled())
                        {
-                               LogLog::debug(LOG4CXX_STR("Desired Level 
sub-class: [") + className + LOG4CXX_STR("]"));
+                               LogLog::debug(LOG4CXX_STR("Desired ") + 
Level::getStaticClass().getName()
+                                       + LOG4CXX_STR(" sub-class: [") + 
className + LOG4CXX_STR("]"));
                        }
 
                        try
@@ -794,18 +800,14 @@ void DOMConfigurator::parseLevel(
                        }
                        catch (Exception& oops)
                        {
-                               LogLog::error(
-                                       LOG4CXX_STR("Could not create level [") 
+ levelStr +
-                                       LOG4CXX_STR("]. Reported error 
follows."),
-                                       oops);
-
+                               LogLog::error(LOG4CXX_STR("Could not create ") 
+ Level::getStaticClass().getName() + LOG4CXX_STR(" sub-class"), oops);
                                return;
                        }
                        catch (...)
                        {
-                               LogLog::error(
-                                       LOG4CXX_STR("Could not create level [") 
+ levelStr);
-
+                               LogLog::error(LOG4CXX_STR("Could not create ") 
+ Level::getStaticClass().getName() + LOG4CXX_STR(" sub-class")
+                                                       + LOG4CXX_STR(" from 
[") + className
+                                                       + LOG4CXX_STR("]"));
                                return;
                        }
                }
@@ -840,13 +842,6 @@ spi::ConfigurationStatus DOMConfigurator::doConfigure
 {
        m_priv->repository = repository ? repository : 
LogManager::getLoggerRepository();
        m_priv->repository->setConfigured(true);
-       if (LogLog::isDebugEnabled())
-       {
-               LogString msg(LOG4CXX_STR("DOMConfigurator configuring file "));
-               msg.append(filename.getPath());
-               msg.append(LOG4CXX_STR("..."));
-               LogLog::debug(msg);
-       }
 
 #if LOG4CXX_ABI_VERSION <= 15
        m_priv->loggerFactory = std::make_shared<DefaultLoggerFactory>();
@@ -880,7 +875,7 @@ spi::ConfigurationStatus DOMConfigurator::doConfigure
                if (LogLog::isDebugEnabled())
                {
                        LogString debugMsg = LOG4CXX_STR("Loading configuration 
file [")
-                                       + filename.getPath() + 
LOG4CXX_STR("].");
+                                       + filename.getPath() + LOG4CXX_STR("]");
                        LogLog::debug(debugMsg);
                }
 
@@ -1054,48 +1049,34 @@ void DOMConfigurator::parse(
 
        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())
+       if (!debugAttrib.empty() && debugAttrib != LOG4CXX_STR("NULL"))
        {
                
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())
+       if (!thresholdStr.empty() && thresholdStr != LOG4CXX_STR("NULL"))
        {
-               m_priv->repository->setThreshold(thresholdStr);
+               
m_priv->repository->setThreshold(OptionConverter::toLevel(thresholdStr, 
Level::getAll()));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(LOG4CXX_STR("Repository threshold =[")
+                               + m_priv->repository->getThreshold()->toString()
+                               + LOG4CXX_STR("]"));
+               }
        }
 
        LogString threadSignalValue = subst(getAttribute(utf8Decoder, element, 
THREAD_CONFIG_ATTR));
 
-       if ( !threadSignalValue.empty() && threadSignalValue != 
NULL_STRING.value() )
+       if ( !threadSignalValue.empty() && threadSignalValue != 
LOG4CXX_STR("NULL") )
        {
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(LOG4CXX_STR("ThreadUtility configuration 
=[") + threadSignalValue + LOG4CXX_STR("]"));
+               }
                if ( threadSignalValue == LOG4CXX_STR("NoConfiguration") )
                {
                        helpers::ThreadUtility::configure( 
ThreadConfigurationType::NoConfiguration );
@@ -1112,6 +1093,10 @@ void DOMConfigurator::parse(
                {
                        helpers::ThreadUtility::configure( 
ThreadConfigurationType::BlockSignalsAndNameThread );
                }
+               else
+               {
+                       LogLog::warn(LOG4CXX_STR("threadConfiguration value [") 
+ threadSignalValue + LOG4CXX_STR("]") + LOG4CXX_STR(" is not valid"));
+               }
        }
 
        apr_xml_elem* currentElement;
@@ -1153,7 +1138,7 @@ LogString DOMConfigurator::subst(const LogString& value)
        }
        catch (IllegalArgumentException& e)
        {
-               LogLog::warn(LOG4CXX_STR("Could not perform variable 
substitution."), e);
+               LogLog::warn(LOG4CXX_STR("Could not substitute variables using 
[") + value + LOG4CXX_STR("]"), e);
                return value;
        }
 }
diff --git a/src/main/cpp/optionconverter.cpp b/src/main/cpp/optionconverter.cpp
index 178e2437..2b6cd619 100644
--- a/src/main/cpp/optionconverter.cpp
+++ b/src/main/cpp/optionconverter.cpp
@@ -322,39 +322,30 @@ LevelPtr OptionConverter::toLevel(const LogString& value,
 
        if (hashIndex == LogString::npos)
        {
+               // no class name specified : use standard Level class
                if (value.empty())
                {
                        return defaultValue;
                }
                else
                {
-                       if (LogLog::isDebugEnabled())
-                       {
-                               LogLog::debug(
-                                       ((LogString) 
LOG4CXX_STR("OptionConverter::toLevel: no class name specified, level=["))
-                                       + value
-                                       + LOG4CXX_STR("]"));
-                       }
-                       // no class name specified : use standard Level class
                        return Level::toLevelLS(value, defaultValue);
                }
        }
 
        LogString clazz = value.substr(hashIndex + 1);
        LogString levelName = value.substr(0, hashIndex);
-       if (LogLog::isDebugEnabled())
-       {
-               LogLog::debug(LOG4CXX_STR("OptionConverter::toLevel: class=[")
-               + clazz + LOG4CXX_STR("], level=[")
-               + levelName + LOG4CXX_STR("]")
-               );
-       }
 
        // This is degenerate case but you never know.
-       if (levelName.empty())
+       if (levelName.empty() || clazz.empty())
        {
                return Level::toLevelLS(value, defaultValue);
        }
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Desired ") + 
Level::getStaticClass().getName()
+                               + LOG4CXX_STR(" sub-class: [") + clazz + 
LOG4CXX_STR("]"));
+       }
 
        try
        {
@@ -367,18 +358,11 @@ LevelPtr OptionConverter::toLevel(const LogString& value,
                        dynamic_cast<const 
Level::LevelClass&>(Loader::loadClass(clazz));
                return levelClass.toLevel(levelName);
        }
-       catch (ClassNotFoundException&)
-       {
-               LogLog::warn(((LogString) LOG4CXX_STR("custom level class ["))
-                       + clazz + LOG4CXX_STR("] not found."));
-       }
        catch (Exception& oops)
        {
-               LogLog::warn(
-                       LOG4CXX_STR("class [") + clazz + LOG4CXX_STR("], level 
[") + levelName +
-                       LOG4CXX_STR("] conversion) failed."), oops);
+               LogLog::error(LOG4CXX_STR("Could not create ") + 
Level::getStaticClass().getName() + LOG4CXX_STR(" sub-class"), oops);
        }
-       catch(const std::bad_cast&)
+       catch (const std::bad_cast&)
        {
                LogLog::warn(
                        LOG4CXX_STR("class [") + clazz + LOG4CXX_STR("] unable 
to be converted to "
@@ -416,25 +400,27 @@ ObjectPtr OptionConverter::instantiateByKey(Properties& 
props, const LogString&
 ObjectPtr OptionConverter::instantiateByClassName(const LogString& className,
        const Class& superClass, const ObjectPtr& defaultValue)
 {
-       if (!className.empty())
+       if (LogLog::isDebugEnabled())
        {
-               try
-               {
-                       const Class& classObj = Loader::loadClass(className);
-                       ObjectPtr newObject =  
ObjectPtr(classObj.newInstance());
-
-                       if (!newObject->instanceof(superClass))
-                       {
-                               return defaultValue;
-                       }
+               LogLog::debug(LOG4CXX_STR("Desired ") + superClass.getName()
+                       + LOG4CXX_STR(" sub-class: [") + className + 
LOG4CXX_STR("]"));
+       }
+       try
+       {
+               const Class& classObj = Loader::loadClass(className);
+               ObjectPtr newObject =  ObjectPtr(classObj.newInstance());
 
-                       return newObject;
-               }
-               catch (Exception& e)
+               if (!newObject->instanceof(superClass))
                {
-                       LogLog::error(LOG4CXX_STR("Could not instantiate class 
[") +
-                               className + LOG4CXX_STR("]."), e);
+                       LogLog::error(LOG4CXX_STR("Not a ") + 
superClass.getName() + LOG4CXX_STR(" sub-class"));
+                       return defaultValue;
                }
+
+               return newObject;
+       }
+       catch (Exception& e)
+       {
+               LogLog::error(LOG4CXX_STR("Could not create ") + 
superClass.getName() + LOG4CXX_STR(" sub-class"), e);
        }
 
        return defaultValue;
diff --git a/src/main/cpp/propertyconfigurator.cpp 
b/src/main/cpp/propertyconfigurator.cpp
index cf3a555b..a1a8530c 100644
--- a/src/main/cpp/propertyconfigurator.cpp
+++ b/src/main/cpp/propertyconfigurator.cpp
@@ -133,7 +133,7 @@ spi::ConfigurationStatus PropertyConfigurator::doConfigure
                if (LogLog::isDebugEnabled())
                {
                        LogString debugMsg = LOG4CXX_STR("Loading configuration 
file [")
-                                       + configFileName.getPath() + 
LOG4CXX_STR("].");
+                                       + configFileName.getPath() + 
LOG4CXX_STR("]");
                        LogLog::debug(debugMsg);
                }
                return doConfigure(props, hierarchy);
@@ -177,26 +177,24 @@ spi::ConfigurationStatus 
PropertyConfigurator::doConfigure(helpers::Properties&
 {
        hierarchy->setConfigured(true);
 
-       static const WideLife<LogString> DEBUG_KEY(LOG4CXX_STR("log4j.debug"));
-       LogString value(properties.getProperty(DEBUG_KEY));
+       LogString value(properties.getProperty(LOG4CXX_STR("log4j.debug")));
 
        if (!value.empty())
        {
                LogLog::setInternalDebugging(OptionConverter::toBoolean(value, 
true));
        }
 
-       static const WideLife<LogString> 
THRESHOLD_PREFIX(LOG4CXX_STR("log4j.threshold"));
        LogString thresholdStr =
-               OptionConverter::findAndSubst(THRESHOLD_PREFIX, properties);
+               OptionConverter::findAndSubst(LOG4CXX_STR("log4j.threshold"), 
properties);
 
        if (!thresholdStr.empty())
        {
                hierarchy->setThreshold(OptionConverter::toLevel(thresholdStr, 
Level::getAll()));
                if (LogLog::isDebugEnabled())
                {
-                       LogLog::debug(((LogString) LOG4CXX_STR("Hierarchy 
threshold set to ["))
+                       LogLog::debug(LOG4CXX_STR("Repository threshold =[")
                                + hierarchy->getThreshold()->toString()
-                               + LOG4CXX_STR("]."));
+                               + LOG4CXX_STR("]"));
                }
        }
 
@@ -234,85 +232,67 @@ spi::ConfigurationStatus 
PropertyConfigurator::doConfigure(helpers::Properties&
 
 void PropertyConfigurator::configureLoggerFactory(helpers::Properties& props)
 {
-       static const WideLife<LogString> 
LOGGER_FACTORY_KEY(LOG4CXX_STR("log4j.loggerFactory"));
-
        LogString factoryClassName =
-               OptionConverter::findAndSubst(LOGGER_FACTORY_KEY, props);
+               
OptionConverter::findAndSubst(LOG4CXX_STR("log4j.loggerFactory"), props);
 
        if (!factoryClassName.empty())
        {
-               if (LogLog::isDebugEnabled())
-               {
-                       LogString msg(LOG4CXX_STR("Setting logger factory to 
["));
-                       msg += factoryClassName;
-                       msg += LOG4CXX_STR("].");
-                       LogLog::debug(msg);
-               }
-               std::shared_ptr<Object> instance = std::shared_ptr<Object>(
-                               
Loader::loadClass(factoryClassName).newInstance() );
+               auto instance = OptionConverter::instantiateByClassName
+                       ( StringHelper::trim(factoryClassName)
+                       , LoggerFactory::getStaticClass()
+#if LOG4CXX_ABI_VERSION <= 15
+                       , std::make_shared<DefaultLoggerFactory>()
+#else
+                       , std::make_shared<LoggerFactory>()
+#endif
+                       );
 
                loggerFactory = LOG4CXX_NS::cast<LoggerFactory>( instance );
-               static const WideLife<LogString> 
FACTORY_PREFIX(LOG4CXX_STR("log4j.factory."));
                Pool p;
-               PropertySetter::setProperties(loggerFactory, props, 
FACTORY_PREFIX, p);
+               PropertySetter::setProperties(loggerFactory, props, 
LOG4CXX_STR("log4j.factory."), p);
        }
 }
 
 void PropertyConfigurator::configureRootLogger(helpers::Properties& props,
        spi::LoggerRepositoryPtr& hierarchy)
 {
-       static const WideLife<LogString> 
ROOT_CATEGORY_PREFIX(LOG4CXX_STR("log4j.rootCategory"));
-       static const WideLife<LogString> 
ROOT_LOGGER_PREFIX(LOG4CXX_STR("log4j.rootLogger"));
-
-
-
-       LogString effectiveFrefix(ROOT_LOGGER_PREFIX);
-       LogString value = OptionConverter::findAndSubst(ROOT_LOGGER_PREFIX, 
props);
+       LogString effectivePrefix(LOG4CXX_STR("log4j.rootLogger"));
+       LogString value = OptionConverter::findAndSubst(effectivePrefix, props);
 
        if (value.empty())
        {
-               value = OptionConverter::findAndSubst(ROOT_CATEGORY_PREFIX, 
props);
-               effectiveFrefix = ROOT_CATEGORY_PREFIX;
+               effectivePrefix = LOG4CXX_STR("log4j.rootCategory");
+               value = OptionConverter::findAndSubst(effectivePrefix, props);
        }
 
        if (value.empty())
        {
-               LogLog::debug(LOG4CXX_STR("Could not find root logger 
information. Is this OK?"));
+               LogLog::debug(LOG4CXX_STR("Neither 'log4j.rootLogger' or 
'log4j.rootCategory' found. Is this OK?"));
        }
        else
        {
                LoggerPtr root = hierarchy->getRootLogger();
-
-               static const WideLife<LogString> 
INTERNAL_ROOT_NAME(LOG4CXX_STR("root"));
-               parseLogger(props, root, effectiveFrefix, INTERNAL_ROOT_NAME, 
value, true);
+               parseLogger(props, root, effectivePrefix, LOG4CXX_STR("root"), 
value, true);
        }
 }
 
 void PropertyConfigurator::parseCatsAndRenderers(helpers::Properties& props,
        spi::LoggerRepositoryPtr& hierarchy)
 {
-       static const WideLife<LogString> 
CATEGORY_PREFIX(LOG4CXX_STR("log4j.category."));
-       static const WideLife<LogString> 
LOGGER_PREFIX(LOG4CXX_STR("log4j.logger."));
-
        for (auto key : props.propertyNames())
        {
-               if (key.find(CATEGORY_PREFIX) == 0 || key.find(LOGGER_PREFIX) 
== 0)
+               auto categoryFound = (0 == 
key.find(LOG4CXX_STR("log4j.category.")));
+               if (categoryFound || 0 == 
key.find(LOG4CXX_STR("log4j.logger.")))
                {
-                       LogString loggerName;
-
-                       if (key.find(CATEGORY_PREFIX) == 0)
-                       {
-                               loggerName = 
key.substr(CATEGORY_PREFIX.value().length());
-                       }
-                       else if (key.find(LOGGER_PREFIX.value()) == 0)
-                       {
-                               loggerName = 
key.substr(LOGGER_PREFIX.value().length());
-                       }
-
-                       LogString value = OptionConverter::findAndSubst(key, 
props);
-                       LoggerPtr logger = hierarchy->getLogger(loggerName, 
loggerFactory);
-
-                       bool additivity = parseAdditivityForLogger(props, 
logger, loggerName);
+                       auto prefixLength =
+                               ( categoryFound
+                               ? LogString(LOG4CXX_STR("log4j.category."))
+                               : LogString(LOG4CXX_STR("log4j.logger."))
+                               ).length();
+                       auto loggerName = key.substr(prefixLength);
+                       auto value = OptionConverter::findAndSubst(key, props);
+                       auto logger = hierarchy->getLogger(loggerName, 
loggerFactory);
+                       auto additivity = parseAdditivityForLogger(props, 
logger, loggerName);
                        parseLogger(props, logger, key, loggerName, value, 
additivity);
 
                }
@@ -322,27 +302,15 @@ void 
PropertyConfigurator::parseCatsAndRenderers(helpers::Properties& props,
 bool PropertyConfigurator::parseAdditivityForLogger(helpers::Properties& props,
        LoggerPtr& cat, const LogString& loggerName)
 {
-
-       static const WideLife<LogString> 
ADDITIVITY_PREFIX(LOG4CXX_STR("log4j.additivity."));
-
-
-
-       LogString value(OptionConverter::findAndSubst(ADDITIVITY_PREFIX.value() 
+ loggerName, props));
-       if (LogLog::isDebugEnabled())
-       {
-               LogLog::debug((LogString) LOG4CXX_STR("Handling ") + 
ADDITIVITY_PREFIX.value()
-                       + loggerName + LOG4CXX_STR("=[") +  value + 
LOG4CXX_STR("]"));
-       }
+       LogString 
value(OptionConverter::findAndSubst(LOG4CXX_STR("log4j.additivity.") + 
loggerName, props));
        // touch additivity only if necessary
        if (!value.empty())
        {
                bool additivity = OptionConverter::toBoolean(value, true);
                if (LogLog::isDebugEnabled())
                {
-                       LogLog::debug(((LogString) LOG4CXX_STR("Setting 
additivity for \""))
-                               + loggerName
-                               + ((additivity) ?  LOG4CXX_STR("\" to true") :
-                                       LOG4CXX_STR("\" to false")));
+                       LogLog::debug(LOG4CXX_STR("Setting [") + loggerName + 
LOG4CXX_STR("] additivity to [")
+                               + (additivity ? LogString(LOG4CXX_STR("true")) 
: LogString(LOG4CXX_STR("false")) + LOG4CXX_STR("]")));
                }
 
                return additivity;
@@ -363,7 +331,7 @@ void PropertyConfigurator::parseLogger(
                LogLog::debug(((LogString) LOG4CXX_STR("Parsing for ["))
                        + loggerName
                        + LOG4CXX_STR("] with value=[")
-                       + value + LOG4CXX_STR("]."));
+                       + value + LOG4CXX_STR("]"));
        }
 
        // We must skip over ',' but not white space
@@ -380,12 +348,6 @@ void PropertyConfigurator::parseLogger(
                }
 
                LogString levelStr = st.nextToken();
-               if (LogLog::isDebugEnabled())
-               {
-                       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
@@ -393,32 +355,23 @@ void PropertyConfigurator::parseLogger(
                if (StringHelper::equalsIgnoreCase(levelStr, 
LOG4CXX_STR("INHERITED"), LOG4CXX_STR("inherited"))
                        || StringHelper::equalsIgnoreCase(levelStr, 
LOG4CXX_STR("NULL"), LOG4CXX_STR("null")))
                {
-                       static const WideLife<LogString> 
INTERNAL_ROOT_NAME(LOG4CXX_STR("root"));
-
-                       if (loggerName == INTERNAL_ROOT_NAME.value())
+                       if (loggerName == LOG4CXX_STR("root"))
                        {
-                               LogLog::warn(LOG4CXX_STR("The root logger 
cannot be set to null."));
+                               LogLog::warn(LOG4CXX_STR("Root level cannot be 
") + levelStr + LOG4CXX_STR(". Ignoring directive."));
                        }
                        else
                        {
                                logger->setLevel(0);
-                               if (LogLog::isDebugEnabled())
-                               {
-                                       LogLog::debug((LogString) 
LOG4CXX_STR("Logger ")
-                                               + loggerName + LOG4CXX_STR(" 
set to null"));
-                               }
                        }
                }
                else
                {
                        logger->setLevel(OptionConverter::toLevel(levelStr, 
Level::getDebug()));
-
-                       if (LogLog::isDebugEnabled())
-                       {
-                               LogLog::debug((LogString) LOG4CXX_STR("Logger ")
-                                       + loggerName + LOG4CXX_STR(" set to ")
-                                       + logger->getLevel()->toString());
-                       }
+               }
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(loggerName + LOG4CXX_STR(" level set to 
") +
+                               logger->getEffectiveLevel()->toString());
                }
 
        }
@@ -438,8 +391,8 @@ void PropertyConfigurator::parseLogger(
 
                if (LogLog::isDebugEnabled())
                {
-                       LogLog::debug(LOG4CXX_STR("Parsing appender named ")
-                               + appenderName + LOG4CXX_STR("\"."));
+                       LogLog::debug(LOG4CXX_STR("Parsing ") + 
Appender::getStaticClass().getName()
+                               + LOG4CXX_STR(" named [") + appenderName + 
LOG4CXX_STR("]"));
                }
                appender = parseAppender(props, appenderName);
 
@@ -461,17 +414,15 @@ AppenderPtr PropertyConfigurator::parseAppender(
        {
                if (LogLog::isDebugEnabled())
                {
-                       LogLog::debug((LogString) LOG4CXX_STR("Appender \"")
-                               + appenderName + LOG4CXX_STR("\" was already 
parsed."));
+                       LogLog::debug((LogString) LOG4CXX_STR("Appender [")
+                               + appenderName + LOG4CXX_STR("] was already 
parsed."));
                }
 
                return appender;
        }
 
-       static const WideLife<LogString> 
APPENDER_PREFIX(LOG4CXX_STR("log4j.appender."));
-
        // Appender was not previously initialized.
-       LogString prefix = APPENDER_PREFIX.value() + appenderName;
+       LogString prefix = LOG4CXX_STR("log4j.appender.") + appenderName;
        LogString layoutPrefix = prefix + LOG4CXX_STR(".layout");
 
        std::shared_ptr<Object> obj =
@@ -491,8 +442,8 @@ AppenderPtr PropertyConfigurator::parseAppender(
 
        if (!appender)
        {
-               LogLog::error((LogString) LOG4CXX_STR("Could not instantiate 
appender named \"")
-                       + appenderName + LOG4CXX_STR("\"."));
+               LogLog::error((LogString) LOG4CXX_STR("Could not instantiate ") 
+ Appender::getStaticClass().getName()
+                       + LOG4CXX_STR(" named [") + appenderName + 
LOG4CXX_STR("]"));
                return 0;
        }
 
@@ -515,15 +466,15 @@ AppenderPtr PropertyConfigurator::parseAppender(
                                appender->setLayout(layout);
                                if (LogLog::isDebugEnabled())
                                {
-                                       LogLog::debug((LogString) 
LOG4CXX_STR("Parsing layout options for \"")
-                                               + appenderName + 
LOG4CXX_STR("\"."));
+                                       LogLog::debug((LogString) 
LOG4CXX_STR("Parsing ") + Layout::getStaticClass().getName()
+                                               + LOG4CXX_STR(" options for [") 
+ appenderName + LOG4CXX_STR("]"));
                                }
 
                                PropertySetter::setProperties(layout, props, 
layoutPrefix + LOG4CXX_STR("."), p);
                                if (LogLog::isDebugEnabled())
                                {
-                                       LogLog::debug((LogString) 
LOG4CXX_STR("End of parsing for \"")
-                                               + appenderName +  
LOG4CXX_STR("\"."));
+                                       LogLog::debug((LogString) 
LOG4CXX_STR("End of parsing for [")
+                                               + appenderName +  
LOG4CXX_STR("]"));
                                }
                        }
                }
@@ -545,8 +496,8 @@ AppenderPtr PropertyConfigurator::parseAppender(
 
                                        if (LogLog::isDebugEnabled())
                                        {
-                                               LogLog::debug((LogString) 
LOG4CXX_STR("Parsing rolling policy options for \"")
-                                                       + appenderName + 
LOG4CXX_STR("\"."));
+                                               LogLog::debug((LogString) 
LOG4CXX_STR("Parsing ") + RollingPolicy::getStaticClass().getName()
+                                                       + LOG4CXX_STR(" options 
for [") + appenderName + LOG4CXX_STR("]"));
                                        }
                                        
PropertySetter::setProperties(rollingPolicy, props, rollingPolicyKey + 
LOG4CXX_STR("."), p);
                                }
@@ -566,8 +517,8 @@ AppenderPtr PropertyConfigurator::parseAppender(
 
                                        if (LogLog::isDebugEnabled())
                                        {
-                                               LogLog::debug((LogString) 
LOG4CXX_STR("Parsing triggering policy options for \"")
-                                                       + appenderName + 
LOG4CXX_STR("\"."));
+                                               LogLog::debug((LogString) 
LOG4CXX_STR("Parsing ") + TriggeringPolicy::getStaticClass().getName()
+                                                       + LOG4CXX_STR(" options 
for [") + appenderName + LOG4CXX_STR("]"));
                                        }
                                        
PropertySetter::setProperties(triggeringPolicy, props, triggeringPolicyKey + 
LOG4CXX_STR("."), p);
                                }
@@ -577,8 +528,8 @@ AppenderPtr PropertyConfigurator::parseAppender(
                PropertySetter::setProperties(appender, props, prefix + 
LOG4CXX_STR("."), p);
                if (LogLog::isDebugEnabled())
                {
-                       LogLog::debug((LogString) LOG4CXX_STR("Parsed \"")
-                               + appenderName + LOG4CXX_STR("\" options."));
+                       LogLog::debug((LogString) LOG4CXX_STR("Parsed [")
+                               + appenderName + LOG4CXX_STR("] options."));
                }
        }
 

Reply via email to