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

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

commit 0908d30fffe37953cd04c75e31f079453c74e4f7
Author: Stephen Webb <[email protected]>
AuthorDate: Wed May 15 12:29:04 2024 +1000

    Condition internal debug logging on its enabled state
---
 src/examples/cpp/com/foo/config3.cpp      |  55 +++++++-------
 src/main/cpp/appenderskeleton.cpp         |  17 +++++
 src/main/cpp/asyncappender.cpp            |   2 +-
 src/main/cpp/domconfigurator.cpp          | 100 ++++++++++++++++++-------
 src/main/cpp/fallbackerrorhandler.cpp     |  56 +++++++++-----
 src/main/cpp/filewatchdog.cpp             |  39 ++++++----
 src/main/cpp/loglog.cpp                   |  12 ++-
 src/main/cpp/optionconverter.cpp          |  20 +++--
 src/main/cpp/patternlayout.cpp            |   8 +-
 src/main/cpp/propertyconfigurator.cpp     | 117 ++++++++++++++++++++----------
 src/main/cpp/propertysetter.cpp           |   7 +-
 src/main/cpp/socketappenderskeleton.cpp   |  31 +++++---
 src/main/include/log4cxx/helpers/loglog.h |   5 ++
 13 files changed, 320 insertions(+), 149 deletions(-)

