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. */
