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 92179a67 Simplify the Hiearchy interface in the next ABI version (#608)
92179a67 is described below
commit 92179a678734fb47d0230dc508daad7f8ae2ebd0
Author: Stephen Webb <[email protected]>
AuthorDate: Sun Mar 15 11:44:59 2026 +1100
Simplify the Hiearchy interface in the next ABI version (#608)
* FallbackErrorHandler can now support multiple backup appenders
---
src/main/cpp/fallbackerrorhandler.cpp | 22 ++++++++++------------
src/main/cpp/hierarchy.cpp | 5 ++++-
src/main/include/log4cxx/hierarchy.h | 11 ++++++++++-
3 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/src/main/cpp/fallbackerrorhandler.cpp
b/src/main/cpp/fallbackerrorhandler.cpp
index e526e36b..57d4eb87 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -24,6 +24,7 @@
#include <log4cxx/logger.h>
#include <log4cxx/asyncappender.h>
#endif
+#include <list>
using namespace LOG4CXX_NS;
using namespace LOG4CXX_NS::helpers;
@@ -34,7 +35,7 @@ IMPLEMENT_LOG4CXX_OBJECT(FallbackErrorHandler)
struct FallbackErrorHandler::FallbackErrorHandlerPrivate
{
- AppenderWeakPtr backup;
+ std::list<AppenderPtr> backup;
AppenderWeakPtr primary;
std::map<LogString, spi::AppenderAttachableWeakPtr> appenderHolders;
bool errorReported = false;
@@ -99,7 +100,12 @@ void FallbackErrorHandler::error
LogLog::warn(message, ex);
AppenderPtr primaryLocked = m_priv->primary.lock();
- AppenderPtr backupLocked = m_priv->backup.lock();
+ AppenderPtr backupLocked;
+ if (!m_priv->backup.empty())
+ {
+ backupLocked = m_priv->backup.front();
+ m_priv->backup.pop_front();
+ }
if ( !primaryLocked || !backupLocked )
{
@@ -138,6 +144,7 @@ void FallbackErrorHandler::error
m_priv->errorReported = true;
if (event)
backupLocked->doAppend(event, p);
+ m_priv->primary = backupLocked;
}
void FallbackErrorHandler::setAppender(const AppenderPtr& primary1)
@@ -157,16 +164,7 @@ void FallbackErrorHandler::setBackupAppender(const
AppenderPtr& backup1)
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
- // 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);
- }
-
+ m_priv->backup.push_back(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.