diff --git a/src/examples/cpp/com/foo/config3.cpp 
b/src/examples/cpp/com/foo/config3.cpp
index e6198b4f..8e686f68 100644
--- a/src/examples/cpp/com/foo/config3.cpp
+++ b/src/examples/cpp/com/foo/config3.cpp
@@ -67,31 +67,35 @@ auto DefaultConfigurationFileNames(std::string& altPrefix) 
-> std::vector<std::s
        if (std::string::npos != slashIndex) {
                // Extract the path
                altPrefix = programFileName.substr(0, slashIndex + 1);
-#if defined(_DEBUG)
-               LogString msg1 = LOG4CXX_STR("Alternate prefix [");
-               helpers::Transcoder::decode(altPrefix, msg1);
-               msg1 += LOG4CXX_STR("]");
-               helpers::LogLog::debug(msg1);
-#endif
+               if (helpers::LogLog::isDebugEnabled())
+               {
+                       LogString msg = LOG4CXX_STR("Alternate prefix [");
+                       helpers::Transcoder::decode(altPrefix, msg);
+                       msg += LOG4CXX_STR("]");
+                       helpers::LogLog::debug(msg);
+               }
                // Add a local directory relative name
                result.push_back(programFileName.substr(slashIndex + 1));
-#if defined(_DEBUG)
-               LogString msg2(LOG4CXX_STR("Alternate configuration file name 
["));
-               helpers::Transcoder::decode(result.back(), msg2);
-               msg2 += LOG4CXX_STR("]");
-               helpers::LogLog::debug(msg2);
-#endif
+               if (helpers::LogLog::isDebugEnabled())
+               {
+                       LogString msg(LOG4CXX_STR("Alternate configuration file 
name ["));
+                       helpers::Transcoder::decode(result.back(), msg);
+                       msg += LOG4CXX_STR("]");
+                       helpers::LogLog::debug(msg);
+               }
                // Add a local directory relative name without any extension
                auto dotIndex = result.back().rfind('.');
-               if (std::string::npos != dotIndex) {
+               if (std::string::npos != dotIndex)
+               {
                        result.push_back(result.back());
                        result.back().erase(dotIndex);
-#if defined(_DEBUG)
-                       LogString msg3(LOG4CXX_STR("Alternate configuration 
file name ["));
-                       helpers::Transcoder::decode(result.back(), msg3);
-                       msg3 += LOG4CXX_STR("]");
-                       helpers::LogLog::debug(msg3);
-#endif
+                       if (helpers::LogLog::isDebugEnabled())
+                       {
+                               LogString msg(LOG4CXX_STR("Alternate 
configuration file name ["));
+                               helpers::Transcoder::decode(result.back(), msg);
+                               msg += LOG4CXX_STR("]");
+                               helpers::LogLog::debug(msg);
+                       }
                }
        }
        else if (!programFileName.empty()) {
@@ -99,12 +103,13 @@ auto DefaultConfigurationFileNames(std::string& altPrefix) 
-> std::vector<std::s
                if (std::string::npos != dotIndex) {
                        programFileName.erase(dotIndex);
                        result.push_back(programFileName);
-#if defined(_DEBUG)
-                       LogString msg(LOG4CXX_STR("Alternate configuration file 
name ["));
-                       helpers::Transcoder::decode(result.back(), msg);
-                       msg += LOG4CXX_STR("]");
-                       helpers::LogLog::debug(msg);
-#endif
+                       if (helpers::LogLog::isDebugEnabled())
+                       {
+                               LogString msg(LOG4CXX_STR("Alternate 
configuration file name ["));
+                               helpers::Transcoder::decode(result.back(), msg);
+                               msg += LOG4CXX_STR("]");
+                               helpers::LogLog::debug(msg);
+                       }
                }
        }
        result.push_back("log4cxx");
diff --git a/src/main/cpp/appenderskeleton.cpp 
b/src/main/cpp/appenderskeleton.cpp
index 878a89dc..22709f95 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -131,6 +131,23 @@ void AppenderSkeleton::doAppendImpl(const 
spi::LoggingEventPtr& event, Pool& poo
        append(event, pool1);
 }
 
+bool AppenderSkeleton::AppenderSkeletonPrivate::hasLayout()
+{
+       if (!this->layout)
+       {
+               if (!this->warnedNoLayout)
+               {
+                       this->errorHandler->error
+                               ( LogString(LOG4CXX_STR("No layout set for the 
appender named ["))
+                               + this->name + LOG4CXX_STR("].")
+                               );
+                       this->warnedNoLayout = true;
+               }
+               return false;
+       }
+       return true;
+}
+
 void AppenderSkeleton::setErrorHandler(const spi::ErrorHandlerPtr 
errorHandler1)
 {
        std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 59c37640..da025343 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -561,7 +561,7 @@ void AsyncAppender::dispatch()
                                }
                        }
                }
-               if (!isActive)
+               if (!isActive && LogLog::isDebugEnabled())
                {
                        LogString msg(LOG4CXX_STR("AsyncAppender")); 
                        msg += LOG4CXX_STR(" discardCount ");
diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index bb3b9778..e9115d14 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -211,7 +211,10 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
 {
 
        LogString className(subst(getAttribute(utf8Decoder, appenderElement, 
CLASS_ATTR)));
-       LogLog::debug(LOG4CXX_STR("Class name: [") + className + 
LOG4CXX_STR("]"));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Class name: [") + className + 
LOG4CXX_STR("]"));
+       }
 
        try
        {
@@ -291,9 +294,12 @@ AppenderPtr DOMConfigurator::parseAppender(Pool& p,
                                if 
(appender->instanceof(AppenderAttachable::getStaticClass()))
                                {
                                        AppenderAttachablePtr aa = 
LOG4CXX_NS::cast<AppenderAttachable>(appender);
-                                       LogLog::debug(LOG4CXX_STR("Attaching 
appender named [") +
-                                               refName + LOG4CXX_STR("] to 
appender named [") +
-                                               appender->getName() + 
LOG4CXX_STR("]."));
+                                       if (LogLog::isDebugEnabled())
+                                       {
+                                               
LogLog::debug(LOG4CXX_STR("Attaching appender named [") +
+                                                       refName + 
LOG4CXX_STR("] to appender named [") +
+                                                       appender->getName() + 
LOG4CXX_STR("]."));
+                                       }
                                        
aa->addAppender(findAppenderByReference(p, utf8Decoder, currentElement, doc, 
appenders));
                                }
                                else
@@ -427,7 +433,10 @@ void DOMConfigurator::parseLogger(
        // Create a new Logger object from the <category> element.
        LogString loggerName = subst(getAttribute(utf8Decoder, loggerElement, 
NAME_ATTR));
 
-       LogLog::debug(LOG4CXX_STR("Retreiving an instance of Logger."));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Retreiving an instance of ") + 
loggerName);
+       }
        LoggerPtr logger = m_priv->repository->getLogger(loggerName, 
m_priv->loggerFactory);
 
        // Setting up a logger needs to be an atomic operation, in order
@@ -437,8 +446,11 @@ void DOMConfigurator::parseLogger(
                        subst(getAttribute(utf8Decoder, loggerElement, 
ADDITIVITY_ATTR)),
                        true);
 
-       LogLog::debug(LOG4CXX_STR("Setting [") + logger->getName() + 
LOG4CXX_STR("] additivity to [") +
-               (additivity ? LogString(LOG4CXX_STR("true")) : 
LogString(LOG4CXX_STR("false"))) + LOG4CXX_STR("]."));
+       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("]."));
+       }
        logger->setAdditivity(additivity);
        parseChildrenOfLoggerElement(p, utf8Decoder, loggerElement, logger, 
false, doc, appenders);
 }
@@ -456,11 +468,13 @@ void DOMConfigurator::parseLoggerFactory(
        if (className.empty())
        {
                LogLog::error(LOG4CXX_STR("Logger Factory tag class attribute 
not found."));
-               LogLog::debug(LOG4CXX_STR("No Logger Factory configured."));
        }
        else
        {
-               LogLog::debug(LOG4CXX_STR("Desired logger factory: [") + 
className + LOG4CXX_STR("]"));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(LOG4CXX_STR("Desired logger factory: [") 
+ className + LOG4CXX_STR("]"));
+               }
                std::shared_ptr<Object> obj = 
OptionConverter::instantiateByClassName(
                                className,
                                LoggerFactory::getStaticClass(),
@@ -524,7 +538,9 @@ void DOMConfigurator::parseChildrenOfLoggerElement(
                        AppenderPtr appender = findAppenderByReference(p, 
utf8Decoder, currentElement, doc, appenders);
                        LogString refName =  subst(getAttribute(utf8Decoder, 
currentElement, REF_ATTR));
 
-                       if (appender != 0)
+                       if (!LogLog::isDebugEnabled())
+                               ;
+                       else if (appender != 0)
                        {
                                LogLog::debug(LOG4CXX_STR("Adding appender 
named [") + refName +
                                        LOG4CXX_STR("] to logger [") + 
logger->getName() + LOG4CXX_STR("]."));
@@ -564,7 +580,10 @@ LayoutPtr DOMConfigurator::parseLayout (
        apr_xml_elem* layout_element)
 {
        LogString className(subst(getAttribute(utf8Decoder, layout_element, 
CLASS_ATTR)));
-       LogLog::debug(LOG4CXX_STR("Parsing layout of class: \"") + className + 
LOG4CXX_STR("\""));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Parsing layout of class: \"") + 
className + LOG4CXX_STR("\""));
+       }
 
        try
        {
@@ -604,7 +623,10 @@ ObjectPtr DOMConfigurator::parseTriggeringPolicy (
        apr_xml_elem* layout_element)
 {
        LogString className = subst(getAttribute(utf8Decoder, layout_element, 
CLASS_ATTR));
-       LogLog::debug(LOG4CXX_STR("Parsing triggering policy of class: \"") + 
className + LOG4CXX_STR("\""));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Parsing triggering policy of class: 
\"") + className + LOG4CXX_STR("\""));
+       }
 
        try
        {
@@ -657,7 +679,10 @@ RollingPolicyPtr DOMConfigurator::parseRollingPolicy (
        apr_xml_elem* layout_element)
 {
        LogString className = subst(getAttribute(utf8Decoder, layout_element, 
CLASS_ATTR));
-       LogLog::debug(LOG4CXX_STR("Parsing rolling policy of class: \"") + 
className + LOG4CXX_STR("\""));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Parsing rolling policy of class: 
\"") + className + LOG4CXX_STR("\""));
+       }
 
        try
        {
@@ -706,7 +731,10 @@ void DOMConfigurator::parseLevel(
        }
 
        LogString levelStr(subst(getAttribute(utf8Decoder, element, 
VALUE_ATTR)));
-       LogLog::debug(LOG4CXX_STR("Level value for ") + loggerName + 
LOG4CXX_STR(" is [") + levelStr + LOG4CXX_STR("]."));
+       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")))
@@ -730,7 +758,10 @@ void DOMConfigurator::parseLevel(
                }
                else
                {
-                       LogLog::debug(LOG4CXX_STR("Desired Level sub-class: [") 
+ className + LOG4CXX_STR("]"));
+                       if (LogLog::isDebugEnabled())
+                       {
+                               LogLog::debug(LOG4CXX_STR("Desired Level 
sub-class: [") + className + LOG4CXX_STR("]"));
+                       }
 
                        try
                        {
@@ -758,8 +789,11 @@ void DOMConfigurator::parseLevel(
                }
        }
 
-       LogLog::debug(loggerName + LOG4CXX_STR(" level set to ") +
-               logger->getEffectiveLevel()->toString());
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(loggerName + LOG4CXX_STR(" level set to ") +
+                       logger->getEffectiveLevel()->toString());
+       }
 }
 
 void DOMConfigurator::setParameter(LOG4CXX_NS::helpers::Pool& p,
@@ -777,10 +811,13 @@ spi::ConfigurationStatus 
DOMConfigurator::doConfigure(const File& filename, spi:
 {
        repository1->setConfigured(true);
        m_priv->repository = repository1;
-       LogString msg(LOG4CXX_STR("DOMConfigurator configuring file "));
-       msg.append(filename.getPath());
-       msg.append(LOG4CXX_STR("..."));
-       LogLog::debug(msg);
+       if (LogLog::isDebugEnabled())
+       {
+               LogString msg(LOG4CXX_STR("DOMConfigurator configuring file "));
+               msg.append(filename.getPath());
+               msg.append(LOG4CXX_STR("..."));
+               LogLog::debug(msg);
+       }
 
        m_priv->loggerFactory = std::make_shared<DefaultLoggerFactory>();
 
@@ -807,9 +844,12 @@ spi::ConfigurationStatus 
DOMConfigurator::doConfigure(const File& filename, spi:
                apr_xml_parser* parser = NULL;
                apr_xml_doc* doc = NULL;
 
-               LogString debugMsg = LOG4CXX_STR("Loading configuration file [")
-                               + filename.getPath() + LOG4CXX_STR("].");
-               LogLog::debug(debugMsg);
+               if (LogLog::isDebugEnabled())
+               {
+                       LogString debugMsg = LOG4CXX_STR("Loading configuration 
file [")
+                                       + filename.getPath() + 
LOG4CXX_STR("].");
+                       LogLog::debug(debugMsg);
+               }
 
                rv = apr_xml_parse_file(p.getAPRPool(), &parser, &doc, fd, 
2000);
 
@@ -1012,7 +1052,10 @@ void DOMConfigurator::parse(
        LogString debugAttrib = subst(getAttribute(utf8Decoder, element, 
INTERNAL_DEBUG_ATTR));
 
        static const WideLife<LogString> NULL_STRING(LOG4CXX_STR("NULL"));
-       LogLog::debug(LOG4CXX_STR("debug attribute= \"") + debugAttrib + 
LOG4CXX_STR("\"."));
+       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.
@@ -1020,7 +1063,7 @@ void DOMConfigurator::parse(
        {
                
LogLog::setInternalDebugging(OptionConverter::toBoolean(debugAttrib, true));
        }
-       else
+       else if (LogLog::isDebugEnabled())
        {
                LogLog::debug(LOG4CXX_STR("Ignoring internalDebug attribute."));
        }
@@ -1036,7 +1079,10 @@ void DOMConfigurator::parse(
        }
 
        LogString thresholdStr = subst(getAttribute(utf8Decoder, element, 
THRESHOLD_ATTR));
-       LogLog::debug(LOG4CXX_STR("Threshold =\"") + thresholdStr + 
LOG4CXX_STR("\"."));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(LOG4CXX_STR("Threshold =\"") + thresholdStr + 
LOG4CXX_STR("\"."));
+       }
 
        if (!thresholdStr.empty() && thresholdStr != NULL_STRING.value())
        {
diff --git a/src/main/cpp/fallbackerrorhandler.cpp 
b/src/main/cpp/fallbackerrorhandler.cpp
index 39c2ac9d..bdd3e899 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -49,8 +49,11 @@ FallbackErrorHandler::~FallbackErrorHandler() {}
 
 void FallbackErrorHandler::setLogger(const LoggerPtr& logger)
 {
-       LogLog::debug(((LogString) LOG4CXX_STR("FB: Adding logger ["))
-               + logger->getName() + LOG4CXX_STR("]."));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(((LogString) LOG4CXX_STR("FB: Adding logger ["))
+                       + logger->getName() + LOG4CXX_STR("]."));
+       }
        m_priv->loggers.push_back(logger);
 }
 
@@ -65,9 +68,12 @@ void FallbackErrorHandler::error(const LogString& message,
        const std::exception& e,
        int, const spi::LoggingEventPtr&) const
 {
-       LogLog::debug(((LogString) LOG4CXX_STR("FB: The following error 
reported: "))
-               +  message, e);
-       LogLog::debug(LOG4CXX_STR("FB: INITIATING FALLBACK PROCEDURE."));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(((LogString) LOG4CXX_STR("FB: The following error 
reported: "))
+                       +  message, e);
+               LogLog::debug(LOG4CXX_STR("FB: INITIATING FALLBACK 
PROCEDURE."));
+       }
 
        AppenderPtr primaryLocked = m_priv->primary.lock();
        AppenderPtr backupLocked = m_priv->backup.lock();
@@ -79,17 +85,23 @@ void FallbackErrorHandler::error(const LogString& message,
 
        for (LoggerPtr l : m_priv->loggers)
        {
-               LogLog::debug(((LogString) LOG4CXX_STR("FB: Searching for ["))
-                       + primaryLocked->getName() + LOG4CXX_STR("] in logger 
[")
-                       + l->getName() + LOG4CXX_STR("]."));
-               LogLog::debug(((LogString) LOG4CXX_STR("FB: Replacing ["))
-                       + primaryLocked->getName() + LOG4CXX_STR("] by [")
-                       + backupLocked->getName() + LOG4CXX_STR("] in logger [")
-                       + l->getName() + LOG4CXX_STR("]."));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(((LogString) LOG4CXX_STR("FB: Searching 
for ["))
+                               + primaryLocked->getName() + LOG4CXX_STR("] in 
logger [")
+                               + l->getName() + LOG4CXX_STR("]."));
+                       LogLog::debug(((LogString) LOG4CXX_STR("FB: Replacing 
["))
+                               + primaryLocked->getName() + LOG4CXX_STR("] by 
[")
+                               + backupLocked->getName() + LOG4CXX_STR("] in 
logger [")
+                               + l->getName() + LOG4CXX_STR("]."));
+               }
                l->removeAppender(primaryLocked);
-               LogLog::debug(((LogString) LOG4CXX_STR("FB: Adding appender ["))
-                       + backupLocked->getName() + LOG4CXX_STR("] to logger ")
-                       + l->getName());
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(((LogString) LOG4CXX_STR("FB: Adding 
appender ["))
+                               + backupLocked->getName() + LOG4CXX_STR("] to 
logger ")
+                               + l->getName());
+               }
                l->addAppender(backupLocked);
        }
        m_priv->errorReported = true;
@@ -97,15 +109,21 @@ void FallbackErrorHandler::error(const LogString& message,
 
 void FallbackErrorHandler::setAppender(const AppenderPtr& primary1)
 {
-       LogLog::debug(((LogString) LOG4CXX_STR("FB: Setting primary appender to 
["))
-               + primary1->getName() + LOG4CXX_STR("]."));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(((LogString) LOG4CXX_STR("FB: Setting primary 
appender to ["))
+                       + primary1->getName() + LOG4CXX_STR("]."));
+       }
        m_priv->primary = primary1;
 }
 
 void FallbackErrorHandler::setBackupAppender(const AppenderPtr& backup1)
 {
-       LogLog::debug(((LogString) LOG4CXX_STR("FB: Setting backup appender to 
["))
-               + backup1->getName() + LOG4CXX_STR("]."));
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug(((LogString) LOG4CXX_STR("FB: Setting backup 
appender to ["))
+                       + backup1->getName() + LOG4CXX_STR("]."));
+       }
        m_priv->backup = backup1;
 
        // Make sure that we keep a reference to the appender around, since 
otherwise
diff --git a/src/main/cpp/filewatchdog.cpp b/src/main/cpp/filewatchdog.cpp
index df949c15..351358be 100644
--- a/src/main/cpp/filewatchdog.cpp
+++ b/src/main/cpp/filewatchdog.cpp
@@ -105,17 +105,20 @@ const File& FileWatchdog::file()
 
 void FileWatchdog::checkAndConfigure()
 {
-       LogString msg(LOG4CXX_STR("Checking ["));
-       msg += m_priv->file.getPath();
-       msg += LOG4CXX_STR("]");
-       LogLog::debug(msg);
+       if (LogLog::isDebugEnabled())
+       {
+               LogString msg(LOG4CXX_STR("Checking ["));
+               msg += m_priv->file.getPath();
+               msg += LOG4CXX_STR("]");
+               LogLog::debug(msg);
+       }
        Pool pool1;
 
        if (!m_priv->file.exists(pool1))
        {
                if (!m_priv->warnedAlready)
                {
-                       LogLog::debug(((LogString) LOG4CXX_STR("["))
+                       LogLog::warn(LOG4CXX_STR("[")
                                + m_priv->file.getPath()
                                + LOG4CXX_STR("] does not exist."));
                        m_priv->warnedAlready = true;
@@ -136,12 +139,15 @@ void FileWatchdog::checkAndConfigure()
 
 void FileWatchdog::run()
 {
-       LogString msg(LOG4CXX_STR("Checking ["));
-       msg += m_priv->file.getPath();
-       msg += LOG4CXX_STR("] at ");
-       StringHelper::toString((int)m_priv->delay, m_priv->pool, msg);
-       msg += LOG4CXX_STR(" ms interval");
-       LogLog::debug(msg);
+       if (LogLog::isDebugEnabled())
+       {
+               LogString msg(LOG4CXX_STR("Checking ["));
+               msg += m_priv->file.getPath();
+               msg += LOG4CXX_STR("] at ");
+               StringHelper::toString((int)m_priv->delay, m_priv->pool, msg);
+               msg += LOG4CXX_STR(" ms interval");
+               LogLog::debug(msg);
+       }
 
        while (!is_interrupted())
        {
@@ -151,10 +157,13 @@ void FileWatchdog::run()
                        checkAndConfigure();
        }
 
-       LogString msg2(LOG4CXX_STR("Stop checking ["));
-       msg2 += m_priv->file.getPath();
-       msg2 += LOG4CXX_STR("]");
-       LogLog::debug(msg2);
+       if (LogLog::isDebugEnabled())
+       {
+               LogString msg2(LOG4CXX_STR("Stop checking ["));
+               msg2 += m_priv->file.getPath();
+               msg2 += LOG4CXX_STR("]");
+               LogLog::debug(msg2);
+       }
 }
 
 void FileWatchdog::start()
diff --git a/src/main/cpp/loglog.cpp b/src/main/cpp/loglog.cpp
index f9c58cdb..02fab7aa 100644
--- a/src/main/cpp/loglog.cpp
+++ b/src/main/cpp/loglog.cpp
@@ -66,12 +66,18 @@ LogLog& LogLog::getInstance()
        return internalLogger;
 }
 
-void LogLog::setInternalDebugging(bool debugEnabled1)
+bool LogLog::isDebugEnabled()
 {
        auto p = getInstance().m_priv.get();
-       std::lock_guard<std::mutex> lock(p->mutex);
+       return p && !p->quietMode // Not deleted by onexit processing?
+                        && !p->debugEnabled;
+}
 
-       p->debugEnabled = debugEnabled1;
+void LogLog::setInternalDebugging(bool debugEnabled1)
+{
+       auto p = getInstance().m_priv.get();
+       if (p && !p->quietMode) // Not deleted by onexit processing?
+               p->debugEnabled = debugEnabled1;
 }
 
 void LogLog::debug(const LogString& msg)
diff --git a/src/main/cpp/optionconverter.cpp b/src/main/cpp/optionconverter.cpp
index 46c41e83..1fa705d0 100644
--- a/src/main/cpp/optionconverter.cpp
+++ b/src/main/cpp/optionconverter.cpp
@@ -313,10 +313,13 @@ LevelPtr OptionConverter::toLevel(const LogString& value,
                }
                else
                {
-                       LogLog::debug(
-                               ((LogString) 
LOG4CXX_STR("OptionConverter::toLevel: no class name specified, level=["))
-                               + value
-                               + LOG4CXX_STR("]"));
+                       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);
                }
@@ -324,8 +327,13 @@ LevelPtr OptionConverter::toLevel(const LogString& value,
 
        LogString clazz = value.substr(hashIndex + 1);
        LogString levelName = value.substr(0, hashIndex);
-       LogLog::debug(((LogString) LOG4CXX_STR("OptionConverter::toLevel: 
class=["))
-               + clazz + LOG4CXX_STR("], level=[") + levelName + 
LOG4CXX_STR("]"));
+       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())
diff --git a/src/main/cpp/patternlayout.cpp b/src/main/cpp/patternlayout.cpp
index 4e59a461..371e47d7 100644
--- a/src/main/cpp/patternlayout.cpp
+++ b/src/main/cpp/patternlayout.cpp
@@ -149,8 +149,12 @@ void PatternLayout::setOption(const LogString& option, 
const LogString& value)
                                                                                
        LOG4CXX_STR("ERRORCOLOR"),
                                                                                
        LOG4CXX_STR("errorcolor"))){
                m_priv->m_errorColor = value;
-               LogLog::debug(LOG4CXX_STR("Setting error color to "));
-               LogLog::debug(value);
+               if (LogLog::isDebugEnabled())
+               {
+                       LogString msg(LOG4CXX_STR("Setting error color to "));
+                       msg += value;
+                       LogLog::debug(msg);
+               }
        }else if(StringHelper::equalsIgnoreCase(option,
                                                                                
        LOG4CXX_STR("FATALCOLOR"),
                                                                                
        LOG4CXX_STR("fatalcolor"))){
diff --git a/src/main/cpp/propertyconfigurator.cpp 
b/src/main/cpp/propertyconfigurator.cpp
index c06929e8..93b8919c 100644
--- a/src/main/cpp/propertyconfigurator.cpp
+++ b/src/main/cpp/propertyconfigurator.cpp
@@ -106,9 +106,12 @@ spi::ConfigurationStatus 
PropertyConfigurator::doConfigure(const File& configFil
 
        try
        {
-               LogString debugMsg = LOG4CXX_STR("Loading configuration file [")
-                               + configFileName.getPath() + LOG4CXX_STR("].");
-               LogLog::debug(debugMsg);
+               if (LogLog::isDebugEnabled())
+               {
+                       LogString debugMsg = LOG4CXX_STR("Loading configuration 
file [")
+                                       + configFileName.getPath() + 
LOG4CXX_STR("].");
+                       LogLog::debug(debugMsg);
+               }
                return doConfigure(props, hierarchy);
        }
        catch (const std::exception& ex)
@@ -176,9 +179,12 @@ spi::ConfigurationStatus 
PropertyConfigurator::doConfigure(helpers::Properties&
        if (!thresholdStr.empty())
        {
                hierarchy->setThreshold(OptionConverter::toLevel(thresholdStr, 
Level::getAll()));
-               LogLog::debug(((LogString) LOG4CXX_STR("Hierarchy threshold set 
to ["))
-                       + hierarchy->getThreshold()->toString()
-                       + LOG4CXX_STR("]."));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(((LogString) LOG4CXX_STR("Hierarchy 
threshold set to ["))
+                               + hierarchy->getThreshold()->toString()
+                               + LOG4CXX_STR("]."));
+               }
        }
 
        LogString 
threadConfigurationValue(properties.getProperty(LOG4CXX_STR("log4j.threadConfiguration")));
@@ -222,10 +228,13 @@ void 
PropertyConfigurator::configureLoggerFactory(helpers::Properties& props)
 
        if (!factoryClassName.empty())
        {
-               LogString msg(LOG4CXX_STR("Setting logger factory to ["));
-               msg += factoryClassName;
-               msg += LOG4CXX_STR("].");
-               LogLog::debug(msg);
+               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() );
 
@@ -306,17 +315,22 @@ bool 
PropertyConfigurator::parseAdditivityForLogger(helpers::Properties& props,
 
 
        LogString value(OptionConverter::findAndSubst(ADDITIVITY_PREFIX.value() 
+ loggerName, props));
-       LogLog::debug((LogString) LOG4CXX_STR("Handling ") + 
ADDITIVITY_PREFIX.value()
-               + loggerName + LOG4CXX_STR("=[") +  value + LOG4CXX_STR("]"));
-
+       if (LogLog::isDebugEnabled())
+       {
+               LogLog::debug((LogString) LOG4CXX_STR("Handling ") + 
ADDITIVITY_PREFIX.value()
+                       + loggerName + LOG4CXX_STR("=[") +  value + 
LOG4CXX_STR("]"));
+       }
        // touch additivity only if necessary
        if (!value.empty())
        {
                bool additivity = OptionConverter::toBoolean(value, true);
-               LogLog::debug(((LogString) LOG4CXX_STR("Setting additivity for 
\""))
-                       + loggerName
-                       + ((additivity) ?  LOG4CXX_STR("\" to true") :
-                               LOG4CXX_STR("\" to false")));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(((LogString) LOG4CXX_STR("Setting 
additivity for \""))
+                               + loggerName
+                               + ((additivity) ?  LOG4CXX_STR("\" to true") :
+                                       LOG4CXX_STR("\" to false")));
+               }
 
                return additivity;
        }
@@ -331,10 +345,13 @@ 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("]."));
+       if (LogLog::isDebugEnabled())
+       {
+               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(","));
@@ -350,8 +367,11 @@ void PropertyConfigurator::parseLogger(
                }
 
                LogString levelStr = st.nextToken();
-               LogLog::debug((LogString) LOG4CXX_STR("Level token is [")
-                       + levelStr +  LOG4CXX_STR("]."));
+               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
@@ -369,17 +389,23 @@ void PropertyConfigurator::parseLogger(
                        else
                        {
                                logger->setLevel(0);
-                               LogLog::debug((LogString) LOG4CXX_STR("Logger ")
-                                       + loggerName + LOG4CXX_STR(" set to 
null"));
+                               if (LogLog::isDebugEnabled())
+                               {
+                                       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());
+                       if (LogLog::isDebugEnabled())
+                       {
+                               LogLog::debug((LogString) LOG4CXX_STR("Logger ")
+                                       + loggerName + LOG4CXX_STR(" set to ")
+                                       + logger->getLevel()->toString());
+                       }
                }
 
        }
@@ -417,8 +443,11 @@ AppenderPtr PropertyConfigurator::parseAppender(
 
        if (appender != 0)
        {
-               LogLog::debug((LogString) LOG4CXX_STR("Appender \"")
-                       + appenderName + LOG4CXX_STR("\" was already parsed."));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug((LogString) LOG4CXX_STR("Appender \"")
+                               + appenderName + LOG4CXX_STR("\" was already 
parsed."));
+               }
 
                return appender;
        }
@@ -472,8 +501,11 @@ AppenderPtr PropertyConfigurator::parseAppender(
                                        + appenderName + LOG4CXX_STR("\"."));
 
                                PropertySetter::setProperties(layout, props, 
layoutPrefix + LOG4CXX_STR("."), p);
-                               LogLog::debug((LogString) LOG4CXX_STR("End of 
parsing for \"")
-                                       + appenderName +  LOG4CXX_STR("\"."));
+                               if (LogLog::isDebugEnabled())
+                               {
+                                       LogLog::debug((LogString) 
LOG4CXX_STR("End of parsing for \"")
+                                               + appenderName +  
LOG4CXX_STR("\"."));
+                               }
                        }
                }
 
@@ -492,8 +524,11 @@ AppenderPtr PropertyConfigurator::parseAppender(
                                {
                                        
rolling->setRollingPolicy(rollingPolicy);
 
-                                       LogLog::debug((LogString) 
LOG4CXX_STR("Parsing rolling policy options for \"")
-                                               + appenderName + 
LOG4CXX_STR("\"."));
+                                       if (LogLog::isDebugEnabled())
+                                       {
+                                               LogLog::debug((LogString) 
LOG4CXX_STR("Parsing rolling policy options for \"")
+                                                       + appenderName + 
LOG4CXX_STR("\"."));
+                                       }
                                        
PropertySetter::setProperties(rollingPolicy, props, rollingPolicyKey + 
LOG4CXX_STR("."), p);
                                }
                        }
@@ -510,16 +545,22 @@ AppenderPtr PropertyConfigurator::parseAppender(
                                {
                                        
rolling->setTriggeringPolicy(triggeringPolicy);
 
-                                       LogLog::debug((LogString) 
LOG4CXX_STR("Parsing triggering policy options for \"")
-                                               + appenderName + 
LOG4CXX_STR("\"."));
+                                       if (LogLog::isDebugEnabled())
+                                       {
+                                               LogLog::debug((LogString) 
LOG4CXX_STR("Parsing triggering policy options for \"")
+                                                       + appenderName + 
LOG4CXX_STR("\"."));
+                                       }
                                        
PropertySetter::setProperties(triggeringPolicy, props, triggeringPolicyKey + 
LOG4CXX_STR("."), p);
                                }
                        }
                }
 
                PropertySetter::setProperties(appender, props, prefix + 
LOG4CXX_STR("."), p);
-               LogLog::debug((LogString) LOG4CXX_STR("Parsed \"")
-                       + appenderName + LOG4CXX_STR("\" options."));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug((LogString) LOG4CXX_STR("Parsed \"")
+                               + appenderName + LOG4CXX_STR("\" options."));
+               }
        }
 
        registryPut(appender);
diff --git a/src/main/cpp/propertysetter.cpp b/src/main/cpp/propertysetter.cpp
index ddbb4907..bc1a028b 100644
--- a/src/main/cpp/propertysetter.cpp
+++ b/src/main/cpp/propertysetter.cpp
@@ -89,8 +89,11 @@ void PropertySetter::setProperty(const LogString& option,
 
        if (obj != 0 && obj->instanceof(OptionHandler::getStaticClass()))
        {
-               LogLog::debug(LOG4CXX_STR("Setting option name=[") +
-                       option + LOG4CXX_STR("], value=[") + value + 
LOG4CXX_STR("]"));
+               if (LogLog::isDebugEnabled())
+               {
+                       LogLog::debug(LOG4CXX_STR("Setting option name=[") +
+                               option + LOG4CXX_STR("], value=[") + value + 
LOG4CXX_STR("]"));
+               }
                OptionHandlerPtr handler = LOG4CXX_NS::cast<OptionHandler>(obj);
                handler->setOption(option, value);
        }
diff --git a/src/main/cpp/socketappenderskeleton.cpp 
b/src/main/cpp/socketappenderskeleton.cpp
index d0e8b47d..2b6b9f1f 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -85,11 +85,14 @@ void SocketAppenderSkeleton::connect(Pool& p)
 
                try
                {
-                       LogString msg(LOG4CXX_STR("Connecting to [")
-                               + _priv->address->toString() + 
LOG4CXX_STR(":"));
-                       StringHelper::toString(_priv->port, p, msg);
-                       msg += LOG4CXX_STR("].");
-                       LogLog::debug(msg);
+                       if (LogLog::isDebugEnabled())
+                       {
+                               LogString msg(LOG4CXX_STR("Connecting to [")
+                                       + _priv->address->toString() + 
LOG4CXX_STR(":"));
+                               StringHelper::toString(_priv->port, p, msg);
+                               msg += LOG4CXX_STR("].");
+                               LogLog::debug(msg);
+                       }
                        SocketPtr socket = Socket::create(_priv->address, 
_priv->port);
                        setSocket(socket, p);
                }
@@ -151,14 +154,20 @@ void SocketAppenderSkeleton::monitor()
        {
                try
                {
-                       LogString msg(LOG4CXX_STR("Attempting connection to [")
-                               + _priv->address->toString() + 
LOG4CXX_STR(":"));
-                       StringHelper::toString(_priv->port, p, msg);
-                       msg += LOG4CXX_STR("].");
-                       LogLog::debug(msg);
+                       if (LogLog::isDebugEnabled())
+                       {
+                               LogString msg(LOG4CXX_STR("Attempting 
connection to [")
+                                       + _priv->address->toString() + 
LOG4CXX_STR(":"));
+                               StringHelper::toString(_priv->port, p, msg);
+                               msg += LOG4CXX_STR("].");
+                               LogLog::debug(msg);
+                       }
                        socket = Socket::create(_priv->address, _priv->port);
                        setSocket(socket, p);
-                       LogLog::debug(LOG4CXX_STR("Connection established. 
Exiting connector thread."));
+                       if (LogLog::isDebugEnabled())
+                       {
+                               LogLog::debug(LOG4CXX_STR("Connection 
established. Exiting connector thread."));
+                       }
                        return;
                }
                catch (ConnectException& e)
diff --git a/src/main/include/log4cxx/helpers/loglog.h 
b/src/main/include/log4cxx/helpers/loglog.h
index 66f8e0ec..1ec96f8a 100644
--- a/src/main/include/log4cxx/helpers/loglog.h
+++ b/src/main/include/log4cxx/helpers/loglog.h
@@ -52,6 +52,11 @@ class LOG4CXX_EXPORT LogLog
        public:
                ~LogLog();
 
+               /**
+                *  Is internal debugging is enabled?
+                **/
+               static bool isDebugEnabled();
+
                /**
                Use the value of \c enabled as the new internal debug logging 
state.
                */

Reply via email to