This is an automated email from the ASF dual-hosted git repository.
rmiddleton pushed a commit to branch next_stable
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/next_stable by this push:
new 939ab764 Keep track of appender even if not used (#147)
939ab764 is described below
commit 939ab764ee7fe074fee09c3f07c03d11d44e86c3
Author: Robert Middleton <[email protected]>
AuthorDate: Thu Nov 10 18:58:11 2022 -0500
Keep track of appender even if not used (#147)
---
src/main/cpp/fallbackerrorhandler.cpp | 11 +++++++++++
src/main/cpp/hierarchy.cpp | 11 +++++++++++
src/main/include/log4cxx/hierarchy.h | 4 ++++
3 files changed, 26 insertions(+)
diff --git a/src/main/cpp/fallbackerrorhandler.cpp
b/src/main/cpp/fallbackerrorhandler.cpp
index 91b6dddd..df650d0a 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -22,6 +22,8 @@
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/hierarchy.h>
+#include <log4cxx/logmanager.h>
using namespace log4cxx;
using namespace log4cxx::helpers;
@@ -103,6 +105,15 @@ 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.
+ LoggerRepository* repository =
LogManager::getRootLogger()->getLoggerRepository();
+ Hierarchy* hierarchy = dynamic_cast<Hierarchy*>(repository);
+ if(hierarchy){
+ hierarchy->addAppender(backup1);
+ }
+
}
void FallbackErrorHandler::activateOptions(Pool&)
diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index b8c0c0a9..98c4ba6c 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -70,6 +70,7 @@ struct Hierarchy::HierarchyPrivate
LoggerMap loggers;
ProvisionNodeMap provisionNodes;
+ std::vector<AppenderPtr> allAppenders;
};
IMPLEMENT_LOG4CXX_OBJECT(Hierarchy)
@@ -469,3 +470,13 @@ HierarchyPtr Hierarchy::create()
HierarchyPtr ret(new Hierarchy);
return ret;
}
+
+void Hierarchy::clearAppenders()
+{
+ m_priv->allAppenders.clear();
+}
+
+void Hierarchy::addAppender(AppenderPtr appender)
+{
+ m_priv->allAppenders.push_back(appender);
+}
diff --git a/src/main/include/log4cxx/hierarchy.h
b/src/main/include/log4cxx/hierarchy.h
index 058dfdfe..153e2e62 100644
--- a/src/main/include/log4cxx/hierarchy.h
+++ b/src/main/include/log4cxx/hierarchy.h
@@ -219,6 +219,10 @@ class LOG4CXX_EXPORT Hierarchy :
*/
void updateChildren(const Logger* parent);
+ void clearAppenders();
+
+ void addAppender(AppenderPtr appender);
+
private:
/**