This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch use_new_activate_options_signature
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit 39a7259baab72ba17460fba895dcfd67c60a7101
Author: Stephen Webb <[email protected]>
AuthorDate: Fri Apr 24 17:08:16 2026 +1000

    Use the argument-free activateOptions() syntax
---
 src/fuzzers/cpp/PatternLayoutFuzzer.cpp            |   2 -
 src/fuzzers/cpp/TimeBasedRollingPolicyFuzzer.cpp   |   8 +-
 src/main/cpp/appenderskeleton.cpp                  |  11 +-
 src/main/cpp/consoleappender.cpp                   |  11 +-
 src/main/cpp/dbappender.cpp                        |   3 +-
 src/main/cpp/errorhandler.cpp                      |  11 +-
 src/main/cpp/fallbackerrorhandler.cpp              |   2 +
 src/main/cpp/fileappender.cpp                      |  32 ++--
 src/main/cpp/filter.cpp                            |  11 +-
 src/main/cpp/filterbasedtriggeringpolicy.cpp       |   4 +-
 src/main/cpp/fixedwindowrollingpolicy.cpp          |   4 +-
 src/main/cpp/fmtlayout.cpp                         |   2 +-
 src/main/cpp/jsonlayout.cpp                        |   2 +-
 src/main/cpp/layout.cpp                            |  11 +-
 src/main/cpp/manualtriggeringpolicy.cpp            |   2 +-
 src/main/cpp/multiprocessrollingfileappender.cpp   |  11 +-
 src/main/cpp/nteventlogappender.cpp                |   5 +-
 src/main/cpp/odbcappender.cpp                      |   2 +-
 src/main/cpp/onlyonceerrorhandler.cpp              |   2 +
 src/main/cpp/optionhandler.cpp                     |  18 +-
 src/main/cpp/patternlayout.cpp                     |   8 +-
 src/main/cpp/propertysetter.cpp                    |   2 +-
 src/main/cpp/rollingfileappender.cpp               |  61 ++++---
 src/main/cpp/rollingpolicybase.cpp                 |  21 +--
 src/main/cpp/sizebasedtriggeringpolicy.cpp         |   2 +-
 src/main/cpp/smtpappender.cpp                      |  22 +--
 src/main/cpp/socketappenderskeleton.cpp            |   6 +-
 src/main/cpp/syslogappender.cpp                    |   2 +
 src/main/cpp/telnetappender.cpp                    |   2 +-
 src/main/cpp/timebasedrollingpolicy.cpp            |  12 +-
 src/main/cpp/triggeringpolicy.cpp                  |  13 --
 src/main/cpp/writerappender.cpp                    |  33 ++--
 src/main/cpp/xmlsocketappender.cpp                 |   6 +-
 src/main/include/log4cxx/appenderskeleton.h        |  22 +--
 src/main/include/log4cxx/consoleappender.h         |   3 +-
 src/main/include/log4cxx/db/dbappender.h           |   2 +-
 src/main/include/log4cxx/db/odbcappender.h         |   2 +-
 src/main/include/log4cxx/fileappender.h            |  17 +-
 src/main/include/log4cxx/filter/expressionfilter.h |   2 +-
 src/main/include/log4cxx/fmtlayout.h               |   5 +-
 .../include/log4cxx/helpers/onlyonceerrorhandler.h |   3 +-
 src/main/include/log4cxx/htmllayout.h              |   5 +-
 src/main/include/log4cxx/jsonlayout.h              |   5 +-
 src/main/include/log4cxx/layout.h                  |  14 +-
 src/main/include/log4cxx/net/smtpappender.h        |   2 +-
 .../include/log4cxx/net/socketappenderskeleton.h   |   3 +-
 src/main/include/log4cxx/net/syslogappender.h      |   3 +-
 src/main/include/log4cxx/net/telnetappender.h      |   3 +-
 src/main/include/log4cxx/net/xmlsocketappender.h   |   1 +
 src/main/include/log4cxx/nt/nteventlogappender.h   |   3 +-
 src/main/include/log4cxx/patternlayout.h           |   3 +-
 .../log4cxx/private/rollingfileappender_priv.h     |   2 +
 .../log4cxx/private/rollingpolicybase_priv.h       |   4 +
 .../include/log4cxx/private/writerappender_priv.h  |   2 +
 .../log4cxx/rolling/filterbasedtriggeringpolicy.h  |   5 +-
 .../log4cxx/rolling/fixedwindowrollingpolicy.h     |   3 +-
 .../log4cxx/rolling/manualtriggeringpolicy.h       |   5 +-
 .../rolling/multiprocessrollingfileappender.h      |   2 +-
 .../include/log4cxx/rolling/rollingfileappender.h  |   3 +-
 .../include/log4cxx/rolling/rollingpolicybase.h    |  16 +-
 .../log4cxx/rolling/sizebasedtriggeringpolicy.h    |  11 +-
 .../log4cxx/rolling/timebasedrollingpolicy.h       |   8 +-
 .../include/log4cxx/rolling/triggeringpolicy.h     |   9 -
 src/main/include/log4cxx/simplelayout.h            |   4 +-
 src/main/include/log4cxx/spi/appenderattachable.h  |   6 -
 src/main/include/log4cxx/spi/errorhandler.h        |   7 +-
 src/main/include/log4cxx/spi/filter.h              |  24 +--
 src/main/include/log4cxx/spi/optionhandler.h       |  16 +-
 .../include/log4cxx/varia/fallbackerrorhandler.h   |   7 +-
 src/main/include/log4cxx/writerappender.h          |   3 +-
 src/main/include/log4cxx/xml/xmllayout.h           |   6 +-
 src/test/cpp/CMakeLists.txt                        |   1 +
 src/test/cpp/asyncappendertestcase.cpp             |   6 +-
 src/test/cpp/benchmark/benchmark.cpp               |   4 -
 src/test/cpp/consoleappendertestcase.cpp           |   3 +-
 src/test/cpp/encodingtest.cpp                      |   5 +-
 src/test/cpp/fileappendertest.cpp                  |   9 +-
 src/test/cpp/filter/andfiltertest.cpp              |  34 ++--
 src/test/cpp/filter/denyallfiltertest.cpp          |   3 +-
 src/test/cpp/filter/levelmatchfiltertest.cpp       |  15 +-
 src/test/cpp/filter/levelrangefiltertest.cpp       |  18 +-
 src/test/cpp/filter/locationinfofiltertest.cpp     |  12 +-
 src/test/cpp/filter/loggermatchfiltertest.cpp      |  12 +-
 src/test/cpp/filter/mapfiltertest.cpp              |  12 +-
 src/test/cpp/filter/stringmatchfiltertest.cpp      |  15 +-
 src/test/cpp/net/socketappendertestcase.cpp        |   3 +-
 src/test/cpp/net/telnetappendertestcase.cpp        |  12 +-
 src/test/cpp/nt/nteventlogappendertestcase.cpp     |   2 +-
 src/test/cpp/optionhandlertest.cpp                 | 190 +++++++++++++++++++++
 src/test/cpp/patternlayouttest.cpp                 |  23 ++-
 src/test/cpp/rolling/filterbasedrollingtest.cpp    |   7 +-
 src/test/cpp/rolling/manualrollingtest.cpp         |  31 ++--
 .../rolling/rollingfileappenderpropertiestest.cpp  |   6 +-
 src/test/cpp/rolling/sizebasedrollingtest.cpp      |  31 ++--
 src/test/cpp/rolling/timebasedrollingtest.cpp      |  50 +++---
 src/test/cpp/throughput/log4cxxbenchmarker.cpp     |   5 -
 src/test/cpp/varia/errorhandlertestcase.cpp        |   6 +-
 src/test/cpp/xml/xmllayouttest.cpp                 |   3 +-
 98 files changed, 574 insertions(+), 529 deletions(-)

diff --git a/src/fuzzers/cpp/PatternLayoutFuzzer.cpp 
b/src/fuzzers/cpp/PatternLayoutFuzzer.cpp
index 62c7c07f..d0e6db31 100644
--- a/src/fuzzers/cpp/PatternLayoutFuzzer.cpp
+++ b/src/fuzzers/cpp/PatternLayoutFuzzer.cpp
@@ -58,8 +58,6 @@ public:
                getLayout()->format(msg, event, pool);
        }
 
-       void activateOptions(helpers::Pool& pool) override {}
-
        void setOption(const LogString& option, const LogString& value) 
override {}
 
 }; // class
diff --git a/src/fuzzers/cpp/TimeBasedRollingPolicyFuzzer.cpp 
b/src/fuzzers/cpp/TimeBasedRollingPolicyFuzzer.cpp
index a1d92b91..ac65a1c6 100644
--- a/src/fuzzers/cpp/TimeBasedRollingPolicyFuzzer.cpp
+++ b/src/fuzzers/cpp/TimeBasedRollingPolicyFuzzer.cpp
@@ -34,7 +34,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, 
size_t size) {
     FuzzedDataProvider fdp(data, size);
 
     // Set up logger
-    Pool            pool;
     PatternLayoutPtr         layout( new PatternLayout(PATTERN_LAYOUT));
     RollingFileAppenderPtr  rfa(    new RollingFileAppender());
     rfa->setAppend(fdp.ConsumeBool());
@@ -49,15 +48,16 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, 
size_t size) {
     }
     rfa->setFile(LOG4CXX_STR("test.log"));
     
-    tbrp->activateOptions(pool);
+    tbrp->activateOptions();
     rfa->setRollingPolicy(tbrp);
-    rfa->activateOptions(pool);
+    rfa->activateOptions();
     rfa->setBufferedSeconds(fdp.ConsumeIntegral<int>());
-    rfa->activateOptions(pool);
+    rfa->activateOptions();
     LoggerPtr logger = 
LogManager::getLogger("org.apache.log4j.TimeBasedRollingTest");
     logger->addAppender(rfa);
     
     // Log and rollover
+    Pool pool;
     for (int i = 0; i < 10; i++)
     {
             if (i == 4 || i == 9)
diff --git a/src/main/cpp/appenderskeleton.cpp 
b/src/main/cpp/appenderskeleton.cpp
index 1297f3a4..030c7572 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -50,19 +50,10 @@ AppenderSkeleton::AppenderSkeleton(const LayoutPtr& layout)
 
 AppenderSkeleton::~AppenderSkeleton() {}
 
-void AppenderSkeleton::activateOptions(helpers::Pool& /* pool */)
+void AppenderSkeleton::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
 }
 
-#if 15 < LOG4CXX_ABI_VERSION
-void AppenderSkeleton::activateOptions()
-{
-       // Ensure any ABI 15 overriden activateOptions is invoked
-       helpers::Pool p;
-       activateOptions(p);
-}
-#endif
-
 #if LOG4CXX_ABI_VERSION <= 15
 void AppenderSkeleton::finalize()
 {
diff --git a/src/main/cpp/consoleappender.cpp b/src/main/cpp/consoleappender.cpp
index 87d0a007..40d7165d 100644
--- a/src/main/cpp/consoleappender.cpp
+++ b/src/main/cpp/consoleappender.cpp
@@ -49,9 +49,8 @@ ConsoleAppender::ConsoleAppender(const LayoutPtr& layout)
        : WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
 {
        setLayout(layout);
-       Pool p;
        _priv->setWriter(std::make_shared<SystemOutWriter>());
-       WriterAppender::activateOptions(p);
+       _priv->activateOptions();
 }
 
 ConsoleAppender::ConsoleAppender(const LayoutPtr& layout, const LogString& 
target)
@@ -59,8 +58,12 @@ ConsoleAppender::ConsoleAppender(const LayoutPtr& layout, 
const LogString& targe
 {
        setLayout(layout);
        setTarget(target);
+#if LOG4CXX_ABI_VERSION <= 15
        Pool p;
        ConsoleAppender::activateOptions(p);
+#else
+       ConsoleAppender::activateOptions();
+#endif
 }
 
 ConsoleAppender::~ConsoleAppender()
@@ -111,7 +114,7 @@ void ConsoleAppender::targetWarn(const LogString& val)
        LogLog::warn(LOG4CXX_STR("Using previously set target, System.out by 
default."));
 }
 
-void ConsoleAppender::activateOptions(Pool& p)
+void ConsoleAppender::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        if (StringHelper::equalsIgnoreCase(_priv->target,
                        LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
@@ -124,7 +127,7 @@ void ConsoleAppender::activateOptions(Pool& p)
                _priv->setWriter(std::make_shared<SystemErrWriter>());
        }
 
-       WriterAppender::activateOptions(p);
+       _priv->activateOptions();
 }
 
 void ConsoleAppender::setOption(const LogString& option, const LogString& 
value)
diff --git a/src/main/cpp/dbappender.cpp b/src/main/cpp/dbappender.cpp
index ed3582c2..971b7f21 100644
--- a/src/main/cpp/dbappender.cpp
+++ b/src/main/cpp/dbappender.cpp
@@ -154,7 +154,8 @@ void DBAppender::setOption(const LogString& option, const 
LogString& value){
     }
 }
 
-void DBAppender::activateOptions(helpers::Pool& p){
+void DBAppender::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
+{
     apr_status_t stat = apr_dbd_get_driver(_priv->m_pool.getAPRPool(),
                                            _priv->driverName.c_str(),
 #if 15 < LOG4CXX_ABI_VERSION
diff --git a/src/main/cpp/errorhandler.cpp b/src/main/cpp/errorhandler.cpp
index 94a0f078..7c0a2c9b 100644
--- a/src/main/cpp/errorhandler.cpp
+++ b/src/main/cpp/errorhandler.cpp
@@ -19,15 +19,6 @@
 using namespace LOG4CXX_NS;
 using namespace LOG4CXX_NS::helpers;
 
-#if 15 < LOG4CXX_ABI_VERSION
-void spi::ErrorHandler::activateOptions(Pool&)
+void spi::ErrorHandler::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
 }
-
-void spi::ErrorHandler::activateOptions()
-{
-       // Ensure any ABI 15 overriden activateOptions is invoked
-       helpers::Pool p;
-       activateOptions(p);
-}
-#endif
\ No newline at end of file
diff --git a/src/main/cpp/fallbackerrorhandler.cpp 
b/src/main/cpp/fallbackerrorhandler.cpp
index f821b6aa..0c027c00 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -169,9 +169,11 @@ void FallbackErrorHandler::setBackupAppender(const 
AppenderPtr& backup1)
        m_priv->backup.push_back(backup1);
 }
 
+#if LOG4CXX_ABI_VERSION <= 15
 void FallbackErrorHandler::activateOptions(Pool&)
 {
 }
+#endif
 
 void FallbackErrorHandler::setOption(const LogString&, const LogString&)
 {
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index ae7a83dc..9e0233ce 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -52,8 +52,7 @@ FileAppender::FileAppender
        )
        : WriterAppender(std::make_unique<FileAppenderPriv>(layout1, fileName1, 
append1, bufferedIO1, bufferSize1))
 {
-       Pool p;
-       activateOptions(p);
+       activateOptionsInternal();
 }
 
 FileAppender::FileAppender
@@ -63,15 +62,13 @@ FileAppender::FileAppender
        )
        : WriterAppender(std::make_unique<FileAppenderPriv>(layout1, fileName1, 
append1, false))
 {
-       Pool p;
-       activateOptions(p);
+       activateOptionsInternal();
 }
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& 
fileName1)
        : WriterAppender(std::make_unique<FileAppenderPriv>(layout1, fileName1))
 {
-       Pool p;
-       activateOptions(p);
+       activateOptionsInternal();
 }
 
 FileAppender::FileAppender(std::unique_ptr<FileAppenderPriv> priv)
@@ -153,13 +150,13 @@ void FileAppender::setOption(const LogString& option,
        }
 }
 
