This is an automated email from the ASF dual-hosted git repository. swebb2066 pushed a commit to branch simplify_fallback_error_handler in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit b5e90ffed229a1ceac5cab5813c5e29f94d8d0e0 Author: Stephen Webb <[email protected]> AuthorDate: Sat Mar 14 13:11:16 2026 +1100 Simplify the Hiearchy interface in the next ABI version --- src/main/cpp/fallbackerrorhandler.cpp | 28 +++++++++------------------- src/main/cpp/hierarchy.cpp | 5 ++++- src/main/include/log4cxx/hierarchy.h | 11 ++++++++++- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/cpp/fallbackerrorhandler.cpp b/src/main/cpp/fallbackerrorhandler.cpp index e526e36b..dd0d72ee 100644 --- a/src/main/cpp/fallbackerrorhandler.cpp +++ b/src/main/cpp/fallbackerrorhandler.cpp @@ -34,7 +34,7 @@ IMPLEMENT_LOG4CXX_OBJECT(FallbackErrorHandler) struct FallbackErrorHandler::FallbackErrorHandlerPrivate { - AppenderWeakPtr backup; + AppenderPtr backup; AppenderWeakPtr primary; std::map<LogString, spi::AppenderAttachableWeakPtr> appenderHolders; bool errorReported = false; @@ -99,9 +99,7 @@ void FallbackErrorHandler::error LogLog::warn(message, ex); AppenderPtr primaryLocked = m_priv->primary.lock(); - AppenderPtr backupLocked = m_priv->backup.lock(); - - if ( !primaryLocked || !backupLocked ) + if ( !primaryLocked || !m_priv->backup ) { return; } @@ -115,29 +113,30 @@ void FallbackErrorHandler::error { LogLog::debug(LOG4CXX_STR("FB: Replacing [") + primaryLocked->getName() + LOG4CXX_STR("] with [") - + backupLocked->getName() + LOG4CXX_STR("] in [") + + m_priv->backup->getName() + LOG4CXX_STR("] in [") + item.first + LOG4CXX_STR("].")); } #if LOG4CXX_ABI_VERSION <= 15 bool ok{ false }; if (auto logger = LOG4CXX_NS::cast<Logger>(holderLocked)) - ok = logger->replaceAppender(primaryLocked, backupLocked); + ok = logger->replaceAppender(primaryLocked, m_priv->backup); else if (auto asyncAppender = LOG4CXX_NS::cast<AsyncAppender>(holderLocked)) - ok = asyncAppender->replaceAppender(primaryLocked, backupLocked); + ok = asyncAppender->replaceAppender(primaryLocked, m_priv->backup); if (!ok) #else - if (!holderLocked->replaceAppender(primaryLocked, backupLocked)) + if (!holderLocked->replaceAppender(primaryLocked, m_priv->backup)) #endif { LogLog::debug(LOG4CXX_STR("FB: Failed to replace [") + primaryLocked->getName() + LOG4CXX_STR("] with [") - + backupLocked->getName() + LOG4CXX_STR("] in [") + + m_priv->backup->getName() + LOG4CXX_STR("] in [") + item.first + LOG4CXX_STR("].")); } } m_priv->errorReported = true; if (event) - backupLocked->doAppend(event, p); + m_priv->backup->doAppend(event, p); + m_priv->backup.reset(); } void FallbackErrorHandler::setAppender(const AppenderPtr& primary1) @@ -158,15 +157,6 @@ void FallbackErrorHandler::setBackupAppender(const AppenderPtr& backup1) + backup1->getName() + LOG4CXX_STR("].")); } m_priv->backup = backup1; - - // Make sure that we keep a reference to the appender around, since otherwise - // the appender would be lost if it has no loggers that use it. - auto repository = LogManager::getLoggerRepository(); - if (auto hierarchy = dynamic_cast<Hierarchy*>(repository.get())) - { - hierarchy->addAppender(backup1); - } - } void FallbackErrorHandler::activateOptions(Pool&) diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp index 3945d78e..60142105 100644 --- a/src/main/cpp/hierarchy.cpp +++ b/src/main/cpp/hierarchy.cpp @@ -61,8 +61,9 @@ struct Hierarchy::HierarchyPrivate LoggerMap loggers; ProvisionNodeMap provisionNodes; +#if LOG4CXX_ABI_VERSION <= 15 std::vector<AppenderPtr> allAppenders; - +#endif mutable std::mutex listenerMutex; const char* alreadyTriedMethod{ NULL }; @@ -463,6 +464,7 @@ HierarchyPtr Hierarchy::create() return ret; } +#if LOG4CXX_ABI_VERSION <= 15 void Hierarchy::clearAppenders() { m_priv->allAppenders.clear(); @@ -472,6 +474,7 @@ void Hierarchy::addAppender(AppenderPtr appender) { m_priv->allAppenders.push_back(appender); } +#endif bool Hierarchy::removeLogger(const LogString& name, bool ifNotUsed) { diff --git a/src/main/include/log4cxx/hierarchy.h b/src/main/include/log4cxx/hierarchy.h index 9bfae700..d2cec488 100644 --- a/src/main/include/log4cxx/hierarchy.h +++ b/src/main/include/log4cxx/hierarchy.h @@ -231,10 +231,19 @@ class LOG4CXX_EXPORT Hierarchy : public spi::LoggerRepository */ void updateChildren(const Logger* parent); +#if LOG4CXX_ABI_VERSION <= 15 + /** + * @deprecated This function is deprecated and will be removed in a future version. + */ + [[ deprecated( "Storing appenders is longer supported" ) ]] void clearAppenders(); + /** + * @deprecated This function is deprecated and will be removed in a future version. + */ + [[ deprecated( "Storing appenders is longer supported" ) ]] void addAppender(AppenderPtr appender); - +#endif /** Remove the \c name Logger from the hierarchy.
