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."));
}
}