-void FileAppender::activateOptions(Pool& p)
+void FileAppender::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS 
)
 {
        std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
-       activateOptionsInternal(p);
+       activateOptionsInternal();
 }
 
-void FileAppender::activateOptionsInternal(Pool& p)
+void FileAppender::activateOptionsInternal()
 {
        int errors = 0;
 
@@ -167,7 +164,7 @@ void FileAppender::activateOptionsInternal(Pool& p)
        {
                try
                {
-                       setFileInternal(_priv->fileName, _priv->fileAppend, 
_priv->bufferedIO, _priv->bufferSize, p);
+                       setFileInternal(_priv->fileName, _priv->fileAppend, 
_priv->bufferedIO, _priv->bufferSize);
                }
                catch (IOException& e)
                {
@@ -190,7 +187,7 @@ void FileAppender::activateOptionsInternal(Pool& p)
 
        if (errors == 0)
        {
-               WriterAppender::activateOptions(p);
+               _priv->activateOptions();
                if (auto p = _priv->taskManager.lock())
                        p->value().removePeriodicTask(getName());
 
@@ -287,8 +284,7 @@ void FileAppender::setFileInternal(
        const LogString& filename,
        bool append1,
        bool bufferedIO1,
-       size_t bufferSize1,
-       Pool& p)
+       size_t bufferSize1)
 {
        // It does not make sense to have immediate flush and bufferedIO.
        if (bufferedIO1)
@@ -354,6 +350,7 @@ void FileAppender::setFileInternal(
        //
        if (writeBOM)
        {
+               Pool p;
                char bom[] = { (char) 0xFE, (char) 0xFF };
                ByteBuffer buf(bom, 2);
                outStream->write(buf, p);
@@ -410,3 +407,12 @@ bool FileAppender::getAppend() const
 {
        return _priv->fileAppend;
 }
+
+#if LOG4CXX_ABI_VERSION <= 15
+void FileAppender::activateOptionsInternal(helpers::Pool& )
+{ activateOptionsInternal(); }
+void FileAppender::setFileInternal(const LogString& file, bool append,
+       bool bufferedIO, size_t bufferSize,
+       helpers::Pool&)
+{ setFileInternal(file, append, bufferedIO, bufferSize); }
+#endif
diff --git a/src/main/cpp/filter.cpp b/src/main/cpp/filter.cpp
index 4507458c..39e63a8d 100644
--- a/src/main/cpp/filter.cpp
+++ b/src/main/cpp/filter.cpp
@@ -45,19 +45,10 @@ void Filter::setNext(const FilterPtr& newNext)
        m_priv->next = newNext;
 }
 
-void Filter::activateOptions(Pool&)
+void Filter::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
 }
 
-#if 15 < LOG4CXX_ABI_VERSION
-void Filter::activateOptions()
-{
-       // Ensure any ABI 15 overriden activateOptions is invoked
-       helpers::Pool p;
-       activateOptions(p);
-}
-#endif
-
 void Filter::setOption(const LogString&, const LogString&)
 {
 }
diff --git a/src/main/cpp/filterbasedtriggeringpolicy.cpp 
b/src/main/cpp/filterbasedtriggeringpolicy.cpp
index ca7131cd..4a52aac5 100644
--- a/src/main/cpp/filterbasedtriggeringpolicy.cpp
+++ b/src/main/cpp/filterbasedtriggeringpolicy.cpp
@@ -111,11 +111,11 @@ LOG4CXX_NS::spi::FilterPtr& 
FilterBasedTriggeringPolicy::getFilter()
 /**
  *  Prepares the instance for use.
  */
-void FilterBasedTriggeringPolicy::activateOptions(LOG4CXX_NS::helpers::Pool& p)
+void FilterBasedTriggeringPolicy::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        for (LOG4CXX_NS::spi::FilterPtr f = m_priv->headFilter; f != NULL; f = 
f->getNext())
        {
-               f->activateOptions(p);
+               f->activateOptions();
        }
 }
 
diff --git a/src/main/cpp/fixedwindowrollingpolicy.cpp 
b/src/main/cpp/fixedwindowrollingpolicy.cpp
index 53a85c15..89aec4c6 100644
--- a/src/main/cpp/fixedwindowrollingpolicy.cpp
+++ b/src/main/cpp/fixedwindowrollingpolicy.cpp
@@ -99,9 +99,9 @@ void FixedWindowRollingPolicy::setOption(const LogString& 
option,
 /**
  * {@inheritDoc}
  */
-void FixedWindowRollingPolicy::activateOptions(Pool& p)
+void FixedWindowRollingPolicy::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
-       RollingPolicyBase::activateOptions(p);
+       priv->activateOptions(getFormatSpecifiers());
 
        if (priv->maxIndex < priv->minIndex)
        {
diff --git a/src/main/cpp/fmtlayout.cpp b/src/main/cpp/fmtlayout.cpp
index e6c5bf77..410a1dd1 100644
--- a/src/main/cpp/fmtlayout.cpp
+++ b/src/main/cpp/fmtlayout.cpp
@@ -80,7 +80,7 @@ void FMTLayout::setOption(const LogString& option, const 
LogString& value)
        }
 }
 
-void FMTLayout::activateOptions(helpers::Pool&)
+void FMTLayout::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        m_priv->expectedPatternLength = getFormattedEventCharacterCount() * 2;
 }
diff --git a/src/main/cpp/jsonlayout.cpp b/src/main/cpp/jsonlayout.cpp
index c5c4df58..ac1467e4 100644
--- a/src/main/cpp/jsonlayout.cpp
+++ b/src/main/cpp/jsonlayout.cpp
@@ -104,7 +104,7 @@ LogString JSONLayout::getContentType() const
        return LOG4CXX_STR("application/json");
 }
 
-void JSONLayout::activateOptions(helpers::Pool& /* p */)
+void JSONLayout::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        m_priv->expectedPatternLength = getFormattedEventCharacterCount() * 2;
 }
diff --git a/src/main/cpp/layout.cpp b/src/main/cpp/layout.cpp
index dedef5d7..6ff6ae98 100644
--- a/src/main/cpp/layout.cpp
+++ b/src/main/cpp/layout.cpp
@@ -51,15 +51,6 @@ size_t Layout::getFormattedEventCharacterCount() const
        return text.size();
 }
 
-#if 15 < LOG4CXX_ABI_VERSION
-void Layout::activateOptions(Pool&)
+void Layout::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
 }
-
-void Layout::activateOptions()
-{
-       // Ensure any ABI 15 overriden activateOptions is invoked
-       Pool p;
-       activateOptions(p);
-}
-#endif
\ No newline at end of file
diff --git a/src/main/cpp/manualtriggeringpolicy.cpp 
b/src/main/cpp/manualtriggeringpolicy.cpp
index eeb9ef1e..1fff5242 100644
--- a/src/main/cpp/manualtriggeringpolicy.cpp
+++ b/src/main/cpp/manualtriggeringpolicy.cpp
@@ -37,7 +37,7 @@ bool ManualTriggeringPolicy::isTriggeringEvent(Appender* /* 
appender */,
        return false;
 }
 
-void ManualTriggeringPolicy::activateOptions(Pool& /* p */ )
+void ManualTriggeringPolicy::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS  )
 {
 }
 
diff --git a/src/main/cpp/multiprocessrollingfileappender.cpp 
b/src/main/cpp/multiprocessrollingfileappender.cpp
index 3c412372..71f16253 100644
--- a/src/main/cpp/multiprocessrollingfileappender.cpp
+++ b/src/main/cpp/multiprocessrollingfileappender.cpp
@@ -150,9 +150,12 @@ 
MultiprocessRollingFileAppender::MultiprocessRollingFileAppender()
 /**
  * Prepare instance of use.
  */
-void MultiprocessRollingFileAppender::activateOptions(Pool& p)
+void MultiprocessRollingFileAppender::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
-       RollingFileAppender::activateOptions(p);
+       if (_priv->activateOptions())
+       {
+               FileAppender::activateOptionsInternal();
+       }
 
        if (auto pTimeBased = 
LOG4CXX_NS::cast<TimeBasedRollingPolicy>(_priv->rollingPolicy))
                pTimeBased->setMultiprocess(true);
@@ -315,13 +318,13 @@ bool 
MultiprocessRollingFileAppender::synchronizedRollover(Pool& p, const Trigge
                                        msg.append(LOG4CXX_STR("] failed"));
                                        _priv->errorHandler->error(msg);
                                }
-                               setFileInternal(rollover1->getActiveFileName(), 
appendToExisting, _priv->bufferedIO, _priv->bufferSize, p);
+                               setFileInternal(rollover1->getActiveFileName(), 
appendToExisting, _priv->bufferedIO, _priv->bufferSize);
                        }
                        else
                        {
                                setFileInternal(rollover1->getActiveFileName());
                                // Call activateOptions to create any 
intermediate directories(if required)
-                               FileAppender::activateOptionsInternal(p);
+                               FileAppender::activateOptionsInternal();
                                OutputStreamPtr os = 
std::make_shared<FileOutputStream>
                                        ( rollover1->getActiveFileName()
                                        , rollover1->getAppend()
diff --git a/src/main/cpp/nteventlogappender.cpp 
b/src/main/cpp/nteventlogappender.cpp
index ea4b552c..c6bff171 100644
--- a/src/main/cpp/nteventlogappender.cpp
+++ b/src/main/cpp/nteventlogappender.cpp
@@ -120,11 +120,10 @@ NTEventLogAppender::NTEventLogAppender() :
 NTEventLogAppender::NTEventLogAppender(const LogString& server, const 
LogString& log, const LogString& source, const LayoutPtr& layout)
        :       
AppenderSkeleton(std::make_unique<NTEventLogAppenderPrivate>(layout))
 {
-       Pool pool;
        priv->server = server;
        priv->log = log;
        priv->source = source;
-       activateOptions(pool);
+       activateOptions();
 }
 
 NTEventLogAppender::~NTEventLogAppender()
@@ -175,7 +174,7 @@ void NTEventLogAppender::setOption(const LogString& option, 
const LogString& val
        }
 }
 
-void NTEventLogAppender::activateOptions(Pool&)
+void NTEventLogAppender::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        if (priv->source.empty())
        {
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index eb58666b..fcad8cd2 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -218,7 +218,7 @@ bool ODBCAppender::requiresLayout() const
        return false;
 }
 
-void ODBCAppender::activateOptions(LOG4CXX_NS::helpers::Pool&)
+void ODBCAppender::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS 
)
 {
 #if !LOG4CXX_HAVE_ODBC
        LogLog::error(LOG4CXX_STR("Can not activate ODBCAppender unless 
compiled with ODBC support."));
diff --git a/src/main/cpp/onlyonceerrorhandler.cpp 
b/src/main/cpp/onlyonceerrorhandler.cpp
index ebc07abd..b0944991 100644
--- a/src/main/cpp/onlyonceerrorhandler.cpp
+++ b/src/main/cpp/onlyonceerrorhandler.cpp
@@ -41,9 +41,11 @@ void OnlyOnceErrorHandler::setLogger(const LoggerPtr&)
 {
 }
 
+#if LOG4CXX_ABI_VERSION <= 15
 void OnlyOnceErrorHandler::activateOptions(Pool&)
 {
 }
+#endif
 
 void OnlyOnceErrorHandler::setOption(const LogString&, const LogString&)
 {
diff --git a/src/main/cpp/optionhandler.cpp b/src/main/cpp/optionhandler.cpp
index 54be38e9..5c482456 100644
--- a/src/main/cpp/optionhandler.cpp
+++ b/src/main/cpp/optionhandler.cpp
@@ -16,18 +16,20 @@
  */
 #include <log4cxx/spi/optionhandler.h>
 #include <log4cxx/helpers/pool.h>
+#include <log4cxx/helpers/exception.h>
 
 using namespace LOG4CXX_NS;
-using namespace LOG4CXX_NS::helpers;
-
-void spi::OptionHandler::activateOptions(Pool&)
-{
-}
 
+#if LOG4CXX_ABI_VERSION <= 15
 void spi::OptionHandler::activateOptions()
 {
        // Ensure any ABI 15 overriden activateOptions is invoked
-        helpers::Pool p;
-        activateOptions(p);
+       helpers::Pool p;
+       activateOptions(p);
 }
-
+#else
+void spi::OptionHandler::activateOptions(helpers::Pool&)
+{
+       throw helpers::Exception("Missing activateOptions() override 
implementation");
+}
+#endif
diff --git a/src/main/cpp/patternlayout.cpp b/src/main/cpp/patternlayout.cpp
index 6a29183d..9fdc0034 100644
--- a/src/main/cpp/patternlayout.cpp
+++ b/src/main/cpp/patternlayout.cpp
@@ -100,8 +100,7 @@ Constructs a PatternLayout using the supplied conversion 
pattern.
 PatternLayout::PatternLayout(const LogString& pattern) :
        m_priv(std::make_unique<PatternLayoutPrivate>(pattern))
 {
-       Pool pool;
-       activateOptions(pool);
+       activateOptions();
 }
 
 PatternLayout::~PatternLayout() {}
@@ -109,8 +108,7 @@ PatternLayout::~PatternLayout() {}
 void PatternLayout::setConversionPattern(const LogString& pattern)
 {
        m_priv->conversionPattern = pattern;
-       Pool pool;
-       activateOptions(pool);
+       activateOptions();
 }
 
 void PatternLayout::format(LogString& output,
@@ -170,7 +168,7 @@ void PatternLayout::setOption(const LogString& option, 
const LogString& value)
        }
 }
 
-void PatternLayout::activateOptions(Pool&)
+void PatternLayout::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        LogString pat(m_priv->conversionPattern);
 
diff --git a/src/main/cpp/propertysetter.cpp b/src/main/cpp/propertysetter.cpp
index bc1a028b..e8866669 100644
--- a/src/main/cpp/propertysetter.cpp
+++ b/src/main/cpp/propertysetter.cpp
@@ -104,6 +104,6 @@ void PropertySetter::activate(Pool& p)
        if (obj != 0 && obj->instanceof(OptionHandler::getStaticClass()))
        {
                OptionHandlerPtr handler = LOG4CXX_NS::cast<OptionHandler>(obj);
-               handler->activateOptions(p);
+               handler->activateOptions();
        }
 }
diff --git a/src/main/cpp/rollingfileappender.cpp 
b/src/main/cpp/rollingfileappender.cpp
index b9b38bab..463628ad 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -175,46 +175,56 @@ void RollingFileAppender::setDatePattern(const LogString& 
newPattern)
 /**
  * Prepare instance of use.
  */
-void RollingFileAppender::activateOptions(Pool& p)
+void RollingFileAppender::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
-       if (!_priv->rollingPolicy)
+       if (_priv->activateOptions())
+       {
+               FileAppender::activateOptionsInternal();
+       }
+}
+
+bool RollingFileAppender::RollingFileAppenderPriv::activateOptions()
+{
+       bool result = false;
+       if (!this->rollingPolicy)
        {
                LogLog::warn(LOG4CXX_STR("No rolling policy configured for the 
appender named [")
-                       + _priv->name + LOG4CXX_STR("]."));
+                       + this->name + LOG4CXX_STR("]."));
                auto fwrp = std::make_shared<FixedWindowRollingPolicy>();
-               fwrp->setFileNamePattern(getFile() + LOG4CXX_STR(".%i"));
-               _priv->rollingPolicy = fwrp;
+               fwrp->setFileNamePattern(this->fileName + LOG4CXX_STR(".%i"));
+               this->rollingPolicy = fwrp;
        }
 
        //
        //  if no explicit triggering policy and rolling policy is both.
        //
-       if (!_priv->triggeringPolicy)
+       if (!this->triggeringPolicy)
        {
-               TriggeringPolicyPtr trig = 
LOG4CXX_NS::cast<TriggeringPolicy>(_priv->rollingPolicy);
+               TriggeringPolicyPtr trig = 
LOG4CXX_NS::cast<TriggeringPolicy>(this->rollingPolicy);
 
                if (trig != NULL)
                {
-                       _priv->triggeringPolicy = trig;
+                       this->triggeringPolicy = trig;
                }
        }
 
-       if (!_priv->triggeringPolicy)
+       if (!this->triggeringPolicy)
        {
                LogLog::warn(LOG4CXX_STR("No triggering policy configured for 
the appender named [")
-                       + _priv->name + LOG4CXX_STR("]."));
-               _priv->triggeringPolicy = 
std::make_shared<SizeBasedTriggeringPolicy>();
+                       + this->name + LOG4CXX_STR("]."));
+               this->triggeringPolicy = 
std::make_shared<SizeBasedTriggeringPolicy>();
        }
 
        {
-               std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
-               _priv->triggeringPolicy->activateOptions(p);
-               _priv->rollingPolicy->activateOptions(p);
+               std::lock_guard<std::recursive_mutex> lock(this->mutex);
+               this->triggeringPolicy->activateOptions();
+               this->rollingPolicy->activateOptions();
+               Pool p;
 
                try
                {
                        RolloverDescriptionPtr rollover1 =
-                               _priv->rollingPolicy->initialize(getFile(), 
getAppend(), p);
+                               this->rollingPolicy->initialize(this->fileName, 
this->fileAppend, p);
 
                        if (rollover1 != NULL)
                        {
@@ -225,8 +235,8 @@ void RollingFileAppender::activateOptions(Pool& p)
                                        syncAction->execute(p);
                                }
 
-                               _priv->fileName = 
rollover1->getActiveFileName();
-                               _priv->fileAppend = rollover1->getAppend();
+                               this->fileName = rollover1->getActiveFileName();
+                               this->fileAppend = rollover1->getAppend();
 
                                //
                                //  async action not yet implemented
@@ -240,24 +250,25 @@ void RollingFileAppender::activateOptions(Pool& p)
                        }
 
                        File activeFile;
-                       activeFile.setPath(getFile());
+                       activeFile.setPath(this->fileName);
 
-                       if (getAppend())
+                       if (this->fileAppend)
                        {
-                               _priv->fileLength = activeFile.length();
+                               this->fileLength = activeFile.length();
                        }
                        else
                        {
-                               _priv->fileLength = 0;
+                               this->fileLength = 0;
                        }
 
-                       FileAppender::activateOptionsInternal(p);
+                       result = true;
                }
                catch (std::exception& ex)
                {
-                       LogLog::warn(LOG4CXX_STR("Exception activating 
RollingFileAppender ") + getName(), ex);
+                       LogLog::warn(LOG4CXX_STR("Exception activating 
RollingFileAppender ") + this->fileName, ex);
                }
        }
+       return result;
 }
 
 /**
@@ -349,14 +360,14 @@ bool RollingFileAppender::rolloverInternal(Pool& p)
                                                                        }
                                                                }
                                                        }
-                                                       
setFileInternal(rollover1->getActiveFileName(), appendToExisting, 
_priv->bufferedIO, _priv->bufferSize, p);
+                                                       
setFileInternal(rollover1->getActiveFileName(), appendToExisting, 
_priv->bufferedIO, _priv->bufferSize);
                                                }
                                                else
                                                {
                                                        _priv->close();
                                                        
setFileInternal(rollover1->getActiveFileName());
                                                        // Call activateOptions 
to create any intermediate directories(if required)
-                                                       
FileAppender::activateOptionsInternal(p);
+                                                       
FileAppender::activateOptionsInternal();
                                                        OutputStreamPtr os = 
std::make_shared<FileOutputStream>
                                                                        ( 
rollover1->getActiveFileName()
                                                                        , 
rollover1->getAppend()
diff --git a/src/main/cpp/rollingpolicybase.cpp 
b/src/main/cpp/rollingpolicybase.cpp
index 8401da21..10847682 100644
--- a/src/main/cpp/rollingpolicybase.cpp
+++ b/src/main/cpp/rollingpolicybase.cpp
@@ -47,20 +47,16 @@ RollingPolicyBase::~RollingPolicyBase()
 {
 }
 
-#if 15 < LOG4CXX_ABI_VERSION
-void RollingPolicyBase::activateOptions()
+void RollingPolicyBase::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS  )
 {
-       // Ensure any ABI 15 overriden activateOptions is invoked
-        helpers::Pool p;
-        activateOptions(p);
+       m_priv->activateOptions(getFormatSpecifiers());
 }
-#endif
 
-void RollingPolicyBase::activateOptions(LOG4CXX_NS::helpers::Pool& /* pool */)
+void RollingPolicyBase::RollingPolicyBasePrivate::activateOptions(const 
pattern::PatternMap& map)
 {
-       if (m_priv->fileNamePatternStr.length() > 0)
+       if (this->fileNamePatternStr.length() > 0)
        {
-               parseFileNamePattern();
+               this->parseFileNamePattern(map);
        }
        else
        {
@@ -104,7 +100,12 @@ LogString RollingPolicyBase::getFileNamePattern() const
  */
 void RollingPolicyBase::parseFileNamePattern()
 {
-       m_priv->patternConverters = 
PatternParser::parse(m_priv->fileNamePatternStr, getFormatSpecifiers());
+       m_priv->parseFileNamePattern(getFormatSpecifiers());
+}
+
+void RollingPolicyBase::RollingPolicyBasePrivate::parseFileNamePattern(const 
pattern::PatternMap& map)
+{
+       this->patternConverters = 
PatternParser::parse(this->fileNamePatternStr, map);
 }
 
 /**
diff --git a/src/main/cpp/sizebasedtriggeringpolicy.cpp 
b/src/main/cpp/sizebasedtriggeringpolicy.cpp
index 64788fa7..61c7faee 100644
--- a/src/main/cpp/sizebasedtriggeringpolicy.cpp
+++ b/src/main/cpp/sizebasedtriggeringpolicy.cpp
@@ -48,7 +48,7 @@ void SizeBasedTriggeringPolicy::setMaxFileSize(size_t l)
        maxFileSize = l;
 }
 
-void SizeBasedTriggeringPolicy::activateOptions(Pool& /* p */)
+void SizeBasedTriggeringPolicy::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
 }
 
diff --git a/src/main/cpp/smtpappender.cpp b/src/main/cpp/smtpappender.cpp
index 1165f2e0..552e51a9 100644
--- a/src/main/cpp/smtpappender.cpp
+++ b/src/main/cpp/smtpappender.cpp
@@ -586,51 +586,39 @@ bool SMTPAppender::asciiCheck(const LogString& value, 
const LogString& field)
 /**
 Activate the specified options, such as the smtp host, the
 recipient, from, etc. */
-void SMTPAppender::activateOptions(Pool& p)
+void SMTPAppender::activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS 
)
 {
-       bool activate = true;
-
        if (_priv->layout == 0)
        {
                _priv->errorHandler->error(LOG4CXX_STR("No layout set for 
appender named [") + _priv->name + LOG4CXX_STR("]."));
-               activate = false;
        }
 
        if (_priv->evaluator == 0)
        {
                _priv->errorHandler->error(LOG4CXX_STR("No 
TriggeringEventEvaluator is set for appender [") +
                        _priv->name + LOG4CXX_STR("]."));
-               activate = false;
        }
 
        if (_priv->smtpHost.empty())
        {
                _priv->errorHandler->error(LOG4CXX_STR("No smtpHost is set for 
appender [") +
                        _priv->name + LOG4CXX_STR("]."));
-               activate = false;
        }
 
        if (_priv->to.empty() && _priv->cc.empty() && _priv->bcc.empty())
        {
                _priv->errorHandler->error(LOG4CXX_STR("No recipient address is 
set for appender [") +
                        _priv->name + LOG4CXX_STR("]."));
-               activate = false;
        }
 
-       activate &= asciiCheck(_priv->to, LOG4CXX_STR("to"));
-       activate &= asciiCheck(_priv->cc, LOG4CXX_STR("cc"));
-       activate &= asciiCheck(_priv->bcc, LOG4CXX_STR("bcc"));
-       activate &= asciiCheck(_priv->from, LOG4CXX_STR("from"));
+       asciiCheck(_priv->to, LOG4CXX_STR("to"));
+       asciiCheck(_priv->cc, LOG4CXX_STR("cc"));
+       asciiCheck(_priv->bcc, LOG4CXX_STR("bcc"));
+       asciiCheck(_priv->from, LOG4CXX_STR("from"));
 
 #if !LOG4CXX_HAVE_LIBESMTP
        _priv->errorHandler->error(LOG4CXX_STR("log4cxx built without SMTP 
support."));
-       activate = false;
 #endif
-
-       if (activate)
-       {
-               AppenderSkeleton::activateOptions(p);
-       }
 }
 
 /**
diff --git a/src/main/cpp/socketappenderskeleton.cpp 
b/src/main/cpp/socketappenderskeleton.cpp
index 613038cf..930a74f4 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -60,10 +60,10 @@ SocketAppenderSkeleton::~SocketAppenderSkeleton()
 {
 }
 
-void SocketAppenderSkeleton::activateOptions(Pool& p)
+void SocketAppenderSkeleton::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
-       AppenderSkeleton::activateOptions(p);
-       connect(p);
+       Pool my_pool;
+       connect(my_pool);
 }
 
 void SocketAppenderSkeleton::close()
diff --git a/src/main/cpp/syslogappender.cpp b/src/main/cpp/syslogappender.cpp
index 52950cc2..64581aa3 100644
--- a/src/main/cpp/syslogappender.cpp
+++ b/src/main/cpp/syslogappender.cpp
@@ -367,9 +367,11 @@ void SyslogAppender::append(const spi::LoggingEventPtr& 
event, Pool& p)
        }
 }
 
+#if 15 < LOG4CXX_ABI_VERSION
 void SyslogAppender::activateOptions(Pool&)
 {
 }
+#endif
 
 void SyslogAppender::setOption(const LogString& option, const LogString& value)
 {
diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp
index d196f29e..e0ddda5c 100644
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@ -122,7 +122,7 @@ TelnetAppender::~TelnetAppender()
                _priv->close();
 }
 
-void TelnetAppender::activateOptions(Pool& /* p */)
+void TelnetAppender::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        if (_priv->serverSocket == NULL)
        {
diff --git a/src/main/cpp/timebasedrollingpolicy.cpp 
b/src/main/cpp/timebasedrollingpolicy.cpp
index 1abeacbe..96893227 100644
--- a/src/main/cpp/timebasedrollingpolicy.cpp
+++ b/src/main/cpp/timebasedrollingpolicy.cpp
@@ -267,16 +267,7 @@ TimeBasedRollingPolicy::TimeBasedRollingPolicy() :
 
 TimeBasedRollingPolicy::~TimeBasedRollingPolicy(){}
 
-#if 15 < LOG4CXX_ABI_VERSION
-void TimeBasedRollingPolicy::activateOptions()
-{
-       // Ensure any ABI 15 overriden activateOptions is invoked
-       Pool p;
-       activateOptions(p);
-}
-#endif
-
-void TimeBasedRollingPolicy::activateOptions(LOG4CXX_NS::helpers::Pool& pool)
+void TimeBasedRollingPolicy::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
        // find out period from the filename pattern
        if (getFileNamePattern().length() > 0)
@@ -297,6 +288,7 @@ void 
TimeBasedRollingPolicy::activateOptions(LOG4CXX_NS::helpers::Pool& pool)
                throw NullPointerException(LOG4CXX_STR("DatePatternConverter"));
        }
 
+       Pool pool;
        LogString buf;
        ObjectPtr obj = std::make_shared<Date>();
        formatFileName(obj, buf, pool);
diff --git a/src/main/cpp/triggeringpolicy.cpp 
b/src/main/cpp/triggeringpolicy.cpp
index fb01ee79..84b54b97 100644
--- a/src/main/cpp/triggeringpolicy.cpp
+++ b/src/main/cpp/triggeringpolicy.cpp
@@ -26,16 +26,3 @@ IMPLEMENT_LOG4CXX_OBJECT(TriggeringPolicy)
 TriggeringPolicy::~TriggeringPolicy()
 {
 }
-
-#if 15 < LOG4CXX_ABI_VERSION
-void TriggeringPolicy::activateOptions(Pool&)
-{
-}
-
-void TriggeringPolicy::activateOptions()
-{
-       // Ensure any ABI 15 overriden activateOptions is invoked
-        helpers::Pool p;
-        activateOptions(p);
-}
-#endif
\ No newline at end of file
diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp
index 3606c0e9..f86c1b7f 100644
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@ -52,8 +52,7 @@ WriterAppender::WriterAppender(const LayoutPtr& layout)
 WriterAppender::WriterAppender(const LayoutPtr& layout, const 
helpers::WriterPtr& writer)
        : AppenderSkeleton(std::make_unique<WriterAppenderPriv>(layout, writer))
 {
-       Pool p;
-       activateOptions(p);
+       activateOptions();
 }
 #endif
 
@@ -69,34 +68,26 @@ WriterAppender::~WriterAppender()
                _priv->close();
 }
 
-void WriterAppender::activateOptions(Pool& p)
+void WriterAppender::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS )
 {
-       int errors = 0;
-
-       if (_priv->layout == 0)
-       {
-               _priv->errorHandler->error(
-                       ((LogString) LOG4CXX_STR("No layout set for the 
appender named ["))
-                       + _priv->name + LOG4CXX_STR("]."));
-               errors++;
-       }
+       _priv->activateOptions();
+}
 
-       if (_priv->writer == 0)
+void WriterAppender::WriterAppenderPriv::activateOptions()
+{
+       if (this->layout == 0)
        {
-               _priv->errorHandler->error(
-                       ((LogString) LOG4CXX_STR("No writer set for the 
appender named ["))
-                       + _priv->name + LOG4CXX_STR("]."));
-               errors++;
+               this->errorHandler->error(LOG4CXX_STR("No layout set for the 
appender named [")
+                       + this->name + LOG4CXX_STR("]."));
        }
 
-       if (errors == 0)
+       if (this->writer == 0)
        {
-               AppenderSkeleton::activateOptions(p);
+               this->errorHandler->error(LOG4CXX_STR("No writer set for the 
appender named [")
+                       + this->name + LOG4CXX_STR("]."));
        }
 }
 
-
-
 void WriterAppender::append(const spi::LoggingEventPtr& event, Pool& pool1)
 {
 
diff --git a/src/main/cpp/xmlsocketappender.cpp 
b/src/main/cpp/xmlsocketappender.cpp
index df4bd4e5..55ccb035 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -72,16 +72,14 @@ XMLSocketAppender::XMLSocketAppender(InetAddressPtr 
address1, int port1)
        : 
SocketAppenderSkeleton(std::make_unique<XMLSocketAppenderPriv>(address1, port1, 
DEFAULT_RECONNECTION_DELAY))
 {
        _priv->layout = std::make_shared<XMLLayout>();
-       Pool p;
-       activateOptions(p);
+       activateOptions();
 }
 
 XMLSocketAppender::XMLSocketAppender(const LogString& host, int port1)
        : SocketAppenderSkeleton(std::make_unique<XMLSocketAppenderPriv>(host, 
port1, DEFAULT_RECONNECTION_DELAY))
 {
        _priv->layout = std::make_shared<XMLLayout>();
-       Pool p;
-       activateOptions(p);
+       activateOptions();
 }
 
 XMLSocketAppender::~XMLSocketAppender()
diff --git a/src/main/include/log4cxx/appenderskeleton.h 
b/src/main/include/log4cxx/appenderskeleton.h
index e7492f9d..585532c3 100644
--- a/src/main/include/log4cxx/appenderskeleton.h
+++ b/src/main/include/log4cxx/appenderskeleton.h
@@ -82,32 +82,16 @@ class LOG4CXX_EXPORT AppenderSkeleton :
                [[ deprecated( "The derived appender destructor needs to 
implement its cleanup" ) ]]
                void finalize();
 #endif
-#if LOG4CXX_ABI_VERSION <= 15
-               /**
-               \copybrief spi::OptionHandler::activateOptions()
 
-               No action is performed in this implementation.
-
-               @deprecated The \c pool parameter is not required and will be 
removed in a future version.
-               */
-               void activateOptions(helpers::Pool& pool) override;
-#else
+               using spi::OptionHandler::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
 
-               @deprecated This function is deprecated and will be removed in 
a future version.
-               */
-               [[deprecated("Override activateOptions() without parameters 
instead")]]
-               void activateOptions(helpers::Pool& ) override;
-               /**
-               \copybrief spi::OptionHandler::activateOptions()
-
-               No action is performed in this implementation.
+               @deprecated The \c pool parameter is not required and will be 
removed in a future version.
                */
-               void activateOptions() override;
-#endif
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/consoleappender.h 
b/src/main/include/log4cxx/consoleappender.h
index 328ea809..c1a98610 100644
--- a/src/main/include/log4cxx/consoleappender.h
+++ b/src/main/include/log4cxx/consoleappender.h
@@ -82,12 +82,13 @@ class LOG4CXX_EXPORT ConsoleAppender : public WriterAppender
                */
                LogString getTarget() const;
 
+               using WriterAppender::activateOptions;
                /**
                \copybrief WriterAppender::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
                /**
                \copybrief WriterAppender::setOption()
 
diff --git a/src/main/include/log4cxx/db/dbappender.h 
b/src/main/include/log4cxx/db/dbappender.h
index d7d494d6..163da909 100644
--- a/src/main/include/log4cxx/db/dbappender.h
+++ b/src/main/include/log4cxx/db/dbappender.h
@@ -141,7 +141,7 @@ class LOG4CXX_EXPORT DBAppender : public AppenderSkeleton
                 /**
                 Activate the specified options.
                 */
-                void activateOptions(helpers::Pool& p) override;
+                void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                 /**
                 * Adds the event to the buffer.  When full the buffer is 
flushed.
diff --git a/src/main/include/log4cxx/db/odbcappender.h 
b/src/main/include/log4cxx/db/odbcappender.h
index 1cddc8d1..5d4de206 100644
--- a/src/main/include/log4cxx/db/odbcappender.h
+++ b/src/main/include/log4cxx/db/odbcappender.h
@@ -179,7 +179,7 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
                /**
                Activate the specified options.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                * Adds the event to the buffer.  When full the buffer is 
flushed.
diff --git a/src/main/include/log4cxx/fileappender.h 
b/src/main/include/log4cxx/fileappender.h
index 48d01c6c..1649c0da 100644
--- a/src/main/include/log4cxx/fileappender.h
+++ b/src/main/include/log4cxx/fileappender.h
@@ -114,8 +114,9 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
                /** Returns the value of the <b>File</b> option. */
                LogString getFile() const;
 
+               using WriterAppender::activateOptions;
                /**
-               \copybrief AppenderSkeleton::activateOptions()
+               \copybrief WriterAppender::activateOptions()
 
                Sets and <i>opens</i> the file where the log output will
                go. The specified file must be writable.
@@ -123,7 +124,7 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
                If there was already an opened file, then the previous file
                is closed first.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief AppenderSkeleton::setOption()
@@ -218,7 +219,7 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
                static LogString stripDuplicateBackslashes(const LogString& 
name);
 
        protected:
-               void activateOptionsInternal(helpers::Pool& p);
+               void activateOptionsInternal();
 
                /**
                Sets and <i>opens</i> the file where the log output will
@@ -238,14 +239,18 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
                truncate fileName.
                @param bufferedIO Do we do bufferedIO?
                @param bufferSize How big should the IO buffer be?
-               @param p memory pool for operation.
                */
                void setFileInternal(const LogString& file, bool append,
-                       bool bufferedIO, size_t bufferSize,
-                       helpers::Pool& p);
+                       bool bufferedIO, size_t bufferSize);
 
                void setFileInternal(const LogString& file);
 
+#if LOG4CXX_ABI_VERSION <= 15
+               void activateOptionsInternal(helpers::Pool& p);
+               void setFileInternal(const LogString& file, bool append,
+                       bool bufferedIO, size_t bufferSize,
+                       helpers::Pool& p);
+#endif
        private:
                FileAppender(const FileAppender&);
                FileAppender& operator=(const FileAppender&);
diff --git a/src/main/include/log4cxx/filter/expressionfilter.h 
b/src/main/include/log4cxx/filter/expressionfilter.h
index 73548eae..591c09db 100644
--- a/src/main/include/log4cxx/filter/expressionfilter.h
+++ b/src/main/include/log4cxx/filter/expressionfilter.h
@@ -94,7 +94,7 @@ class LOG4CXX_EXPORT ExpressionFilter: public 
LOG4CXX_NS::spi::Filter
 
                ExpressionFilter();
 
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                void setExpression(const LogString& expression);
 
diff --git a/src/main/include/log4cxx/fmtlayout.h 
b/src/main/include/log4cxx/fmtlayout.h
index fdcd386d..920a1521 100644
--- a/src/main/include/log4cxx/fmtlayout.h
+++ b/src/main/include/log4cxx/fmtlayout.h
@@ -255,12 +255,13 @@ class LOG4CXX_EXPORT FMTLayout : public Layout
                        return true;
                }
 
+               using Layout::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
-               No action is performed in this implementation.
+               Calculates the length of the formtted output.
                */
-               void activateOptions(helpers::Pool& /* p */) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h 
b/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
index 21111668..7725f21e 100644
--- a/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
+++ b/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
@@ -64,13 +64,14 @@ class LOG4CXX_EXPORT OnlyOnceErrorHandler :
                void setLogger(const LoggerPtr& logger) override;
 
 
+#if LOG4CXX_ABI_VERSION <= 15
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
                void activateOptions(helpers::Pool& p) override;
-
+#endif
                /**
                \copybrief spi::OptionHandler::setOption()
 
diff --git a/src/main/include/log4cxx/htmllayout.h 
b/src/main/include/log4cxx/htmllayout.h
index 0f72225f..45b8a0e5 100644
--- a/src/main/include/log4cxx/htmllayout.h
+++ b/src/main/include/log4cxx/htmllayout.h
@@ -78,13 +78,14 @@ class LOG4CXX_EXPORT HTMLLayout : public Layout
                */
                LogString getContentType() const override;
 
+#if LOG4CXX_ABI_VERSION <= 15
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool& /* p */) override {}
-
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override {}
+#endif
                /**
                \copybrief spi::OptionHandler::setOption()
 
diff --git a/src/main/include/log4cxx/jsonlayout.h 
b/src/main/include/log4cxx/jsonlayout.h
index 31e47c14..7d561f77 100644
--- a/src/main/include/log4cxx/jsonlayout.h
+++ b/src/main/include/log4cxx/jsonlayout.h
@@ -100,12 +100,13 @@ class LOG4CXX_EXPORT JSONLayout : public Layout
                */
                LogString getContentType() const override;
 
+               using Layout::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
-               No action is performed in this implementation.
+               Calculates the length of the formtted output.
                */
-               void activateOptions(helpers::Pool& /* p */) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/layout.h 
b/src/main/include/log4cxx/layout.h
index 33cc2ca0..26100868 100644
--- a/src/main/include/log4cxx/layout.h
+++ b/src/main/include/log4cxx/layout.h
@@ -76,23 +76,13 @@ class LOG4CXX_EXPORT Layout :
                */
                virtual bool ignoresThrowable() const = 0;
 
-#if 15 < LOG4CXX_ABI_VERSION
+               using spi::OptionHandler::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions() override;
-
-               /**
-               \copybrief spi::OptionHandler::activateOptions()
-
-               No action is performed in this implementation.
-               @deprecated This function is deprecated and will be removed in 
a future version.
-               */
-               [[deprecated("Override activateOptions() without parameters 
instead")]]
-               void activateOptions(helpers::Pool& ) override;
-#endif
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
        protected:
                /**
diff --git a/src/main/include/log4cxx/net/smtpappender.h 
b/src/main/include/log4cxx/net/smtpappender.h
index e9059ee1..f108bec9 100644
--- a/src/main/include/log4cxx/net/smtpappender.h
+++ b/src/main/include/log4cxx/net/smtpappender.h
@@ -141,7 +141,7 @@ class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
                <li>a non-ascii character is detected where not permitted</li>
                </ul>.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                Perform SMTPAppender specific appending actions, mainly adding
diff --git a/src/main/include/log4cxx/net/socketappenderskeleton.h 
b/src/main/include/log4cxx/net/socketappenderskeleton.h
index 5608d24b..afb0c530 100644
--- a/src/main/include/log4cxx/net/socketappenderskeleton.h
+++ b/src/main/include/log4cxx/net/socketappenderskeleton.h
@@ -51,12 +51,13 @@ class LOG4CXX_EXPORT SocketAppenderSkeleton : public 
AppenderSkeleton
                */
                SocketAppenderSkeleton(const LogString& host, int port, int 
reconnectionDelay);
 
+               using spi::OptionHandler::activateOptions;
                /**
                \copybrief AppenderSkeleton::activateOptions()
 
                Connects to the specified <b>RemoteHost</b> and <b>Port</b>.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                void close() override;
 
diff --git a/src/main/include/log4cxx/net/syslogappender.h 
b/src/main/include/log4cxx/net/syslogappender.h
index e4c2e808..9faf1d42 100644
--- a/src/main/include/log4cxx/net/syslogappender.h
+++ b/src/main/include/log4cxx/net/syslogappender.h
@@ -75,13 +75,14 @@ class LOG4CXX_EXPORT SyslogAppender : public 
AppenderSkeleton
 
                void append(const spi::LoggingEventPtr& event, helpers::Pool& 
p) override;
 
+#if 15 < LOG4CXX_ABI_VERSION
                /**
                \copybrief AppenderSkeleton::activateOptions()
 
                No action is performed in this implementation.
                */
                void activateOptions(helpers::Pool& p) override;
-
+#endif
                /**
                \copybrief AppenderSkeleton::setOption()
 
diff --git a/src/main/include/log4cxx/net/telnetappender.h 
b/src/main/include/log4cxx/net/telnetappender.h
index 3f6427e1..e52bb6c9 100644
--- a/src/main/include/log4cxx/net/telnetappender.h
+++ b/src/main/include/log4cxx/net/telnetappender.h
@@ -84,12 +84,13 @@ class LOG4CXX_EXPORT TelnetAppender : public 
AppenderSkeleton
                void setEncoding(const LogString& value);
 
 
+               using AppenderSkeleton::activateOptions;
                /**
                \copybrief AppenderSkeleton::activateOptions()
 
                Create the socket handler and wait for connections.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
 
                /**
diff --git a/src/main/include/log4cxx/net/xmlsocketappender.h 
b/src/main/include/log4cxx/net/xmlsocketappender.h
index 0c9d8379..5985611c 100644
--- a/src/main/include/log4cxx/net/xmlsocketappender.h
+++ b/src/main/include/log4cxx/net/xmlsocketappender.h
@@ -133,6 +133,7 @@ class LOG4CXX_EXPORT XMLSocketAppender : public 
SocketAppenderSkeleton
                */
                XMLSocketAppender(const LogString& host, int port);
 
+               using SocketAppenderSkeleton::activateOptions;
 
        protected:
                void setSocket(LOG4CXX_NS::helpers::SocketPtr& socket, 
helpers::Pool& p) override;
diff --git a/src/main/include/log4cxx/nt/nteventlogappender.h 
b/src/main/include/log4cxx/nt/nteventlogappender.h
index dc998708..3f755fa4 100644
--- a/src/main/include/log4cxx/nt/nteventlogappender.h
+++ b/src/main/include/log4cxx/nt/nteventlogappender.h
@@ -42,12 +42,13 @@ class LOG4CXX_EXPORT NTEventLogAppender : public 
AppenderSkeleton
 
                virtual ~NTEventLogAppender();
 
+               using spi::OptionHandler::activateOptions;
                /**
                \copybrief AppenderSkeleton::activateOptions()
 
                Calls <a 
href="https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-registereventsourcew";>RegisterEventSource</a>.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
                void close() override;
 
                /**
diff --git a/src/main/include/log4cxx/patternlayout.h 
b/src/main/include/log4cxx/patternlayout.h
index e11917bf..98820118 100644
--- a/src/main/include/log4cxx/patternlayout.h
+++ b/src/main/include/log4cxx/patternlayout.h
@@ -479,12 +479,13 @@ class LOG4CXX_EXPORT PatternLayout : public Layout
                 */
                LogString getConversionPattern() const;
 
+               using Layout::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                Calls createPatternParser
                 */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/private/rollingfileappender_priv.h 
b/src/main/include/log4cxx/private/rollingfileappender_priv.h
index c857594a..f2c6e9a8 100644
--- a/src/main/include/log4cxx/private/rollingfileappender_priv.h
+++ b/src/main/include/log4cxx/private/rollingfileappender_priv.h
@@ -51,6 +51,8 @@ struct RollingFileAppender::RollingFileAppenderPriv : public 
FileAppenderPriv
         *  save the loggingevent
         */
        spi::LoggingEventPtr _event;
+
+       bool activateOptions();
 };
 
 } // namespace rolling
diff --git a/src/main/include/log4cxx/private/rollingpolicybase_priv.h 
b/src/main/include/log4cxx/private/rollingpolicybase_priv.h
index 467fa448..0b2fe632 100644
--- a/src/main/include/log4cxx/private/rollingpolicybase_priv.h
+++ b/src/main/include/log4cxx/private/rollingpolicybase_priv.h
@@ -41,6 +41,10 @@ struct RollingPolicyBase::RollingPolicyBasePrivate {
     LogString fileNamePatternStr;
 
        bool createIntermediateDirectories = true;
+
+       void activateOptions(const pattern::PatternMap& map);
+
+       void parseFileNamePattern(const pattern::PatternMap& map);
 };
 
 }
diff --git a/src/main/include/log4cxx/private/writerappender_priv.h 
b/src/main/include/log4cxx/private/writerappender_priv.h
index 348f2124..7ba57d29 100644
--- a/src/main/include/log4cxx/private/writerappender_priv.h
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -105,6 +105,8 @@ struct WriterAppender::WriterAppenderPriv : public 
AppenderSkeleton::AppenderSke
                std::lock_guard<std::recursive_mutex> lock(this->mutex);
                this->writer = newWriter;
        }
+
+       void activateOptions();
 };
 
 }
diff --git a/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h 
b/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h
index 8ff908ee..e60bcd6f 100644
--- a/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h
@@ -100,12 +100,13 @@ class LOG4CXX_EXPORT FilterBasedTriggeringPolicy : public 
TriggeringPolicy
                 */
                spi::FilterPtr& getFilter();
 
+               using TriggeringPolicy::activateOptions;
                /**
-               \copybrief spi::OptionHandler::activateOptions()
+               \copybrief TriggeringPolicy::activateOptions()
 
                Activates all attached filters.
                 */
-               void activateOptions(helpers::Pool&) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h 
b/src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h
index 13e54da4..b0beca77 100644
--- a/src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h
@@ -90,6 +90,7 @@ class LOG4CXX_EXPORT FixedWindowRollingPolicy : public 
RollingPolicyBase
                FixedWindowRollingPolicy();
                ~FixedWindowRollingPolicy();
 
+               using RollingPolicyBase::activateOptions;
                /**
                \copybrief RollingPolicyBase::activateOptions()
 
@@ -97,7 +98,7 @@ class LOG4CXX_EXPORT FixedWindowRollingPolicy : public 
RollingPolicyBase
 
                \sa RollingPolicyBase::activateOptions()
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief RollingPolicyBase::setOption()
diff --git a/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h 
b/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h
index abdffdf0..e7fe90fc 100644
--- a/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h
@@ -67,12 +67,13 @@ class LOG4CXX_EXPORT ManualTriggeringPolicy : public 
TriggeringPolicy
                        const LogString& filename,
                        size_t fileLength) override;
 
+               using TriggeringPolicy::activateOptions;
                /**
-               \copybrief spi::OptionHandler::activateOptions()
+               \copybrief TriggeringPolicy::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool&) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h 
b/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
index c1b38a84..7ce9d8c5 100644
--- a/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/multiprocessrollingfileappender.h
@@ -56,7 +56,7 @@ class LOG4CXX_EXPORT MultiprocessRollingFileAppender : public 
RollingFileAppende
 
                \sa FileAppender::activateOptions()
                */
-               void activateOptions(helpers::Pool& pool ) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                   Implements the usual roll over behaviour.
diff --git a/src/main/include/log4cxx/rolling/rollingfileappender.h 
b/src/main/include/log4cxx/rolling/rollingfileappender.h
index e34916a3..a6353dd1 100644
--- a/src/main/include/log4cxx/rolling/rollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/rollingfileappender.h
@@ -147,12 +147,13 @@ class LOG4CXX_EXPORT RollingFileAppender : public 
FileAppender
                */
                void setOption( const LogString& option, const LogString& value 
) override;
 
+               using spi::OptionHandler::activateOptions;
                /**
                \copybrief FileAppender::activateOptions()
 
                \sa FileAppender::activateOptions()
                */
-               void activateOptions(helpers::Pool& pool ) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                   Implements the configured roll over behaviour.
diff --git a/src/main/include/log4cxx/rolling/rollingpolicybase.h 
b/src/main/include/log4cxx/rolling/rollingpolicybase.h
index f228c59f..d81ae3c6 100644
--- a/src/main/include/log4cxx/rolling/rollingpolicybase.h
+++ b/src/main/include/log4cxx/rolling/rollingpolicybase.h
@@ -56,23 +56,13 @@ class LOG4CXX_EXPORT RollingPolicyBase :
                RollingPolicyBase();
                virtual ~RollingPolicyBase();
 
-               /**
-               \copybrief RollingPolicy::activateOptions()
-
-               Logs a warning if FileNamePattern is not set.
-
-               \sa RollingPolicy::activateOptions()
-               */
-
-#if 15 < LOG4CXX_ABI_VERSION
+               using spi::OptionHandler::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
-               No action is performed in this implementation.
+               Converts the file name pattern to a collection of formaters.
                */
-               void activateOptions() override;
-#endif
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS  ) override;
 
                /**
                A map from a name to the object implementing the (date or 
index) formatting.
diff --git a/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h 
b/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h
index f26effc5..11f50597 100644
--- a/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h
@@ -74,12 +74,13 @@ class LOG4CXX_EXPORT SizeBasedTriggeringPolicy : public 
TriggeringPolicy
 
                void setMaxFileSize(size_t l);
 
+               using TriggeringPolicy::activateOptions;
                /**
-               \copybrief spi::OptionHandler::activateOptions()
+               \copybrief TriggeringPolicy::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool&) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
@@ -89,9 +90,9 @@ class LOG4CXX_EXPORT SizeBasedTriggeringPolicy : public 
TriggeringPolicy
                MaxFileSize | (\ref fileSize "1") | 10 MB |
 
                \anchor fileSize (1) An integer in the range 0 - 2^63.
-                You can specify the value with the suffixes "KB", "MB" or "GB" 
so that the integer is
-                interpreted being expressed respectively in kilobytes, 
megabytes
-                or gigabytes. For example, the value "10KB" will be 
interpreted as 10240.
+                You can specify the value with the suffixes "KB", "MB", "GB" 
or "TB" so that the integer is
+                interpreted being expressed respectively in kilobytes, 
megabytes, gigabytes
+                or terabytes. For example, the value "10KB" will be 
interpreted as 10240.
                */
                void setOption(const LogString& option, const LogString& value) 
override;
 };
diff --git a/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h 
b/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
index 2f9ae007..a7810ed7 100755
--- a/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
@@ -137,7 +137,7 @@ namespace rolling
  * the {@link #activateOptions} method of the owning
  * <code>RollingFileAppender</code>.
  */
-class LOG4CXX_EXPORT TimeBasedRollingPolicy : public virtual RollingPolicyBase,
+class LOG4CXX_EXPORT TimeBasedRollingPolicy : public RollingPolicyBase,
        public virtual TriggeringPolicy
 {
                DECLARE_LOG4CXX_OBJECT(TimeBasedRollingPolicy)
@@ -154,6 +154,7 @@ class LOG4CXX_EXPORT TimeBasedRollingPolicy : public 
virtual RollingPolicyBase,
                TimeBasedRollingPolicy();
                virtual ~TimeBasedRollingPolicy();
 
+               using RollingPolicyBase::activateOptions;
                /**
                \copybrief RollingPolicyBase::activateOptions()
 
@@ -161,10 +162,7 @@ class LOG4CXX_EXPORT TimeBasedRollingPolicy : public 
virtual RollingPolicyBase,
 
                \sa RollingPolicyBase::activateOptions()
                */
-#if 15 < LOG4CXX_ABI_VERSION
-               void activateOptions() override;
-#endif
-               void activateOptions(helpers::Pool& ) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS) override;
 
                void setMultiprocess(bool multiprocess);
 
diff --git a/src/main/include/log4cxx/rolling/triggeringpolicy.h 
b/src/main/include/log4cxx/rolling/triggeringpolicy.h
index 4721d6af..ac6b2dba 100644
--- a/src/main/include/log4cxx/rolling/triggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/triggeringpolicy.h
@@ -70,15 +70,6 @@ class LOG4CXX_EXPORT TriggeringPolicy :
                        const LogString& filename,
                        size_t fileLength) = 0;
 
-#if 15 < LOG4CXX_ABI_VERSION
-               /**
-               \copybrief spi::OptionHandler::activateOptions()
-
-               No action is performed in this implementation.
-               */
-               void activateOptions(helpers::Pool& ) override;
-               void activateOptions() override;
-#endif
 };
 
 LOG4CXX_PTR_DEF(TriggeringPolicy);
diff --git a/src/main/include/log4cxx/simplelayout.h 
b/src/main/include/log4cxx/simplelayout.h
index 20d90902..f0fb2716 100644
--- a/src/main/include/log4cxx/simplelayout.h
+++ b/src/main/include/log4cxx/simplelayout.h
@@ -63,12 +63,14 @@ class LOG4CXX_EXPORT SimpleLayout : public Layout
                        return true;
                }
 
+#if LOG4CXX_ABI_VERSION <= 15
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool& /* p */) override {}
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override {}
+#endif
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/spi/appenderattachable.h 
b/src/main/include/log4cxx/spi/appenderattachable.h
index 2498dc96..a716faba 100644
--- a/src/main/include/log4cxx/spi/appenderattachable.h
+++ b/src/main/include/log4cxx/spi/appenderattachable.h
@@ -93,10 +93,4 @@ LOG4CXX_PTR_DEF(AppenderAttachable);
 }
 }
 
-#if 15 < LOG4CXX_ABI_VERSION
-#define LOG4CXX_16_VIRTUAL_SPECIFIER override
-#else
-#define LOG4CXX_16_VIRTUAL_SPECIFIER 
-#endif
-
 #endif //_LOG4CXX_SPI_APPENDER_ATTACHABLE_H_
diff --git a/src/main/include/log4cxx/spi/errorhandler.h 
b/src/main/include/log4cxx/spi/errorhandler.h
index ef0af515..04892852 100644
--- a/src/main/include/log4cxx/spi/errorhandler.h
+++ b/src/main/include/log4cxx/spi/errorhandler.h
@@ -128,15 +128,16 @@ class LOG4CXX_EXPORT ErrorHandler : public virtual 
OptionHandler
                Has an error been reported?
                */
                virtual bool errorReported() const = 0;
+#endif
 
+               using OptionHandler::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool& ) override;
-               void activateOptions() override;
-#endif
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
+
 };
 
 LOG4CXX_PTR_DEF(ErrorHandler);
diff --git a/src/main/include/log4cxx/spi/filter.h 
b/src/main/include/log4cxx/spi/filter.h
index 769f0f9c..7049b268 100644
--- a/src/main/include/log4cxx/spi/filter.h
+++ b/src/main/include/log4cxx/spi/filter.h
@@ -102,33 +102,13 @@ class LOG4CXX_EXPORT Filter : public virtual OptionHandler
 
                };
 
-#if LOG4CXX_ABI_VERSION <= 15
+               using OptionHandler::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
-
-               @deprecated The \c pool parameter is not required and will be 
removed in a future version.
-               */
-               void activateOptions(helpers::Pool& /* pool */) override;
-#else
-               /**
-               \copybrief spi::OptionHandler::activateOptions()
-
-               No action is performed in this implementation.
-               */
-               void activateOptions() override;
-
-               /**
-               \copybrief spi::OptionHandler::activateOptions()
-
-               No action is performed in this implementation.
-
-               @deprecated This function is deprecated and will be removed in 
a future version.
                */
-               [[deprecated("Override activateOptions() without parameters 
instead")]]
-               void activateOptions(helpers::Pool& ) override;
-#endif
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
 
                /**
                \copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/spi/optionhandler.h 
b/src/main/include/log4cxx/spi/optionhandler.h
index 1065677d..28e54d67 100644
--- a/src/main/include/log4cxx/spi/optionhandler.h
+++ b/src/main/include/log4cxx/spi/optionhandler.h
@@ -43,19 +43,23 @@ class LOG4CXX_EXPORT OptionHandler : public virtual 
helpers::Object
 
                <p>This allows to defer activiation of the options until all
                options have been set. This is required for components which 
have
-               related options that remain ambigous until all are set.
+               related options that remain ambiguous until all are set.
 
                <p>For example, the FileAppender has
                the <code>File</code> and <b>Append</b> options both of
-               which are ambigous until the other is also set.
+               which are ambiguous until the other is also set.
                */
 #if LOG4CXX_ABI_VERSION <= 15
+#define LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS helpers::Pool& p
+#define LOG4CXX_ACTIVATE_OPTIONS_PARAMETER p
                void activateOptions();
                /**
                @deprecated The \c pool parameter is not required and will be 
removed in a future version.
                */
-               virtual void activateOptions(helpers::Pool& p) = 0;
+               virtual void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) = 0;
 #else
+#define LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS
+#define LOG4CXX_ACTIVATE_OPTIONS_PARAMETER
                virtual void activateOptions() = 0;
                /**
                @deprecated This function is deprecated and will be removed in 
a future version.
@@ -80,4 +84,10 @@ class LOG4CXX_EXPORT OptionHandler : public virtual 
helpers::Object
 } // namespace log4cxx
 
 
+#if 15 < LOG4CXX_ABI_VERSION
+#define LOG4CXX_16_VIRTUAL_SPECIFIER override
+#else
+#define LOG4CXX_16_VIRTUAL_SPECIFIER
+#endif
+
 #endif //_LOG4CXX_SPI_OPTION_HANDLER_H
diff --git a/src/main/include/log4cxx/varia/fallbackerrorhandler.h 
b/src/main/include/log4cxx/varia/fallbackerrorhandler.h
index c3dfce6a..a4599b83 100644
--- a/src/main/include/log4cxx/varia/fallbackerrorhandler.h
+++ b/src/main/include/log4cxx/varia/fallbackerrorhandler.h
@@ -69,18 +69,19 @@ class LOG4CXX_EXPORT FallbackErrorHandler :
                */
                void setLogger(const LoggerPtr& logger) override;
 
+#if LOG4CXX_ABI_VERSION <= 15
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool& p) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override;
+#endif
+
                /**
                \copybrief spi::OptionHandler::setOption()
                 */
                void setOption(const LogString& option, const LogString& value) 
override;
-
-
                /**
                Prints the message and the stack trace of the exception on
                <code>System.err</code>.
diff --git a/src/main/include/log4cxx/writerappender.h 
b/src/main/include/log4cxx/writerappender.h
index 85f46b38..3e38f83a 100644
--- a/src/main/include/log4cxx/writerappender.h
+++ b/src/main/include/log4cxx/writerappender.h
@@ -54,11 +54,12 @@ class LOG4CXX_EXPORT WriterAppender : public 
AppenderSkeleton
        public:
                ~WriterAppender();
 
+               using AppenderSkeleton::activateOptions;
                /**
                Derived appenders should override this method if option 
structure
                requires it.
                */
-               void activateOptions(helpers::Pool& pool) override;
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS  ) override;
 
                /**
                If the <b>ImmediateFlush</b> option is set to
diff --git a/src/main/include/log4cxx/xml/xmllayout.h 
b/src/main/include/log4cxx/xml/xmllayout.h
index 40484941..f0ec5b09 100644
--- a/src/main/include/log4cxx/xml/xmllayout.h
+++ b/src/main/include/log4cxx/xml/xmllayout.h
@@ -97,13 +97,15 @@ class LOG4CXX_EXPORT XMLLayout : public Layout
                */
                bool getProperties();
 
+#if LOG4CXX_ABI_VERSION <= 15
+               using Layout::activateOptions;
                /**
                \copybrief spi::OptionHandler::activateOptions()
 
                No action is performed in this implementation.
                */
-               void activateOptions(helpers::Pool& /* p */) override { }
-
+               void activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) override { }
+#endif
                /**
                \copybrief spi::OptionHandler::setOption()
 
diff --git a/src/test/cpp/CMakeLists.txt b/src/test/cpp/CMakeLists.txt
index ee114340..5e18a1d4 100644
--- a/src/test/cpp/CMakeLists.txt
+++ b/src/test/cpp/CMakeLists.txt
@@ -64,6 +64,7 @@ set(ALL_LOG4CXX_TESTS
     mdctestcase
     minimumtestcase
     ndctestcase
+    optionhandlertest
     patternlayouttest
     propertyconfiguratortest
     rollingfileappendertestcase
diff --git a/src/test/cpp/asyncappendertestcase.cpp 
b/src/test/cpp/asyncappendertestcase.cpp
index 847601ba..d586a382 100644
--- a/src/test/cpp/asyncappendertestcase.cpp
+++ b/src/test/cpp/asyncappendertestcase.cpp
@@ -402,7 +402,7 @@ class AsyncAppenderTestCase : public 
AppenderSkeletonTestCase
                                
asyncAppender->setName(LOG4CXX_STR("async-testBadAppender"));
                                
asyncAppender->addAppender(std::make_shared<NullPointerAppender>());
                                Pool p;
-                               asyncAppender->activateOptions(p);
+                               asyncAppender->activateOptions();
                                r->getRootLogger()->addAppender(asyncAppender);
                                r->setConfigured(true);
                        });
@@ -442,7 +442,7 @@ class AsyncAppenderTestCase : public 
AppenderSkeletonTestCase
                                async->setBufferSize(5);
                                async->setBlocking(false);
                                Pool p;
-                               async->activateOptions(p);
+                               async->activateOptions();
                                r->getRootLogger()->addAppender(async);
                                r->setConfigured(true);
                        });
@@ -527,7 +527,7 @@ class AsyncAppenderTestCase : public 
AppenderSkeletonTestCase
                                
async->setName(LOG4CXX_STR("withLoggingAppender"));
                                async->setBufferSize(5);
                                Pool p;
-                               async->activateOptions(p);
+                               async->activateOptions();
                                r->getRootLogger()->addAppender(async);
                                r->setConfigured(true);
                        });
diff --git a/src/test/cpp/benchmark/benchmark.cpp 
b/src/test/cpp/benchmark/benchmark.cpp
index 3e0f7baf..40658774 100644
--- a/src/test/cpp/benchmark/benchmark.cpp
+++ b/src/test/cpp/benchmark/benchmark.cpp
@@ -49,10 +49,6 @@ public:
                m_priv->layout->format(buf, event, p);
        }
 
-       void activateOptions(helpers::Pool& /* pool */) override
-       {
-       }
-
        void setOption(const LogString& option, const LogString& value) override
        {
        }
diff --git a/src/test/cpp/consoleappendertestcase.cpp 
b/src/test/cpp/consoleappendertestcase.cpp
index 51383861..39513e50 100644
--- a/src/test/cpp/consoleappendertestcase.cpp
+++ b/src/test/cpp/consoleappendertestcase.cpp
@@ -46,9 +46,8 @@ class ConsoleAppenderTestCase : public WriterAppenderTestCase
 
                void testNoLayout()
                {
-                       Pool p;
                        ConsoleAppenderPtr appender(new ConsoleAppender());
-                       appender->activateOptions(p);
+                       appender->activateOptions();
                        LoggerPtr logger(Logger::getRootLogger());
                        logger->addAppender(appender);
                        LOG4CXX_INFO(logger, "No layout specified for 
ConsoleAppender");
diff --git a/src/test/cpp/encodingtest.cpp b/src/test/cpp/encodingtest.cpp
index 7e190b19..2cde6828 100644
--- a/src/test/cpp/encodingtest.cpp
+++ b/src/test/cpp/encodingtest.cpp
@@ -170,16 +170,15 @@ private:
        {
                FileAppenderPtr  appender(new FileAppender());
                PatternLayoutPtr layout(new PatternLayout());
-               Pool             p;
 
                layout->setConversionPattern(LOG4CXX_STR("%p - %m\n"));
-               layout->activateOptions(p);
+               layout->activateOptions();
 
                appender->setAppend(false);
                appender->setEncoding(encoding);
                appender->setFile(filename);
                appender->setLayout(layout);
-               appender->activateOptions(p);
+               appender->activateOptions();
 
                logger->addAppender(appender);
                logger->setLevel(Level::getInfo());
diff --git a/src/test/cpp/fileappendertest.cpp 
b/src/test/cpp/fileappendertest.cpp
index 979bfb78..1c874b46 100644
--- a/src/test/cpp/fileappendertest.cpp
+++ b/src/test/cpp/fileappendertest.cpp
@@ -40,8 +40,7 @@ auto getLogger(const LogString& name = {}) -> LoggerPtr {
                        writer->setName(LOG4CXX_STR("FileAppender"));
                        writer->setBufferedIO(true);
                        writer->setBufferedSeconds(1);
-                       helpers::Pool p;
-                       writer->activateOptions(p);
+                       writer->activateOptions();
                        BasicConfigurator::configure(writer);
                }
                ~log4cxx_initializer() {
@@ -95,8 +94,7 @@ public:
                FileAppenderPtr wa(new FileAppender());
                wa->setFile(LOG4CXX_STR("output/newdir/temp.log"));
                wa->setLayout(PatternLayoutPtr(new 
PatternLayout(LOG4CXX_STR("%m%n"))));
-               Pool p;
-               wa->activateOptions(p);
+               wa->activateOptions();
 
                
LOGUNIT_ASSERT(File(LOG4CXX_STR("output/newdir/temp.log")).exists());
        }
@@ -172,8 +170,7 @@ public:
                auto policy = 
std::make_shared<rolling::TimeBasedRollingPolicy>();
                policy->setFileNamePattern(dir + 
LOG4CXX_STR("/100message-%d{yyyy}.log"));
                writer->setRollingPolicy(policy);
-               helpers::Pool p;
-               writer->activateOptions(p);
+               writer->activateOptions();
                logger->setAdditivity(false);
                logger->addAppender(writer);
 
diff --git a/src/test/cpp/filter/andfiltertest.cpp 
b/src/test/cpp/filter/andfiltertest.cpp
index 96defe46..5e4ae6f0 100644
--- a/src/test/cpp/filter/andfiltertest.cpp
+++ b/src/test/cpp/filter/andfiltertest.cpp
@@ -58,8 +58,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                FilterPtr filter(new AndFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -77,10 +76,9 @@ public:
                AndFilterPtr filter(new AndFilter());
                LevelMatchFilterPtr filter1(new LevelMatchFilter());
                filter1->setLevelToMatch(LOG4CXX_STR("info"));
-               Pool p;
-               filter1->activateOptions(p);
+               filter1->activateOptions();
                filter->addFilter(filter1);
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -98,14 +96,13 @@ public:
                AndFilterPtr filter(new AndFilter());
                LevelMatchFilterPtr filter1(new LevelMatchFilter());
                filter1->setLevelToMatch(LOG4CXX_STR("info"));
-               Pool p;
-               filter1->activateOptions(p);
+               filter1->activateOptions();
                filter->addFilter(filter1);
                LevelMatchFilterPtr filter2(new LevelMatchFilter());
                filter2->setLevelToMatch(LOG4CXX_STR("info"));
-               filter2->activateOptions(p);
+               filter2->activateOptions();
                filter->addFilter(filter2);
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -124,11 +121,10 @@ public:
                AndFilterPtr filter(new AndFilter());
                LevelMatchFilterPtr filter1(new LevelMatchFilter());
                filter1->setLevelToMatch(LOG4CXX_STR("info"));
-               Pool p;
-               filter1->activateOptions(p);
+               filter1->activateOptions();
                filter->addFilter(filter1);
                filter->setAcceptOnMatch(false);
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
@@ -146,13 +142,12 @@ public:
                AndFilterPtr filter(new AndFilter());
                LevelMatchFilterPtr filter1(new LevelMatchFilter());
                filter1->setLevelToMatch(LOG4CXX_STR("info"));
-               Pool p;
-               filter1->activateOptions(p);
+               filter1->activateOptions();
                filter->addFilter(filter1);
                FilterPtr filter2(new DenyAllFilter());
-               filter2->activateOptions(p);
+               filter2->activateOptions();
                filter->addFilter(filter2);
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -170,13 +165,12 @@ public:
                AndFilterPtr filter(new AndFilter());
                LevelMatchFilterPtr filter1(new LevelMatchFilter());
                filter1->setLevelToMatch(LOG4CXX_STR("info"));
-               Pool p;
-               filter1->activateOptions(p);
+               filter1->activateOptions();
                filter->addFilter(filter1);
                FilterPtr filter2(new StringMatchFilter());
-               filter2->activateOptions(p);
+               filter2->activateOptions();
                filter->addFilter(filter2);
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 };
diff --git a/src/test/cpp/filter/denyallfiltertest.cpp 
b/src/test/cpp/filter/denyallfiltertest.cpp
index 1ff1f7b8..492263bc 100644
--- a/src/test/cpp/filter/denyallfiltertest.cpp
+++ b/src/test/cpp/filter/denyallfiltertest.cpp
@@ -47,8 +47,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                FilterPtr filter(new DenyAllFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
diff --git a/src/test/cpp/filter/levelmatchfiltertest.cpp 
b/src/test/cpp/filter/levelmatchfiltertest.cpp
index 3acbb8ff..ede25240 100644
--- a/src/test/cpp/filter/levelmatchfiltertest.cpp
+++ b/src/test/cpp/filter/levelmatchfiltertest.cpp
@@ -52,8 +52,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelMatchFilterPtr filter(new LevelMatchFilter());
                filter->setLevelToMatch(LOG4CXX_STR("info"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -71,8 +70,7 @@ public:
                LevelMatchFilterPtr filter(new LevelMatchFilter());
                filter->setLevelToMatch(LOG4CXX_STR("info"));
                filter->setAcceptOnMatch(false);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
@@ -88,8 +86,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                LevelMatchFilterPtr filter(new LevelMatchFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -106,8 +103,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelMatchFilterPtr filter(new LevelMatchFilter());
                filter->setLevelToMatch(LOG4CXX_STR("debug"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -124,8 +120,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelMatchFilterPtr filter(new LevelMatchFilter());
                filter->setLevelToMatch(LOG4CXX_STR("warn"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 };
diff --git a/src/test/cpp/filter/levelrangefiltertest.cpp 
b/src/test/cpp/filter/levelrangefiltertest.cpp
index f0971f64..153b3702 100644
--- a/src/test/cpp/filter/levelrangefiltertest.cpp
+++ b/src/test/cpp/filter/levelrangefiltertest.cpp
@@ -54,8 +54,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelRangeFilterPtr filter(new LevelRangeFilter());
                filter->setLevelMin(Level::getWarn());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
@@ -72,8 +71,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelRangeFilterPtr filter(new LevelRangeFilter());
                filter->setLevelMax(Level::getDebug());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
@@ -91,8 +89,7 @@ public:
                LevelRangeFilterPtr filter(new LevelRangeFilter());
                filter->setLevelMin(Level::getDebug());
                filter->setAcceptOnMatch(true);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -110,8 +107,7 @@ public:
                LevelRangeFilterPtr filter(new LevelRangeFilter());
                filter->setLevelMax(Level::getError());
                filter->setAcceptOnMatch(true);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -128,8 +124,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelRangeFilterPtr filter(new LevelRangeFilter());
                filter->setLevelMin(Level::getDebug());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -146,8 +141,7 @@ public:
                                LOG4CXX_LOCATION));
                LevelRangeFilterPtr filter(new LevelRangeFilter());
                filter->setLevelMax(Level::getError());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 };
diff --git a/src/test/cpp/filter/locationinfofiltertest.cpp 
b/src/test/cpp/filter/locationinfofiltertest.cpp
index 402b97a5..edef692f 100644
--- a/src/test/cpp/filter/locationinfofiltertest.cpp
+++ b/src/test/cpp/filter/locationinfofiltertest.cpp
@@ -55,8 +55,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                li));
                FilterPtr filter(new LocationInfoFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -77,8 +76,7 @@ public:
                                li));
                LocationInfoFilterPtr filter(new LocationInfoFilter());
                filter->setLineNumber(10);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -100,8 +98,7 @@ public:
                LocationInfoFilterPtr filter(new LocationInfoFilter());
                filter->setLineNumber(50);
                filter->setAcceptOnMatch(true);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -125,8 +122,7 @@ public:
                filter->setMethodName(LOG4CXX_STR("exampleFun"));
                filter->setAcceptOnMatch(true);
                filter->setMustMatchAll(true);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
diff --git a/src/test/cpp/filter/loggermatchfiltertest.cpp 
b/src/test/cpp/filter/loggermatchfiltertest.cpp
index 88adb06b..4e5b9a65 100644
--- a/src/test/cpp/filter/loggermatchfiltertest.cpp
+++ b/src/test/cpp/filter/loggermatchfiltertest.cpp
@@ -51,8 +51,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                FilterPtr filter(new LoggerMatchFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -69,8 +68,7 @@ public:
                                LOG4CXX_LOCATION));
                LoggerMatchFilterPtr filter(new LoggerMatchFilter());
                filter->setAcceptOnMatch(false);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
@@ -86,8 +84,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                FilterPtr filter(new LoggerMatchFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -104,8 +101,7 @@ public:
                                LOG4CXX_LOCATION));
                LoggerMatchFilterPtr filter(new LoggerMatchFilter());
                
filter->setLoggerToMatch(LOG4CXX_STR("org.apache.log4j.filter.LoggerMatchFilterTest"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
diff --git a/src/test/cpp/filter/mapfiltertest.cpp 
b/src/test/cpp/filter/mapfiltertest.cpp
index 0b3d620d..10bf768b 100644
--- a/src/test/cpp/filter/mapfiltertest.cpp
+++ b/src/test/cpp/filter/mapfiltertest.cpp
@@ -51,8 +51,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                FilterPtr filter(new MapFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -70,8 +69,7 @@ public:
                MDC::put(LOG4CXX_STR("my.ip"), LOG4CXX_STR("localhost"));
                MapFilterPtr filter(new MapFilter());
                filter->setKeyValue(LOG4CXX_STR("my.ip"), 
LOG4CXX_STR("127.0.0.1"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
 
                filter->setAcceptOnMatch(true);
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
@@ -94,8 +92,7 @@ public:
                MDC::put(LOG4CXX_STR("my.ip"), LOG4CXX_STR("127.0.0.1"));
                MapFilterPtr filter(new MapFilter());
                filter->setKeyValue(LOG4CXX_STR("my.ip"), 
LOG4CXX_STR("127.0.0.1"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
 
                filter->setAcceptOnMatch(true);
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
@@ -121,8 +118,7 @@ public:
                filter->setKeyValue(LOG4CXX_STR("my.ip"), 
LOG4CXX_STR("127.0.0.1"));
                filter->setKeyValue(LOG4CXX_STR("my.name"), 
LOG4CXX_STR("Unknown"));
                filter->setAcceptOnMatch(true);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
 
                filter->setMustMatchAll(true);      // AND T/F
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));   
// does not match second
diff --git a/src/test/cpp/filter/stringmatchfiltertest.cpp 
b/src/test/cpp/filter/stringmatchfiltertest.cpp
index 131d0edb..b1c2c0b0 100644
--- a/src/test/cpp/filter/stringmatchfiltertest.cpp
+++ b/src/test/cpp/filter/stringmatchfiltertest.cpp
@@ -52,8 +52,7 @@ public:
                                LOG4CXX_STR("Hello, World"),
                                LOG4CXX_LOCATION));
                FilterPtr filter(new StringMatchFilter());
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -70,8 +69,7 @@ public:
                                LOG4CXX_LOCATION));
                StringMatchFilterPtr filter(new StringMatchFilter());
                filter->setStringToMatch(LOG4CXX_STR("Monde"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
@@ -88,8 +86,7 @@ public:
                                LOG4CXX_LOCATION));
                StringMatchFilterPtr filter(new StringMatchFilter());
                filter->setStringToMatch(LOG4CXX_STR("World"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
        }
 
@@ -108,8 +105,7 @@ public:
                StringMatchFilterPtr filter(new StringMatchFilter());
                filter->setStringToMatch(LOG4CXX_STR("World"));
                filter->setAcceptOnMatch(false);
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
        }
 
@@ -126,8 +122,7 @@ public:
                                LOG4CXX_LOCATION));
                StringMatchFilterPtr filter(new StringMatchFilter());
                filter->setStringToMatch(LOG4CXX_STR("world"));
-               Pool p;
-               filter->activateOptions(p);
+               filter->activateOptions();
                LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
        }
 
diff --git a/src/test/cpp/net/socketappendertestcase.cpp 
b/src/test/cpp/net/socketappendertestcase.cpp
index b3e42a6f..4a67661e 100644
--- a/src/test/cpp/net/socketappendertestcase.cpp
+++ b/src/test/cpp/net/socketappendertestcase.cpp
@@ -72,8 +72,7 @@ class SocketAppenderTestCase : public AppenderSkeletonTestCase
                        appender->setRemoteHost(LOG4CXX_STR("localhost"));
                        appender->setReconnectionDelay(50); // milliseconds
                        appender->setPort(tcpPort);
-                       helpers::Pool pool;
-                       appender->activateOptions(pool);
+                       appender->activateOptions();
 
                        BasicConfigurator::configure(appender);
 
diff --git a/src/test/cpp/net/telnetappendertestcase.cpp 
b/src/test/cpp/net/telnetappendertestcase.cpp
index ace88a95..93ac1958 100644
--- a/src/test/cpp/net/telnetappendertestcase.cpp
+++ b/src/test/cpp/net/telnetappendertestcase.cpp
@@ -74,8 +74,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
                        TelnetAppenderPtr appender(new TelnetAppender());
                        appender->setLayout(createLayout());
                        appender->setPort(TEST_PORT);
-                       Pool p;
-                       appender->activateOptions(p);
+                       appender->activateOptions();
                        appender->close();
                }
 
@@ -84,8 +83,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
                        TelnetAppenderPtr appender(new TelnetAppender());
                        appender->setLayout(createLayout());
                        appender->setPort(TEST_PORT);
-                       Pool p;
-                       appender->activateOptions(p);
+                       appender->activateOptions();
                        apr_sleep(100000);    // 100 milliseconds
                        appender->close();
                }
@@ -100,8 +98,7 @@ class TelnetAppenderTestCase : public 
AppenderSkeletonTestCase
                        appender->setPort(TEST_PORT);
                        appender->setReuseAddress(true);
                        appender->setNonBlocking(true);
-                       Pool p;
-                       appender->activateOptions(p);
+                       appender->activateOptions();
                        BasicConfigurator::configure(appender);
                        auto root = Logger::getRootLogger();
 
@@ -124,8 +121,7 @@ class TelnetAppenderTestCase : public 
AppenderSkeletonTestCase
                        appender->setMaxConnections(1);
                        appender->setReuseAddress(true);
                        appender->setHostname(LOG4CXX_STR("127.0.0.1"));
-                       Pool p;
-                       appender->activateOptions(p);
+                       appender->activateOptions();
                        BasicConfigurator::configure(appender);
                        auto root = Logger::getRootLogger();
 
diff --git a/src/test/cpp/nt/nteventlogappendertestcase.cpp 
b/src/test/cpp/nt/nteventlogappendertestcase.cpp
index b4b82115..01bd6101 100644
--- a/src/test/cpp/nt/nteventlogappendertestcase.cpp
+++ b/src/test/cpp/nt/nteventlogappendertestcase.cpp
@@ -83,7 +83,7 @@ class NTEventLogAppenderTestCase : public 
AppenderSkeletonTestCase
                                
appender->setSource(LOG4CXX_STR("log4cxx_test"));
                                LayoutPtr layout(new 
PatternLayout(LOG4CXX_STR("%c - %m%n")));
                                appender->setLayout(layout);
-                               appender->activateOptions(p);
+                               appender->activateOptions();
 
                                LoggingEventPtr event(new LoggingEvent(
                                                LOG4CXX_STR("org.foobar"), 
Level::getInfo(), LOG4CXX_STR("Hello,  World"), LOG4CXX_LOCATION));
diff --git a/src/test/cpp/optionhandlertest.cpp 
b/src/test/cpp/optionhandlertest.cpp
new file mode 100644
index 00000000..78f6d33f
--- /dev/null
+++ b/src/test/cpp/optionhandlertest.cpp
@@ -0,0 +1,190 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "logunit.h"
+#include <log4cxx/appenderskeleton.h>
+#include <log4cxx/helpers/pool.h>
+#include <log4cxx/helpers/loglog.h>
+#include <log4cxx/helpers/transcoder.h>
+
+using namespace log4cxx;
+
+/**
+ * Tests activateOptions in ABI 15 and 16.
+ *
+ */
+
+class ABI_15_Appender : public AppenderSkeleton
+{
+public:
+       void close() override
+       {}
+
+       void append(const spi::LoggingEventPtr& /*event*/, helpers::Pool& 
/*p*/) override
+       {
+       }
+
+       bool requiresLayout() const override
+       {
+               return false;
+       }
+
+       void activateOptions(helpers::Pool& p) override
+       {
+               m_activated = true;
+       }
+
+       bool isActivated() const
+       {
+               return m_activated;
+       }
+private:
+       bool m_activated{ false };
+};
+
+class BaseAppender : public AppenderSkeleton
+{
+public:
+       void close() override
+       {}
+
+       void append(const spi::LoggingEventPtr& /*event*/, helpers::Pool& 
/*p*/) override
+       {
+       }
+
+       bool requiresLayout() const override
+       {
+               return false;
+       }
+
+       using AppenderSkeleton::activateOptions;
+       void activateOptions( LOG4CXX_ACTIVATE_OPTIONS_FORMAL_PARAMETERS ) 
override
+       {
+               AppenderSkeleton::activateOptions( 
LOG4CXX_ACTIVATE_OPTIONS_PARAMETER );
+               m_activated = true;
+       }
+
+       bool isActivated() const
+       {
+               return m_activated;
+       }
+private:
+       bool m_activated{ false };
+};
+
+class ABI_15_Specialized_Appender : public BaseAppender
+{
+public:
+       void activateOptions(helpers::Pool& p) override
+       {
+               BaseAppender::activateOptions(p);
+               m_activated = true;
+       }
+
+       bool isActivated() const
+       {
+               return BaseAppender::isActivated() && m_activated;
+       }
+private:
+       bool m_activated{ false };
+};
+
+#if 15 < LOG4CXX_ABI_VERSION
+class ABI_16_Appender : public BaseAppender
+{
+public:
+       void activateOptions() override
+       {
+               BaseAppender::activateOptions();
+               m_activated = true;
+       }
+
+       bool isActivated() const
+       {
+               return BaseAppender::isActivated() && m_activated;
+       }
+private:
+       bool m_activated{ false };
+};
+
+#endif
+
+LOGUNIT_CLASS(OptionHandlerTest)
+{
+       LOGUNIT_TEST_SUITE(OptionHandlerTest);
+       LOGUNIT_TEST(ABI_15_AppenderTest);
+       LOGUNIT_TEST(ABI_15_Specialized_AppenderTest);
+#if 15 < LOG4CXX_ABI_VERSION
+       LOGUNIT_TEST(ABI_16_AppenderTest);
+#endif
+       LOGUNIT_TEST_SUITE_END();
+public:
+
+       /**
+        * Checks a simple user defined ABI 15 style appender still works
+        */
+       void ABI_15_AppenderTest()
+       {
+               helpers::Pool p;
+               ABI_15_Appender a15;
+               a15.activateOptions(p);
+               LOGUNIT_ASSERT(a15.isActivated());
+       }
+
+       /**
+        * Checks all levels of the appender heirarchy are activated
+        */
+       void ABI_15_Specialized_AppenderTest()
+       {
+               helpers::Pool p;
+#if 15 < LOG4CXX_ABI_VERSION
+               try
+               {
+                       ABI_15_Specialized_Appender a15;
+                       a15.activateOptions(p);
+                       LOGUNIT_ASSERT(false);
+               }
+               catch (const helpers::Exception& ex)
+               {
+                       LogString msg;
+                       helpers::Transcoder::decode(ex.what(), msg);
+                       helpers::LogLog::debug(msg);
+                       LOGUNIT_ASSERT(true);
+               }
+#else
+               ABI_15_Specialized_Appender a15;
+               a15.activateOptions(p);
+               LOGUNIT_ASSERT(a15.isActivated());
+#endif
+       }
+
+#if 15 < LOG4CXX_ABI_VERSION
+       /**
+        * Checks all levels of the appender heirarchy are activated
+        */
+       void ABI_16_AppenderTest()
+       {
+               ABI_16_Appender a16;
+               a16.activateOptions();
+               LOGUNIT_ASSERT(a16.isActivated());
+       }
+#endif
+
+};
+
+LOGUNIT_TEST_SUITE_REGISTRATION(OptionHandlerTest);
+
diff --git a/src/test/cpp/patternlayouttest.cpp 
b/src/test/cpp/patternlayouttest.cpp
index 6301519f..e0b104e3 100644
--- a/src/test/cpp/patternlayouttest.cpp
+++ b/src/test/cpp/patternlayouttest.cpp
@@ -505,54 +505,53 @@ public:
                root->debug(LOG4CXX_TEST_STR("starting mdc pattern test"));
 
                layout->setConversionPattern(mdcMsgPattern1);
-               log4cxx::helpers::Pool pool;
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("empty mdc, no key specified in 
pattern"));
 
                layout->setConversionPattern(mdcMsgPattern2);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("empty mdc, key1 in pattern"));
 
                layout->setConversionPattern(mdcMsgPattern3);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("empty mdc, key2 in pattern"));
 
                layout->setConversionPattern(mdcMsgPattern4);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("empty mdc, key3 in pattern"));
 
                layout->setConversionPattern(mdcMsgPattern5);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("empty mdc, key1, key2, and key3 
in pattern"));
 
                MDC::put(LOG4CXX_TEST_STR("key1"), LOG4CXX_TEST_STR("value1"));
                MDC::put(LOG4CXX_TEST_STR("key2"), LOG4CXX_TEST_STR("value2"));
 
                layout->setConversionPattern(mdcMsgPattern1);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("filled mdc, no key specified in 
pattern"));
 
                layout->setConversionPattern(mdcMsgPattern2);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("filled mdc, key1 in pattern"));
 
                layout->setConversionPattern(mdcMsgPattern3);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("filled mdc, key2 in pattern"));
 
                layout->setConversionPattern(mdcMsgPattern4);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("filled mdc, key3 in pattern"));
 
                layout->setConversionPattern(mdcMsgPattern5);
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("filled mdc, key1, key2, and key3 
in pattern"));
 
                MDC::remove(LOG4CXX_TEST_STR("key1"));
                MDC::remove(LOG4CXX_TEST_STR("key2"));
 
                layout->setConversionPattern(LOG4CXX_STR("%m%n"));
-               layout->activateOptions(pool);
+               layout->activateOptions();
                root->debug(LOG4CXX_TEST_STR("finished mdc pattern test"));
 
                LOGUNIT_ASSERT(Compare::compare(OUTPUT_FILE, WITNESS_FILE));
diff --git a/src/test/cpp/rolling/filterbasedrollingtest.cpp 
b/src/test/cpp/rolling/filterbasedrollingtest.cpp
index bbff3fdc..534fa291 100644
--- a/src/test/cpp/rolling/filterbasedrollingtest.cpp
+++ b/src/test/cpp/rolling/filterbasedrollingtest.cpp
@@ -84,19 +84,18 @@ public:
                rf->setLevelMin(Level::getInfo());
                fbtp->addFilter(rf);
 
-               Pool p;
-               fbtp->activateOptions(p);
+               fbtp->activateOptions();
 
                swrp->setMinIndex(0);
                rfa->setFile(LOG4CXX_STR("output/filterBased-test2.log"));
                rfa->setAppend(false);
 
                
swrp->setFileNamePattern(LOG4CXX_STR("output/filterBased-test2.%i"));
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
                rfa->setTriggeringPolicy(fbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                Logger::getRootLogger()->addAppender(rfa);
                Logger::getRootLogger()->setLevel(Level::getDebug());
 
diff --git a/src/test/cpp/rolling/manualrollingtest.cpp 
b/src/test/cpp/rolling/manualrollingtest.cpp
index 19240b4e..eb7e54a2 100644
--- a/src/test/cpp/rolling/manualrollingtest.cpp
+++ b/src/test/cpp/rolling/manualrollingtest.cpp
@@ -120,14 +120,13 @@ public:
                swrp->setMinIndex(0);
 
                swrp->setFileNamePattern(LOG4CXX_STR("output/manual-test1.%i"));
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
-
+               Pool p;
                common(rfa, p, logger);
 
                LOGUNIT_ASSERT_EQUAL(true, 
File("output/manual-test1.0").exists());
@@ -153,10 +152,10 @@ public:
                rfa->setLayout(layout);
                rfa->setFile(LOG4CXX_STR("output/manual-test2.log"));
 
-               Pool p;
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
+               Pool p;
                common(rfa, p, logger);
 
                LOGUNIT_ASSERT_EQUAL(true, 
File("output/manual-test2.log").exists());
@@ -187,9 +186,9 @@ public:
                rfa->setFile(LOG4CXX_STR("output/manual-test3.log"));
                fwrp->setFileNamePattern(LOG4CXX_STR("output/sbr-test3.%i.gz"));
                Pool p;
-               fwrp->activateOptions(p);
+               fwrp->activateOptions();
                rfa->setRollingPolicy(fwrp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                common(rfa, p, logger);
@@ -224,10 +223,10 @@ public:
                //
                
swrp->setFileNamePattern(LOG4CXX_STR("output/test4/manual-test4.%i"));
                Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                common(rfa, p, logger);
@@ -256,15 +255,15 @@ public:
                swrp->setMinIndex(0);
 
                swrp->setFileNamePattern(LOG4CXX_STR("output/manual-test5.%i"));
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                //
                //   put stray file about locked file
+               Pool p;
                FileOutputStream os1(LOG4CXX_STR("output/manual-test5.1"), 
false);
                os1.close(p);
 
@@ -334,14 +333,14 @@ public:
                LogString filenamePatternPrefix = filenamePattern;
                filenamePattern.append( LOG4CXX_STR("/file-%i.gz") );
                swrp->setFileNamePattern(filenamePattern);
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
 
+               Pool p;
                common(rfa, p, logger);
 
                LOGUNIT_ASSERT_EQUAL(true, File(filenamePatternPrefix + 
LOG4CXX_STR("/file-0.gz")).exists());
diff --git a/src/test/cpp/rolling/rollingfileappenderpropertiestest.cpp 
b/src/test/cpp/rolling/rollingfileappenderpropertiestest.cpp
index bf4eb8f7..beb52ccd 100644
--- a/src/test/cpp/rolling/rollingfileappenderpropertiestest.cpp
+++ b/src/test/cpp/rolling/rollingfileappenderpropertiestest.cpp
@@ -117,8 +117,7 @@ public:
                rfa->setOption(LOG4CXX_STR("append"), LOG4CXX_STR("false"));
                rfa->setMaximumFileSize(100);
                rfa->setFile(LOG4CXX_STR("output/obsoleteRFA-test2.log"));
-               Pool p;
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                auto root = Logger::getRootLogger();
                root->addAppender(rfa);
 
@@ -184,8 +183,7 @@ public:
                rfa->setAppend(false);
                rfa->setFile(LOG4CXX_STR("output/obsoleteDRFA-test2.log"));
                rfa->setDatePattern(LOG4CXX_STR("'.'yyyy-MM-dd-HH_mm_ss"));
-               Pool p;
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                LoggerPtr root(Logger::getRootLogger());
                root->addAppender(rfa);
                LoggerPtr 
logger(Logger::getLogger("ObsoleteDailyRollingAppenderTest"));
diff --git a/src/test/cpp/rolling/sizebasedrollingtest.cpp 
b/src/test/cpp/rolling/sizebasedrollingtest.cpp
index 63c9b85c..33018a9f 100644
--- a/src/test/cpp/rolling/sizebasedrollingtest.cpp
+++ b/src/test/cpp/rolling/sizebasedrollingtest.cpp
@@ -118,12 +118,11 @@ public:
                swrp->setMinIndex(0);
 
                
swrp->setFileNamePattern(LOG4CXX_STR("output/sizeBased-test1.%i"));
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
                rfa->setTriggeringPolicy(sbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
 
@@ -159,12 +158,11 @@ public:
                swrp->setMinIndex(0);
 
                
swrp->setFileNamePattern(LOG4CXX_STR("output/sizeBased-test2.%i"));
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
                rfa->setTriggeringPolicy(sbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                common(logger, 0);
@@ -198,11 +196,10 @@ public:
                fwrp->setMinIndex(0);
                rfa->setFile(LOG4CXX_STR("output/sbr-test3.log"));
                fwrp->setFileNamePattern(LOG4CXX_STR("output/sbr-test3.%i.gz"));
-               Pool p;
-               fwrp->activateOptions(p);
+               fwrp->activateOptions();
                rfa->setRollingPolicy(fwrp);
                rfa->setTriggeringPolicy(sbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                common(logger, 100);
@@ -238,12 +235,11 @@ public:
                //   test4 directory should not exists.  Should cause all 
rollover attempts to fail.
                //
                
swrp->setFileNamePattern(LOG4CXX_STR("output/test4/sizeBased-test4.%i"));
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
                rfa->setTriggeringPolicy(sbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                common(logger, 0);
@@ -274,16 +270,16 @@ public:
                swrp->setMinIndex(0);
 
                
swrp->setFileNamePattern(LOG4CXX_STR("output/sizeBased-test5.%i"));
-               Pool p;
-               swrp->activateOptions(p);
+               swrp->activateOptions();
 
                rfa->setRollingPolicy(swrp);
                rfa->setTriggeringPolicy(sbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                //
                //   put stray file about locked file
+               Pool p;
                FileOutputStream os1(LOG4CXX_STR("output/sizeBased-test5.1"), 
false);
                os1.close(p);
 
@@ -346,11 +342,10 @@ public:
                fwrp->setMinIndex(0);
                rfa->setFile(LOG4CXX_STR("output/sbr-test6.log"));
                
fwrp->setFileNamePattern(LOG4CXX_STR("output/sbr-test6.%i.zip"));
-               Pool p;
-               fwrp->activateOptions(p);
+               fwrp->activateOptions();
                rfa->setRollingPolicy(fwrp);
                rfa->setTriggeringPolicy(sbtp);
-               rfa->activateOptions(p);
+               rfa->activateOptions();
                root->addAppender(rfa);
 
                common(logger, 100);
diff --git a/src/test/cpp/rolling/timebasedrollingtest.cpp 
b/src/test/cpp/rolling/timebasedrollingtest.cpp
index 1ae076b1..bd5a3bea 100644
--- a/src/test/cpp/rolling/timebasedrollingtest.cpp
+++ b/src/test/cpp/rolling/timebasedrollingtest.cpp
@@ -394,7 +394,6 @@ public:
         */
        void test1()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                LogString fnames[nrOfFnames];
 
@@ -405,11 +404,12 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp(new TimeBasedRollingPolicy());
                tbrp->setFileNamePattern(LOG4CXX_STR("" DIR_PRE_OUTPUT 
"test1-%d{" DATE_PATTERN "}"));
-               tbrp->activateOptions(pool);
+               tbrp->activateOptions();
                rfa->setRollingPolicy(tbrp);
-               rfa->activateOptions(pool);
+               rfa->activateOptions();
                logger->addAppender(rfa);
 
+               Pool      pool;
                this->buildTsFnames<4>(pool, LOG4CXX_STR("test1-"), fnames);
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(   pool, nrOfFnames + 1, __LOG4CXX_FUNC__, 
__LINE__);
@@ -422,7 +422,6 @@ public:
         */
        void test2()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                LogString fnames[nrOfFnames];
 
@@ -433,11 +432,12 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp1(new TimeBasedRollingPolicy());
                tbrp1->setFileNamePattern(LOG4CXX_STR("" DIR_PRE_OUTPUT 
"test2-%d{" DATE_PATTERN "}"));
-               tbrp1->activateOptions(pool);
+               tbrp1->activateOptions();
                rfa1->setRollingPolicy(tbrp1);
-               rfa1->activateOptions(pool);
+               rfa1->activateOptions();
                logger->addAppender(rfa1);
 
+               Pool      pool;
                this->buildTsFnames<4>(pool, LOG4CXX_STR("test2-"), fnames);
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(pool, 3, __LOG4CXX_FUNC__, __LINE__);
@@ -451,9 +451,9 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp2 = TimeBasedRollingPolicyPtr(new 
TimeBasedRollingPolicy());
                tbrp2->setFileNamePattern(LOG4CXX_STR("" DIR_PRE_OUTPUT 
"test2-%d{" DATE_PATTERN "}"));
-               tbrp2->activateOptions(pool);
+               tbrp2->activateOptions();
                rfa2->setRollingPolicy(tbrp2);
-               rfa2->activateOptions(pool);
+               rfa2->activateOptions();
                rfa2->setAppend(false);
                logger->addAppender(rfa2);
 
@@ -467,7 +467,6 @@ public:
         */
        void test3()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                LogString fnames[nrOfFnames];
 
@@ -478,11 +477,12 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp = TimeBasedRollingPolicyPtr(new 
TimeBasedRollingPolicy());
                tbrp->setFileNamePattern(LogString(LOG4CXX_STR("" 
DIR_PRE_OUTPUT "test3-%d{" DATE_PATTERN "}.gz")));
-               tbrp->activateOptions(pool);
+               tbrp->activateOptions();
                rfa->setRollingPolicy(tbrp);
-               rfa->activateOptions(pool);
+               rfa->activateOptions();
                logger->addAppender(rfa);
 
+               Pool pool;
                this->buildTsFnames<4>(pool, LOG4CXX_STR("test3-"), fnames, 
true);
                fnames[nrOfFnames - 1].resize(fnames[nrOfFnames - 1].size() - 
3);
                this->delayUntilNextSecondWithMsg();
@@ -499,7 +499,6 @@ public:
         */
        void test4()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                const int nrOfLogMsgs(((nrOfFnames - 1) * 2) - 1);
                LogString fnames[nrOfFnames];
@@ -510,12 +509,13 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp1 = TimeBasedRollingPolicyPtr(new 
TimeBasedRollingPolicy());
                tbrp1->setFileNamePattern(LOG4CXX_STR("" DIR_PRE_OUTPUT 
"test4-%d{" DATE_PATTERN "}"));
-               tbrp1->activateOptions(pool);
+               tbrp1->activateOptions();
                rfa1->setFile(LOG4CXX_STR("" DIR_PRE_OUTPUT "test4.log"));
                rfa1->setRollingPolicy(tbrp1);
-               rfa1->activateOptions(pool);
+               rfa1->activateOptions();
                logger->addAppender(rfa1);
 
+               Pool pool;
                this->delGenericLogFile(pool, rfa1->getFile());
                this->buildTsFnames<4>(pool, LOG4CXX_STR("test4-"), fnames);
                fnames[0].assign(rfa1->getFile());
@@ -531,10 +531,10 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp2 = TimeBasedRollingPolicyPtr(new 
TimeBasedRollingPolicy());
                tbrp2->setFileNamePattern(LOG4CXX_STR("" DIR_PRE_OUTPUT 
"test4-%d{" DATE_PATTERN "}"));
-               tbrp2->activateOptions(pool);
+               tbrp2->activateOptions();
                rfa2->setFile(rfa1->getFile());
                rfa2->setRollingPolicy(tbrp2);
-               rfa2->activateOptions(pool);
+               rfa2->activateOptions();
                logger->addAppender(rfa2);
 
                // The one file not checked is the active file from the old 
appender reused by the new one
@@ -552,7 +552,6 @@ public:
         */
        void test5()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                const int nrOfLogMsgs((nrOfFnames * 2) - 1);
                LogString fnames[nrOfFnames];
@@ -565,11 +564,12 @@ public:
                tbrp->setFileNamePattern(LOG4CXX_STR("" DIR_PRE_OUTPUT 
"test5-%d{" DATE_PATTERN "}"));
                rfa->setFile(LOG4CXX_STR("" DIR_PRE_OUTPUT "test5.log"));
 
-               tbrp->activateOptions(pool);
+               tbrp->activateOptions();
                rfa->setRollingPolicy(tbrp);
-               rfa->activateOptions(pool);
+               rfa->activateOptions();
                logger->addAppender(rfa);
 
+               Pool pool;
                this->delGenericLogFile(pool, rfa->getFile());
                this->buildTsFnames<4>(pool, LOG4CXX_STR("test5-"), fnames);
                fnames[0].assign(rfa->getFile());
@@ -584,7 +584,6 @@ public:
         */
        void test6()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                const int nrOfLogMsgs((nrOfFnames * 2) - 1);
                LogString fnames[nrOfFnames];
@@ -597,11 +596,12 @@ public:
                TimeBasedRollingPolicyPtr tbrp = TimeBasedRollingPolicyPtr(new 
TimeBasedRollingPolicy());
                tbrp->setFileNamePattern(LogString(LOG4CXX_STR("" 
DIR_PRE_OUTPUT "test6-%d{" DATE_PATTERN "}.gz")));
                rfa->setFile(LOG4CXX_STR("" DIR_PRE_OUTPUT "test6.log"));
-               tbrp->activateOptions(pool);
+               tbrp->activateOptions();
                rfa->setRollingPolicy(tbrp);
-               rfa->activateOptions(pool);
+               rfa->activateOptions();
                logger->addAppender(rfa);
 
+               Pool pool;
                this->delGenericLogFile(pool, rfa->getFile());
                this->buildTsFnames<4>(pool, LOG4CXX_STR("test6-"), fnames, 
true);
                fnames[0].assign(rfa->getFile());
@@ -644,7 +644,6 @@ public:
 
        void rollIntoDir()
        {
-               Pool      pool;
                const int nrOfFnames(4);
                const int nrOfLogMsgs((nrOfFnames * 2) - 1);
                LogString fnames[nrOfFnames];
@@ -668,13 +667,14 @@ public:
 
                TimeBasedRollingPolicyPtr tbrp(new TimeBasedRollingPolicy());
                tbrp->setFileNamePattern(filenamePattern);
-               tbrp->activateOptions(pool);
+               tbrp->activateOptions();
                rfa->setRollingPolicy(tbrp);
-               rfa->activateOptions(pool);
+               rfa->activateOptions();
                logger->addAppender(rfa);
 
                const logchar* prefix = 
directoryName.append(LOG4CXX_STR("/file-")).data();
 
+               Pool pool;
                this->delGenericLogFile(pool, rfa->getFile());
                this->buildTsFnames<4>(pool, prefix, fnames);
                fnames[0].assign(rfa->getFile());
diff --git a/src/test/cpp/throughput/log4cxxbenchmarker.cpp 
b/src/test/cpp/throughput/log4cxxbenchmarker.cpp
index 42fedbfb..3c17f0cc 100644
--- a/src/test/cpp/throughput/log4cxxbenchmarker.cpp
+++ b/src/test/cpp/throughput/log4cxxbenchmarker.cpp
@@ -51,11 +51,6 @@ class NullWriterAppender : public log4cxx::AppenderSkeleton
                        // This gets called whenever there is a valid event for 
our appender.
                }
 
-               void activateOptions(log4cxx::helpers::Pool& /* pool */) 
override
-               {
-                       // Given all of our options, do something useful(e.g. 
open a file)
-               }
-
                void setOption(const LogString& option, const LogString& value) 
override
                {
                }
diff --git a/src/test/cpp/varia/errorhandlertestcase.cpp 
b/src/test/cpp/varia/errorhandlertestcase.cpp
index 5a479258..fa1ad06d 100644
--- a/src/test/cpp/varia/errorhandlertestcase.cpp
+++ b/src/test/cpp/varia/errorhandlertestcase.cpp
@@ -94,8 +94,7 @@ public:
                LOGUNIT_ASSERT(eh != 0);
 
                primary->setOption(LOG4CXX_STR("FILE"), BadPath);
-               Pool p;
-               primary->activateOptions(p);
+               primary->activateOptions();
                LOGUNIT_ASSERT(eh->errorReported());
 
                common();
@@ -140,8 +139,7 @@ public:
                eh->setLogger(logger);
 
                primary->setOption(LOG4CXX_STR("FILE"), BadPath);
-               Pool p;
-               primary->activateOptions(p);
+               primary->activateOptions();
                LOGUNIT_ASSERT(eh->errorReported());
 
                common();
diff --git a/src/test/cpp/xml/xmllayouttest.cpp 
b/src/test/cpp/xml/xmllayouttest.cpp
index e8f185b8..326fe940 100644
--- a/src/test/cpp/xml/xmllayouttest.cpp
+++ b/src/test/cpp/xml/xmllayouttest.cpp
@@ -361,9 +361,8 @@ public:
         */
        void testActivateOptions()
        {
-               Pool p;
                XMLLayout layout;
-               layout.activateOptions(p);
+               layout.activateOptions();
        }
 
        /**

Reply via email to