[prev in list] [next in list] [prev in thread] [next in thread] 

List:       flume-commits
Subject:    (logging-log4cxx) branch master updated: Condition internal debug logging on its enabled state (#384
From:       swebb2066 () apache ! org
Date:       2024-05-17 2:12:48
Message-ID: 171591196817.2067099.6224193313714817784 () gitbox2-he-fi ! apache ! org
[Download RAW message or body]

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 5354f9cb Condition internal debug logging on its enabled state (#384)
5354f9cb is described below

commit 5354f9cb739c348c05ae9938ebaded843f78fd78
Author: Stephen Webb <stephen.webb@ieee.org>
AuthorDate: Fri May 17 12:12:43 2024 +1000

    Condition internal debug logging on its enabled state (#384)
---
 src/examples/cpp/com/foo/config3.cpp      |  55 +++++++------
 src/main/cpp-qt/configuration.cpp         |  14 +++-
 src/main/cpp/asyncappender.cpp            |   2 +-
 src/main/cpp/defaultconfigurator.cpp      |  34 +++++---
 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          |  23 ++++--
 src/main/cpp/patternlayout.cpp            |   8 +-
 src/main/cpp/propertyconfigurator.cpp     | 131 ++++++++++++++++++++----------
 src/main/cpp/propertysetter.cpp           |   7 +-
 src/main/cpp/socketappenderskeleton.cpp   |  48 +++++++----
 src/main/cpp/transcoder.cpp               |  13 +--
 src/main/include/log4cxx/helpers/loglog.h |   8 +-
 15 files changed, 367 insertions(+), 183 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-qt/configuration.cpp b/src/main/cpp-qt/configuration.cpp
index b5aad19c..10f8de3d 100644
--- a/src/main/cpp-qt/configuration.cpp
+++ b/src/main/cpp-qt/configuration.cpp
@@ -108,16 +108,22 @@ Configuration::configureFromFileAndWatch(const \
QVector<QString>& directories,  QString canidate_str = dir + "/" + fname;
 			QFile candidate(canidate_str);
 
-			LOG4CXX_DECODE_QSTRING(msg, "Checking file " + canidate_str);
-			LogLog::debug(msg);
+			if (LogLog::isDebugEnabled())
+			{
+				LOG4CXX_DECODE_QSTRING(msg, "Checking file " + canidate_str);
+				LogLog::debug(msg);
+			}
 			if (candidate.exists())
 			{
 				LOG4CXX_NS::spi::ConfigurationStatus configStatus = tryLoadFile(canidate_str);
 				if( configStatus == LOG4CXX_NS::spi::ConfigurationStatus::Configured ){
 					return {configStatus, canidate_str};
 				}
-				LOG4CXX_DECODE_QSTRING(failmsg, "Unable to load  " + canidate_str + ": trying \
                next");
-				LogLog::debug(failmsg);
+				if (LogLog::isDebugEnabled())
+				{
+					LOG4CXX_DECODE_QSTRING(failmsg, "Unable to load  " + canidate_str + ": trying \
next"); +					LogLog::debug(failmsg);
+				}
 			}
 		}
 	}
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/defaultconfigurator.cpp \
b/src/main/cpp/defaultconfigurator.cpp index 8f9fba35..646d50e3 100644
--- a/src/main/cpp/defaultconfigurator.cpp
+++ b/src/main/cpp/defaultconfigurator.cpp
@@ -72,9 +72,12 @@ void DefaultConfigurator::configure(LoggerRepositoryPtr \
repository)  {
 			File candidate(names[i]);
 
-			LogString debugMsg = LOG4CXX_STR("Checking file ");
-			debugMsg.append(names[i]);
-			LogLog::debug(debugMsg);
+			if (LogLog::isDebugEnabled())
+			{
+				LogString debugMsg = LOG4CXX_STR("Checking file ");
+				debugMsg.append(names[i]);
+				LogLog::debug(debugMsg);
+			}
 			if (candidate.exists(pool))
 			{
 				configuration = candidate;
@@ -89,10 +92,13 @@ void DefaultConfigurator::configure(LoggerRepositoryPtr \
repository)  
 	if (configuration.exists(pool))
 	{
-		LogString msg(LOG4CXX_STR("Using configuration file ["));
-		msg += configuration.getPath();
-		msg += LOG4CXX_STR("] for automatic log4cxx configuration");
-		LogLog::debug(msg);
+		if (LogLog::isDebugEnabled())
+		{
+			LogString msg(LOG4CXX_STR("Using configuration file ["));
+			msg += configuration.getPath();
+			msg += LOG4CXX_STR("] for automatic log4cxx configuration");
+			LogLog::debug(msg);
+		}
 
 		LoggerRepositoryPtr repo(repository);
 		OptionConverter::selectAndConfigure(
@@ -104,7 +110,7 @@ void DefaultConfigurator::configure(LoggerRepositoryPtr \
repository)  : getConfigurationWatchDelay()
 			);
 	}
-	else
+	else if (LogLog::isDebugEnabled())
 	{
 		if (configurationFileName.empty())
 		{
@@ -180,16 +186,20 @@ DefaultConfigurator::configureFromFile(const \
std::vector<LogString>& directories  LogString canidate_str = dir + LOG4CXX_STR("/") \
+ fname;  File candidate(canidate_str);
 
-			LogString debugMsg = LOG4CXX_STR("Checking file ");
-			debugMsg.append(canidate_str);
-			LogLog::debug(debugMsg);
+			if (LogLog::isDebugEnabled())
+			{
+				LogString debugMsg = LOG4CXX_STR("Checking file ");
+				debugMsg.append(canidate_str);
+				LogLog::debug(debugMsg);
+			}
 			if (candidate.exists(pool))
 			{
 				LOG4CXX_NS::spi::ConfigurationStatus configStatus = tryLoadFile(canidate_str);
 				if( configStatus == LOG4CXX_NS::spi::ConfigurationStatus::Configured ){
 					return ResultType{configStatus, canidate_str};
 				}
-				LogLog::debug(LOG4CXX_STR("Unable to load file: trying next"));
+				if (LogLog::isDebugEnabled())
+					LogLog::debug(LOG4CXX_STR("Unable to load file: trying next"));
 			}
 		}
 	}
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..71b79710 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..eb30bcbe 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())
@@ -427,7 +435,8 @@ void OptionConverter::selectAndConfigure(const File& \
configFileName,  
 	if (!clazz.empty())
 	{
-		LogLog::debug(LOG4CXX_STR("Preferred configurator class: ") + clazz);
+		if (LogLog::isDebugEnabled())
+			LogLog::debug(LOG4CXX_STR("Preferred configurator class: ") + clazz);
 		const Class& clazzObj = Loader::loadClass(clazz);
 		ObjectPtr obj = ObjectPtr(clazzObj.newInstance());
 		configurator = LOG4CXX_NS::cast<Configurator>(obj);
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..7141ea27 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());
+			}
 		}
 
 	}
@@ -397,8 +423,11 @@ void PropertyConfigurator::parseLogger(
 			continue;
 		}
 
-		LogLog::debug(LOG4CXX_STR("Parsing appender named ")
-			+ appenderName + LOG4CXX_STR("\"."));
+		if (LogLog::isDebugEnabled())
+		{
+			LogLog::debug(LOG4CXX_STR("Parsing appender named ")
+				+ appenderName + LOG4CXX_STR("\"."));
+		}
 		appender = parseAppender(props, appenderName);
 
 		if (appender != 0)
@@ -417,8 +446,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;
 	}
@@ -468,12 +500,18 @@ AppenderPtr PropertyConfigurator::parseAppender(
 			if (layout != 0)
 			{
 				appender->setLayout(layout);
-				LogLog::debug((LogString) LOG4CXX_STR("Parsing layout options for \"")
-					+ appenderName + LOG4CXX_STR("\"."));
+				if (LogLog::isDebugEnabled())
+				{
+					LogLog::debug((LogString) LOG4CXX_STR("Parsing layout options for \"")
+						+ 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 +530,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 +551,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..993294bb 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)
@@ -178,13 +187,16 @@ void SocketAppenderSkeleton::monitor()
 
 		if (_priv->reconnectionDelay > 0)
 		{
-			LogString msg(LOG4CXX_STR("Waiting "));
-			StringHelper::toString(_priv->reconnectionDelay, p, msg);
-			msg += LOG4CXX_STR(" ms before retrying [")
-				+ _priv->address->toString() + LOG4CXX_STR(":");
-			StringHelper::toString(_priv->port, p, msg);
-			msg += LOG4CXX_STR("].");
-			LogLog::debug(msg);
+			if (LogLog::isDebugEnabled())
+			{
+				LogString msg(LOG4CXX_STR("Waiting "));
+				StringHelper::toString(_priv->reconnectionDelay, p, msg);
+				msg += LOG4CXX_STR(" ms before retrying [")
+					+ _priv->address->toString() + LOG4CXX_STR(":");
+				StringHelper::toString(_priv->port, p, msg);
+				msg += LOG4CXX_STR("].");
+				LogLog::debug(msg);
+			}
 
 			std::unique_lock<std::mutex> lock( _priv->interrupt_mutex );
 			if (_priv->interrupt.wait_for( lock, std::chrono::milliseconds( \
                _priv->reconnectionDelay ),
diff --git a/src/main/cpp/transcoder.cpp b/src/main/cpp/transcoder.cpp
index d7e7b80f..55903af1 100644
--- a/src/main/cpp/transcoder.cpp
+++ b/src/main/cpp/transcoder.cpp
@@ -627,11 +627,14 @@ void Transcoder::decode(const CFStringRef& src, LogString& dst)
 {
 	auto length = CFStringGetLength(src);
 #if defined(_DEBUG)
-	Pool pool;
-	LogString msg(LOG4CXX_STR("Transcoder::decodeCFString"));
-	msg += LOG4CXX_STR(" length ");
-	StringHelper::toString((size_t)length, pool, msg);
-	LogLog::debug(msg);
+	if (LogLog::isDebugEnabled())
+	{
+		Pool pool;
+		LogString msg(LOG4CXX_STR("Transcoder::decodeCFString"));
+		msg += LOG4CXX_STR(" length ");
+		StringHelper::toString((size_t)length, pool, msg);
+		LogLog::debug(msg);
+	}
 #endif
 
 	if (length > 0)
diff --git a/src/main/include/log4cxx/helpers/loglog.h \
b/src/main/include/log4cxx/helpers/loglog.h index 66f8e0ec..794b963c 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 enabled?
+		 **/
+		static bool isDebugEnabled();
+
 		/**
 		Use the value of \c enabled as the new internal debug logging state.
 		*/
@@ -104,7 +109,8 @@ class LOG4CXX_EXPORT LogLog
 } // namespace log4cxx
 
 #define LOGLOG_DEBUG(log) { \
-		LOG4CXX_NS::helpers::LogLog::debug(log) ; }
+		if (LogLog::isDebugEnabled()) \
+			LOG4CXX_NS::helpers::LogLog::debug(log) ; }
 
 #define LOGLOG_WARN(log) { \
 		LOG4CXX_NS::helpers::LogLog::warn(log) ; }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic