You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rm...@apache.org on 2026/01/31 00:29:33 UTC

(logging-log4cxx) branch refactor-apr-classes updated: more removal of pool

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

rmiddleton pushed a commit to branch refactor-apr-classes
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git


The following commit(s) were added to refs/heads/refactor-apr-classes by this push:
     new 4c6a8793 more removal of pool
4c6a8793 is described below

commit 4c6a8793d475224b373f9f6e2a1738bf84ae35d1
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Jan 30 19:20:21 2026 -0500

    more removal of pool
---
 src/main/cpp/action.cpp                            |   4 +-
 src/main/cpp/appenderattachableimpl.cpp            |   4 +-
 src/main/cpp/appenderskeleton.cpp                  |   8 +-
 src/main/cpp/aprinitializer.cpp                    |   2 +-
 src/main/cpp/asyncappender.cpp                     |  38 ++--
 src/main/cpp/bufferedwriter.cpp                    |  16 +-
 src/main/cpp/bytearrayoutputstream.cpp             |   6 +-
 src/main/cpp/cacheddateformat.cpp                  |  20 +-
 src/main/cpp/classnamepatternconverter.cpp         |   3 +-
 src/main/cpp/colorendpatternconverter.cpp          |   3 +-
 src/main/cpp/colorstartpatternconverter.cpp        |  26 ++-
 src/main/cpp/consoleappender.cpp                   |  14 +-
 src/main/cpp/cyclicbuffer.cpp                      |  10 +-
 src/main/cpp/dateformat.cpp                        |   4 +-
 src/main/cpp/datepatternconverter.cpp              |  17 +-
 src/main/cpp/defaultconfigurator.cpp               |  13 +-
 src/main/cpp/exception.cpp                         |  19 +-
 src/main/cpp/fallbackerrorhandler.cpp              |   2 +-
 src/main/cpp/file.cpp                              | 180 ++++-------------
 src/main/cpp/fileappender.cpp                      |  30 ++-
 src/main/cpp/fileinputstream.cpp                   |  64 +++---
 src/main/cpp/filelocationpatternconverter.cpp      |   3 +-
 src/main/cpp/fileoutputstream.cpp                  |  99 +++-------
 src/main/cpp/filerenameaction.cpp                  |   4 +-
 src/main/cpp/filewatchdog.cpp                      |  16 +-
 src/main/cpp/filter.cpp                            |   2 +-
 src/main/cpp/filterbasedtriggeringpolicy.cpp       |   4 +-
 src/main/cpp/fixedwindowrollingpolicy.cpp          |  34 ++--
 src/main/cpp/gzcompressaction.cpp                  | 216 ++++++++++-----------
 src/main/cpp/inputstreamreader.cpp                 |   4 +-
 src/main/cpp/integerpatternconverter.cpp           |   5 +-
 src/main/cpp/manualtriggeringpolicy.cpp            |   2 +-
 src/main/cpp/odbcappender.cpp                      |  16 +-
 src/main/cpp/onlyonceerrorhandler.cpp              |   2 +-
 src/main/cpp/outputstreamwriter.cpp                |  16 +-
 src/main/cpp/patternlayout.cpp                     |  15 +-
 src/main/cpp/rollingpolicybase.cpp                 |   7 +-
 src/main/cpp/simpledateformat.cpp                  |  38 ++--
 src/main/cpp/sizebasedtriggeringpolicy.cpp         |   2 +-
 src/main/cpp/smtpappender.cpp                      |  10 +-
 src/main/cpp/socketappenderskeleton.cpp            |  34 ++--
 src/main/cpp/stringhelper.cpp                      |   4 +-
 src/main/cpp/syslogappender.cpp                    |  13 +-
 src/main/cpp/systemerrwriter.cpp                   |   6 +-
 src/main/cpp/systemoutwriter.cpp                   |  14 +-
 src/main/cpp/telnetappender.cpp                    |  23 +--
 src/main/cpp/writerappender.cpp                    |  25 ++-
 src/main/cpp/zipcompressaction.cpp                 | 174 ++++++++---------
 src/main/include/log4cxx/appender.h                |   3 +-
 src/main/include/log4cxx/appenderskeleton.h        |   8 +-
 src/main/include/log4cxx/asyncappender.h           |   5 +-
 src/main/include/log4cxx/consoleappender.h         |   2 +-
 src/main/include/log4cxx/db/odbcappender.h         |  20 +-
 src/main/include/log4cxx/file.h                    |  50 ++---
 src/main/include/log4cxx/fileappender.h            |  14 +-
 .../log4cxx/helpers/appenderattachableimpl.h       |   3 +-
 src/main/include/log4cxx/helpers/bufferedwriter.h  |   6 +-
 .../log4cxx/helpers/bytearrayoutputstream.h        |   6 +-
 .../include/log4cxx/helpers/cacheddateformat.h     |  18 +-
 src/main/include/log4cxx/helpers/dateformat.h      |  10 +-
 .../include/log4cxx/helpers/fileoutputstream.h     |  11 +-
 .../include/log4cxx/helpers/inputstreamreader.h    |   6 +-
 .../include/log4cxx/helpers/onlyonceerrorhandler.h |   2 +-
 src/main/include/log4cxx/helpers/outputstream.h    |   6 +-
 .../include/log4cxx/helpers/outputstreamwriter.h   |   6 +-
 src/main/include/log4cxx/helpers/reader.h          |  10 +-
 .../include/log4cxx/helpers/simpledateformat.h     |   3 +-
 .../include/log4cxx/helpers/strftimedateformat.h   |   3 +-
 src/main/include/log4cxx/helpers/stringhelper.h    |   7 +-
 src/main/include/log4cxx/helpers/systemerrwriter.h |  10 +-
 src/main/include/log4cxx/helpers/systemoutwriter.h |  10 +-
 src/main/include/log4cxx/helpers/writer.h          |   6 +-
 src/main/include/log4cxx/log4cxx.h.in              |   6 +-
 src/main/include/log4cxx/net/smtpappender.h        |   6 +-
 .../include/log4cxx/net/socketappenderskeleton.h   |   8 +-
 src/main/include/log4cxx/net/syslogappender.h      |   4 +-
 src/main/include/log4cxx/net/telnetappender.h      |   6 +-
 .../log4cxx/pattern/classnamepatternconverter.h    |   3 +-
 .../log4cxx/pattern/colorendpatternconverter.h     |   3 +-
 .../log4cxx/pattern/colorstartpatternconverter.h   |   3 +-
 .../include/log4cxx/pattern/datepatternconverter.h |   9 +-
 .../log4cxx/pattern/filelocationpatternconverter.h |   3 +-
 .../log4cxx/pattern/integerpatternconverter.h      |   3 +-
 .../log4cxx/pattern/loggingeventpatternconverter.h |   9 +-
 .../include/log4cxx/pattern/patternconverter.h     |   6 +-
 src/main/include/log4cxx/patternlayout.h           |   2 +-
 .../log4cxx/private/appenderskeleton_priv.h        |   1 -
 .../include/log4cxx/private/writerappender_priv.h  |   2 +-
 src/main/include/log4cxx/rolling/action.h          |   4 +-
 .../include/log4cxx/rolling/filerenameaction.h     |   2 +-
 .../log4cxx/rolling/filterbasedtriggeringpolicy.h  |   7 +-
 .../log4cxx/rolling/fixedwindowrollingpolicy.h     |  15 +-
 .../include/log4cxx/rolling/gzcompressaction.h     |   2 +-
 .../log4cxx/rolling/manualtriggeringpolicy.h       |   2 +-
 src/main/include/log4cxx/rolling/rollingpolicy.h   |  12 +-
 .../include/log4cxx/rolling/rollingpolicybase.h    |   7 +-
 .../log4cxx/rolling/sizebasedtriggeringpolicy.h    |   2 +-
 .../include/log4cxx/rolling/zipcompressaction.h    |   2 +-
 src/main/include/log4cxx/spi/filter.h              |   2 +-
 src/main/include/log4cxx/spi/optionhandler.h       |   2 +-
 .../include/log4cxx/varia/fallbackerrorhandler.h   |   2 +-
 src/main/include/log4cxx/writerappender.h          |  10 +-
 src/test/cpp/util/compare.cpp                      |  23 +--
 src/test/cpp/util/compare.h                        |   3 +-
 src/test/cpp/vectorappender.cpp                    |   2 +-
 src/test/cpp/vectorappender.h                      |   2 +-
 106 files changed, 695 insertions(+), 976 deletions(-)

diff --git a/src/main/cpp/action.cpp b/src/main/cpp/action.cpp
index ccc31d4a..e9defc20 100644
--- a/src/main/cpp/action.cpp
+++ b/src/main/cpp/action.cpp
@@ -41,7 +41,7 @@ Action::~Action()
 /**
  * {@inheritDoc}
  */
-void Action::run(LOG4CXX_NS::helpers::Pool& pool1)
+void Action::run()
 {
 	std::lock_guard<std::mutex> lock(m_priv->mutex);
 
@@ -49,7 +49,7 @@ void Action::run(LOG4CXX_NS::helpers::Pool& pool1)
 	{
 		try
 		{
-			execute(pool1);
+            execute();
 		}
 		catch (std::exception& ex)
 		{
diff --git a/src/main/cpp/appenderattachableimpl.cpp b/src/main/cpp/appenderattachableimpl.cpp
index 304b7061..ee57165c 100644
--- a/src/main/cpp/appenderattachableimpl.cpp
+++ b/src/main/cpp/appenderattachableimpl.cpp
@@ -96,7 +96,7 @@ void AppenderAttachableImpl::addAppender(const AppenderPtr newAppender)
 		m_priv = std::make_unique<priv_data>(AppenderList{newAppender});
 }
 
-int AppenderAttachableImpl::appendLoopOnAppenders(const spi::LoggingEventPtr& event, Pool& p)
+int AppenderAttachableImpl::appendLoopOnAppenders(const spi::LoggingEventPtr& event)
 {
 	int result = 0;
 	if (m_priv)
@@ -104,7 +104,7 @@ int AppenderAttachableImpl::appendLoopOnAppenders(const spi::LoggingEventPtr& ev
 		auto allAppenders = m_priv->getAppenders();
 		for (auto& appender : *allAppenders)
 		{
-			appender->doAppend(event, p);
+            appender->doAppend(event);
 			++result;
 		}
 	}
diff --git a/src/main/cpp/appenderskeleton.cpp b/src/main/cpp/appenderskeleton.cpp
index 7f63cd0f..3b0ab572 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -88,14 +88,14 @@ bool AppenderSkeleton::isAsSevereAsThreshold(const LevelPtr& level) const
 	return ((level == 0) || level->isGreaterOrEqual(m_priv->threshold));
 }
 
-void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
+void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event)
 {
 	std::lock_guard<std::recursive_mutex> lock(m_priv->mutex);
 
-	doAppendImpl(event, pool1);
+    doAppendImpl(event);
 }
 
-void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& pool)
+void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event)
 {
 	if (m_priv->closed)
 	{
@@ -104,7 +104,7 @@ void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& poo
 	}
 	else if (isAsSevereAsThreshold(event->getLevel()) && isAccepted(event))
 	{
-		append(event, pool);
+        append(event);
 	}
 }
 
diff --git a/src/main/cpp/aprinitializer.cpp b/src/main/cpp/aprinitializer.cpp
index 6f11aea1..8ae85d3f 100644
--- a/src/main/cpp/aprinitializer.cpp
+++ b/src/main/cpp/aprinitializer.cpp
@@ -44,7 +44,7 @@ using IdentifiedObject = std::pair<size_t, ObjectPtr>;
 struct APRInitializer::APRInitializerPrivate{
 	APRInitializerPrivate() :
 		p(0),
-		startTime(0),
+        startTime(std::chrono::system_clock::now()),
 		tlsKey(0){
 
 	}
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index 8443d46f..b8bc3a39 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -104,12 +104,11 @@ class DiscardSummary
 		 *
 		 * @return the new event.
 		 */
-		LoggingEventPtr createEvent(Pool& p);
+        LoggingEventPtr createEvent();
 
 #if LOG4CXX_ABI_VERSION <= 15
 		static
-		::LOG4CXX_NS::spi::LoggingEventPtr createEvent(::LOG4CXX_NS::helpers::Pool& p,
-			size_t discardedCount);
+        ::LOG4CXX_NS::spi::LoggingEventPtr createEvent(size_t discardedCount);
 #endif
 
 		/**
@@ -297,16 +296,16 @@ void AsyncAppender::setOption(const LogString& option,
 }
 
 
-void AsyncAppender::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
+void AsyncAppender::doAppend(const spi::LoggingEventPtr& event)
 {
-	doAppendImpl(event, pool1);
+    doAppendImpl(event);
 }
 
-void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
+void AsyncAppender::append(const spi::LoggingEventPtr& event)
 {
 	if (priv->bufferSize <= 0)
 	{
-		priv->appenders.appendLoopOnAppenders(event, p);
+        priv->appenders.appendLoopOnAppenders(event);
 		return;
 	}
 
@@ -535,10 +534,10 @@ void DiscardSummary::add(const LoggingEventPtr& event)
 	++this->count;
 }
 
-LoggingEventPtr DiscardSummary::createEvent(Pool& p)
+LoggingEventPtr DiscardSummary::createEvent()
 {
 	LogString msg(LOG4CXX_STR("Discarded "));
-	StringHelper::toString(this->count, p, msg);
+    StringHelper::toString(this->count, msg);
 	msg.append(LOG4CXX_STR(" messages ") + this->reason + LOG4CXX_STR(" including: "));
 	msg.append(this->maxEvent->getRenderedMessage());
 	return std::make_shared<LoggingEvent>
@@ -551,11 +550,10 @@ LoggingEventPtr DiscardSummary::createEvent(Pool& p)
 
 #if LOG4CXX_ABI_VERSION <= 15
 ::LOG4CXX_NS::spi::LoggingEventPtr
-DiscardSummary::createEvent(::LOG4CXX_NS::helpers::Pool& p,
-	size_t discardedCount)
+DiscardSummary::createEvent(size_t discardedCount)
 {
 	LogString msg(LOG4CXX_STR("Discarded "));
-	StringHelper::toString(discardedCount, p, msg);
+    StringHelper::toString(discardedCount, msg);
 	msg.append(LOG4CXX_STR(" messages due to a full event buffer"));
 
 	return std::make_shared<LoggingEvent>(
@@ -577,8 +575,7 @@ void AsyncAppender::dispatch()
 	bool isActive = true;
 
 	while (isActive)
-	{
-		Pool p;
+    {
 		LoggingEventList events;
 		events.reserve(priv->bufferSize);
 		for (int count = 0; count < 2 && priv->dispatchedCount == priv->commitCount; ++count)
@@ -608,7 +605,7 @@ void AsyncAppender::dispatch()
 			blockedCount += priv->blockedCount;
 			for (auto& discardItem : priv->discardMap)
 			{
-				events.push_back(discardItem.second.createEvent(p));
+                events.push_back(discardItem.second.createEvent());
 				discardCount += discardItem.second.getCount();
 			}
 			priv->discardMap.clear();
@@ -618,7 +615,7 @@ void AsyncAppender::dispatch()
 		{
 			try
 			{
-				priv->appenders.appendLoopOnAppenders(item, p);
+                priv->appenders.appendLoopOnAppenders(item);
 			}
 			catch (std::exception& ex)
 			{
@@ -640,8 +637,7 @@ void AsyncAppender::dispatch()
 		++iterationCount;
 	}
 	if (LogLog::isDebugEnabled())
-	{
-		Pool p;
+    {
 		LogString msg(LOG4CXX_STR("[") + getName() + LOG4CXX_STR("] AsyncAppender"));
 #ifdef _DEBUG
 		msg += LOG4CXX_STR(" iterationCount ");
@@ -654,14 +650,14 @@ void AsyncAppender::dispatch()
 		StringHelper::toString(priv->commitCount, p, msg);
 #endif
 		msg += LOG4CXX_STR(" dispatchedCount ");
-		StringHelper::toString(priv->dispatchedCount, p, msg);
+        StringHelper::toString(priv->dispatchedCount, msg);
 		msg += LOG4CXX_STR(" discardCount ");
-		StringHelper::toString(discardCount, p, msg);
+        StringHelper::toString(discardCount, msg);
 		msg += LOG4CXX_STR(" pendingCountHistogram");
 		for (auto item : pendingCountHistogram)
 		{
 			msg += logchar(' ');
-			StringHelper::toString(item, p, msg);
+            StringHelper::toString(item,  msg);
 		}
 		LogLog::debug(msg);
 	}
diff --git a/src/main/cpp/bufferedwriter.cpp b/src/main/cpp/bufferedwriter.cpp
index 0b9f70cb..927ca85b 100644
--- a/src/main/cpp/bufferedwriter.cpp
+++ b/src/main/cpp/bufferedwriter.cpp
@@ -49,32 +49,32 @@ BufferedWriter::~BufferedWriter()
 {
 }
 
-void BufferedWriter::close(Pool& p)
+void BufferedWriter::close()
 {
-	flush(p);
-	m_priv->out->close(p);
+    flush();
+    m_priv->out->close();
 }
 
-void BufferedWriter::flush(Pool& p)
+void BufferedWriter::flush()
 {
 	if (m_priv->buf.length() > 0)
 	{
-		m_priv->out->write(m_priv->buf, p);
+        m_priv->out->write(m_priv->buf);
 		m_priv->buf.erase(m_priv->buf.begin(), m_priv->buf.end());
 	}
 }
 
-void BufferedWriter::write(const LogString& str, Pool& p)
+void BufferedWriter::write(const LogString& str)
 {
 	if (m_priv->buf.length() + str.length() > m_priv->sz)
 	{
-		m_priv->out->write(m_priv->buf, p);
+        m_priv->out->write(m_priv->buf);
 		m_priv->buf.erase(m_priv->buf.begin(), m_priv->buf.end());
 	}
 
 	if (str.length() > m_priv->sz)
 	{
-		m_priv->out->write(str, p);
+        m_priv->out->write(str);
 	}
 	else
 	{
diff --git a/src/main/cpp/bytearrayoutputstream.cpp b/src/main/cpp/bytearrayoutputstream.cpp
index 8df3c2e6..1e42dfcb 100644
--- a/src/main/cpp/bytearrayoutputstream.cpp
+++ b/src/main/cpp/bytearrayoutputstream.cpp
@@ -39,15 +39,15 @@ ByteArrayOutputStream::~ByteArrayOutputStream()
 {
 }
 
-void ByteArrayOutputStream::close(Pool& /* p */)
+void ByteArrayOutputStream::close()
 {
 }
 
-void ByteArrayOutputStream::flush(Pool& /* p */)
+void ByteArrayOutputStream::flush()
 {
 }
 
-void ByteArrayOutputStream::write(ByteBuffer& buf, Pool& /* p */ )
+void ByteArrayOutputStream::write(ByteBuffer& buf)
 {
 	size_t sz = m_priv->array.size();
 	m_priv->array.resize(sz + buf.remaining());
diff --git a/src/main/cpp/cacheddateformat.cpp b/src/main/cpp/cacheddateformat.cpp
index 197f94cf..d7a37be9 100644
--- a/src/main/cpp/cacheddateformat.cpp
+++ b/src/main/cpp/cacheddateformat.cpp
@@ -151,11 +151,11 @@ CachedDateFormat::~CachedDateFormat() {}
  */
 int CachedDateFormat::findMillisecondStart(
 	log4cxx_time_t time, const LogString& formatted,
-	const DateFormatPtr& formatter,
-	Pool& pool)
+    const DateFormatPtr& formatter)
 {
 
-	log4cxx_time_t slotBegin = (time / 1000000) * 1000000;
+    uint64_t slotBegin = (std::chrono::duration_cast<std::chrono::milliseconds>(time.time_since_epoch()) / 1000000) * 1000000;
+    uint64_t time_u64 = std::chrono::duration_cast<std::chrono::milliseconds>(time.time_since_epoch());
 
 	if (slotBegin > time)
 	{
@@ -175,7 +175,7 @@ int CachedDateFormat::findMillisecondStart(
 	}
 
 	LogString plusMagic;
-	formatter->format(plusMagic, slotBegin + magic, pool);
+    formatter->format(plusMagic, slotBegin + magic);
 
 	/**
 	 *   If the string lengths differ then
@@ -199,7 +199,7 @@ int CachedDateFormat::findMillisecondStart(
 				millisecondFormat(millis, formattedMillis, 0);
 
 				LogString plusZero;
-				formatter->format(plusZero, slotBegin, pool);
+                formatter->format(plusZero, slotBegin);
 
 				// Test if the next 1..3 characters match the magic string, main problem is that magic
 				// available millis in formatted can overlap. Therefore the current i is not always the
@@ -240,7 +240,7 @@ int CachedDateFormat::findMillisecondStart(
  *  @param now Number of milliseconds after midnight 1 Jan 1970 GMT.
  *  @param sbuf the string buffer to write to
  */
-void CachedDateFormat::format(LogString& buf, log4cxx_time_t now, Pool& p) const
+void CachedDateFormat::format(LogString& buf, log4cxx_time_t now) const
 {
 
 	//
@@ -288,7 +288,7 @@ void CachedDateFormat::format(LogString& buf, log4cxx_time_t now, Pool& p) const
 	//  could not use previous value.
 	//    Call underlying formatter to format date.
 	m_priv->cache.erase(m_priv->cache.begin(), m_priv->cache.end());
-	m_priv->formatter->format(m_priv->cache, now, p);
+    m_priv->formatter->format(m_priv->cache, now);
 	buf.append(m_priv->cache);
 	m_priv->previousTime = now;
 	m_priv->slotBegin = (m_priv->previousTime / 1000000) * 1000000;
@@ -304,7 +304,7 @@ void CachedDateFormat::format(LogString& buf, log4cxx_time_t now, Pool& p) const
 	//
 	if (m_priv->millisecondStart >= 0)
 	{
-		m_priv->millisecondStart = findMillisecondStart(now, m_priv->cache, m_priv->formatter, p);
+        m_priv->millisecondStart = findMillisecondStart(now, m_priv->cache, m_priv->formatter);
 	}
 }
 
@@ -340,9 +340,9 @@ void CachedDateFormat::setTimeZone(const TimeZonePtr& timeZone)
 
 
 
-void CachedDateFormat::numberFormat(LogString& s, int n, Pool& p) const
+void CachedDateFormat::numberFormat(LogString& s, int n) const
 {
-	m_priv->formatter->numberFormat(s, n, p);
+    m_priv->formatter->numberFormat(s, n);
 }
 
 
diff --git a/src/main/cpp/classnamepatternconverter.cpp b/src/main/cpp/classnamepatternconverter.cpp
index 27226aaf..767723fe 100644
--- a/src/main/cpp/classnamepatternconverter.cpp
+++ b/src/main/cpp/classnamepatternconverter.cpp
@@ -48,8 +48,7 @@ PatternConverterPtr ClassNamePatternConverter::newInstance(
 
 void ClassNamePatternConverter::format(
 	const LoggingEventPtr& event,
-	LogString& toAppendTo,
-	Pool& /* p */) const
+    LogString& toAppendTo) const
 {
 	int initialLength = (int)toAppendTo.length();
 	append(toAppendTo, event->getLocationInformation().getClassName());
diff --git a/src/main/cpp/colorendpatternconverter.cpp b/src/main/cpp/colorendpatternconverter.cpp
index 6f9ac19e..4bda1146 100644
--- a/src/main/cpp/colorendpatternconverter.cpp
+++ b/src/main/cpp/colorendpatternconverter.cpp
@@ -43,8 +43,7 @@ PatternConverterPtr ColorEndPatternConverter::newInstance(
 
 void ColorEndPatternConverter::format(
 	const LoggingEventPtr& event,
-	LogString& toAppendTo,
-	Pool& p) const
+    LogString& toAppendTo) const
 {
 
 	// Reset all colors on the output(code 0)
diff --git a/src/main/cpp/colorstartpatternconverter.cpp b/src/main/cpp/colorstartpatternconverter.cpp
index daef2db2..d634b85d 100644
--- a/src/main/cpp/colorstartpatternconverter.cpp
+++ b/src/main/cpp/colorstartpatternconverter.cpp
@@ -31,7 +31,7 @@ IMPLEMENT_LOG4CXX_OBJECT(ColorStartPatternConverter)
 
 #define priv static_cast<ColorPatternConverterPrivate*>(m_priv.get())
 
-static LogString colorToANSISequence(const LogString& color, bool isForeground, Pool& pool){
+static LogString colorToANSISequence(const LogString& color, bool isForeground){
 	int numberToConvert = 0;
 
 	if(StringHelper::equalsIgnoreCase(color, LOG4CXX_STR("BLACK"), LOG4CXX_STR("black"))){
@@ -59,11 +59,11 @@ static LogString colorToANSISequence(const LogString& color, bool isForeground,
 	if( isForeground == false ){
 		numberToConvert += 10;
 	}
-	StringHelper::toString(numberToConvert, pool, ret);
+    StringHelper::toString(numberToConvert, ret);
 	return ret;
 }
 
-static LogString graphicsModeToANSISequence(const LogString& graphicsMode, Pool& pool){
+static LogString graphicsModeToANSISequence(const LogString& graphicsMode){
 	int numberToConvert = 0;
 
 	if(StringHelper::equalsIgnoreCase(graphicsMode, LOG4CXX_STR("BOLD"), LOG4CXX_STR("bold"))){
@@ -86,11 +86,11 @@ static LogString graphicsModeToANSISequence(const LogString& graphicsMode, Pool&
 		return LOG4CXX_STR("");
 	}
 	LogString ret;
-	StringHelper::toString(numberToConvert, pool, ret);
+    StringHelper::toString(numberToConvert, ret);
 	return ret;
 }
 
-static LogString convertSingleSequence(const LogString& sequence, Pool& pool){
+static LogString convertSingleSequence(const LogString& sequence){
 	LogString strInParens;
 	bool inParens = false;
 	bool hasParens = false;
@@ -124,11 +124,11 @@ static LogString convertSingleSequence(const LogString& sequence, Pool& pool){
 
 	if(StringHelper::startsWith(sequence, LOG4CXX_STR("fg("))){
 		// Parse foreground
-		return colorToANSISequence(strInParens, true, pool);
+        return colorToANSISequence(strInParens, true);
 	}else if(StringHelper::startsWith(sequence, LOG4CXX_STR("bg("))){
-		return colorToANSISequence(strInParens, false, pool);
+        return colorToANSISequence(strInParens, false);
 	}else{
-		return graphicsModeToANSISequence(sequence, pool);
+        return graphicsModeToANSISequence(sequence);
 	}
 }
 
@@ -160,8 +160,7 @@ PatternConverterPtr ColorStartPatternConverter::newInstance(
 
 void ColorStartPatternConverter::format(
 	const LoggingEventPtr& event,
-	LogString& toAppendTo,
-	Pool& p) const
+    LogString& toAppendTo) const
 {
 
 	LOG4CXX_NS::LevelPtr lvl = event->getLevel();
@@ -222,8 +221,7 @@ void ColorStartPatternConverter::setTraceColor(const LogString& color){
 }
 
 void ColorStartPatternConverter::parseColor(const LogString& color, LogString* result){
-	LogString lower = StringHelper::toLowerCase(color);
-	Pool pool;
+    LogString lower = StringHelper::toLowerCase(color);
 
 	// If the color we are trying to parse is blank, clear our result
 	if(StringHelper::trim(color).empty() ||
@@ -256,7 +254,7 @@ void ColorStartPatternConverter::parseColor(const LogString& color, LogString* r
 		LogString tmp;
 		for( size_t x = 0; x < color.size(); x++ ){
 			if(color[x] == '|' ){
-				LogString toAppend = convertSingleSequence(tmp, pool);
+                LogString toAppend = convertSingleSequence(tmp);
 				tmp.clear();
 				if(!toAppend.empty()){
 					result->push_back(';');
@@ -266,7 +264,7 @@ void ColorStartPatternConverter::parseColor(const LogString& color, LogString* r
 				tmp.push_back(color[x]);
 			}
 		}
-		LogString toAppend = convertSingleSequence(tmp, pool);
+        LogString toAppend = convertSingleSequence(tmp);
 		tmp.clear();
 		if(!toAppend.empty()){
 			result->push_back(';');
diff --git a/src/main/cpp/consoleappender.cpp b/src/main/cpp/consoleappender.cpp
index 9e5b5b83..f4caedf7 100644
--- a/src/main/cpp/consoleappender.cpp
+++ b/src/main/cpp/consoleappender.cpp
@@ -48,19 +48,17 @@ ConsoleAppender::ConsoleAppender()
 ConsoleAppender::ConsoleAppender(const LayoutPtr& layout)
 	: WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
 {
-	setLayout(layout);
-	Pool p;
+    setLayout(layout);
 	setWriter(std::make_shared<SystemOutWriter>());
-	WriterAppender::activateOptions(p);
+    WriterAppender::activateOptions();
 }
 
 ConsoleAppender::ConsoleAppender(const LayoutPtr& layout, const LogString& target)
 	: WriterAppender (std::make_unique<ConsoleAppenderPriv>(target))
 {
 	setLayout(layout);
-	setTarget(target);
-	Pool p;
-	ConsoleAppender::activateOptions(p);
+    setTarget(target);
+    ConsoleAppender::activateOptions();
 }
 
 ConsoleAppender::~ConsoleAppender()
@@ -112,7 +110,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()
 {
 	if (StringHelper::equalsIgnoreCase(_priv->target,
 			LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
@@ -127,7 +125,7 @@ void ConsoleAppender::activateOptions(Pool& p)
 		setWriter(writer1);
 	}
 
-	WriterAppender::activateOptions(p);
+    WriterAppender::activateOptions();
 }
 
 void ConsoleAppender::setOption(const LogString& option, const LogString& value)
diff --git a/src/main/cpp/cyclicbuffer.cpp b/src/main/cpp/cyclicbuffer.cpp
index b27653c0..b3b9d4ff 100644
--- a/src/main/cpp/cyclicbuffer.cpp
+++ b/src/main/cpp/cyclicbuffer.cpp
@@ -47,9 +47,8 @@ CyclicBuffer::CyclicBuffer(int maxSize1)
 {
 	if (maxSize1 < 1)
 	{
-		LogString msg(LOG4CXX_STR("The maxSize argument ("));
-		Pool p;
-		StringHelper::toString(maxSize1, p, msg);
+        LogString msg(LOG4CXX_STR("The maxSize argument ("));
+        StringHelper::toString(maxSize1, msg);
 		msg.append(LOG4CXX_STR(") is not a positive integer."));
 		throw IllegalArgumentException(msg);
 	}
@@ -128,9 +127,8 @@ void CyclicBuffer::resize(int newSize)
 {
 	if (newSize < 0)
 	{
-		LogString msg(LOG4CXX_STR("Negative array size ["));
-		Pool p;
-		StringHelper::toString(newSize, p, msg);
+        LogString msg(LOG4CXX_STR("Negative array size ["));
+        StringHelper::toString(newSize, msg);
 		msg.append(LOG4CXX_STR("] not allowed."));
 		throw IllegalArgumentException(msg);
 	}
diff --git a/src/main/cpp/dateformat.cpp b/src/main/cpp/dateformat.cpp
index b2a91e98..25b8a351 100644
--- a/src/main/cpp/dateformat.cpp
+++ b/src/main/cpp/dateformat.cpp
@@ -29,9 +29,9 @@ DateFormat::~DateFormat() {}
 
 void DateFormat::setTimeZone(const TimeZonePtr&) {}
 
-void DateFormat::numberFormat(LogString& s, int n, Pool& p) const
+void DateFormat::numberFormat(LogString& s, int n) const
 {
-	StringHelper::toString(n, p, s);
+    StringHelper::toString(n, s);
 }
 
 DateFormat::DateFormat() {}
diff --git a/src/main/cpp/datepatternconverter.cpp b/src/main/cpp/datepatternconverter.cpp
index 9f20d9ce..5e4314b9 100644
--- a/src/main/cpp/datepatternconverter.cpp
+++ b/src/main/cpp/datepatternconverter.cpp
@@ -146,10 +146,9 @@ PatternConverterPtr DatePatternConverter::newInstance(
 
 void DatePatternConverter::format(
 	const LoggingEventPtr& event,
-	LogString& toAppendTo,
-	Pool& p) const
+    LogString& toAppendTo) const
 {
-	priv->df->format(toAppendTo, event->getTimeStamp(), p);
+    priv->df->format(toAppendTo, event->getTimeStamp());
 }
 
 /**
@@ -157,14 +156,13 @@ void DatePatternConverter::format(
  */
 void DatePatternConverter::format(
 	const ObjectPtr& obj,
-	LogString& toAppendTo,
-	Pool& p) const
+    LogString& toAppendTo) const
 {
 	DatePtr date = LOG4CXX_NS::cast<Date>(obj);
 
 	if (date != NULL)
 	{
-		format(date, toAppendTo, p);
+        format(date, toAppendTo);
 	}
 	else
 	{
@@ -172,7 +170,7 @@ void DatePatternConverter::format(
 
 		if (event != NULL)
 		{
-			format(event, toAppendTo, p);
+            format(event, toAppendTo);
 		}
 	}
 }
@@ -184,8 +182,7 @@ void DatePatternConverter::format(
  */
 void DatePatternConverter::format(
 	const DatePtr& date,
-	LogString& toAppendTo,
-	Pool& p) const
+    LogString& toAppendTo) const
 {
-	priv->df->format(toAppendTo, date->getTime(), p);
+    priv->df->format(toAppendTo, date->getTime());
 }
diff --git a/src/main/cpp/defaultconfigurator.cpp b/src/main/cpp/defaultconfigurator.cpp
index c34f3d64..6e0b4813 100644
--- a/src/main/cpp/defaultconfigurator.cpp
+++ b/src/main/cpp/defaultconfigurator.cpp
@@ -42,9 +42,8 @@ void DefaultConfigurator::setConfigurationFileName(const LogString& path)
 
 void DefaultConfigurator::setConfigurationWatchSeconds(int seconds)
 {
-	Pool p;
 	LogString strSeconds;
-	StringHelper::toString(seconds, p, strSeconds);
+    StringHelper::toString(seconds, strSeconds);
 	Configurator::properties().setProperty(LOG4CXX_STR("LOG4CXX_CONFIGURATION_WATCH_SECONDS"), strSeconds);
 }
 
@@ -59,7 +58,6 @@ void DefaultConfigurator::configure(LoggerRepositoryPtr repository)
 {
 
 	LogString configurationFileName = getConfigurationFileName();
-	Pool pool;
 	File configuration;
 
 	if (configurationFileName.empty())
@@ -81,7 +79,7 @@ void DefaultConfigurator::configure(LoggerRepositoryPtr repository)
 				debugMsg.append(names[i]);
 				LogLog::debug(debugMsg);
 			}
-			if (candidate.exists(pool))
+            if (candidate.exists())
 			{
 				configuration = candidate;
 				break;
@@ -93,7 +91,7 @@ void DefaultConfigurator::configure(LoggerRepositoryPtr repository)
 		configuration.setPath(configurationFileName);
 	}
 
-	if (configuration.exists(pool))
+    if (configuration.exists())
 	{
 		if (LogLog::isDebugEnabled())
 		{
@@ -192,8 +190,7 @@ DefaultConfigurator::configureFromFile(const std::vector<LogString>& directories
 {
 	auto result = std::tuple<ConfigurationStatus, LogString>
 		{ ConfigurationStatus::NotConfigured, LogString() };
-	auto r = LogManager::getLoggerRepository();
-	Pool pool;
+    auto r = LogManager::getLoggerRepository();
 
 	for (auto& dir : directories )
 	{
@@ -205,7 +202,7 @@ DefaultConfigurator::configureFromFile(const std::vector<LogString>& directories
 
 			if (LogLog::isDebugEnabled())
 				LogLog::debug(LOG4CXX_STR("Checking file ") + candidate_str);
-			if (candidate.exists(pool))
+            if (candidate.exists())
 			{
 				std::get<1>(result) = candidate_str;
 				configure(r);
diff --git a/src/main/cpp/exception.cpp b/src/main/cpp/exception.cpp
index 0ef952ab..fe8cb7d9 100644
--- a/src/main/cpp/exception.cpp
+++ b/src/main/cpp/exception.cpp
@@ -19,10 +19,10 @@
 #include <log4cxx/helpers/exception.h>
 #include <string.h>
 #include <string>
+#include <string.h>
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/helpers/pool.h>
-#include <apr_errno.h>
 
 using namespace LOG4CXX_NS;
 using namespace LOG4CXX_NS::helpers;
@@ -106,8 +106,7 @@ RuntimeException& RuntimeException::operator=(const RuntimeException& src)
 LogString RuntimeException::formatMessage(log4cxx_status_t stat)
 {
 	LogString s(LOG4CXX_STR("RuntimeException: return code = "));
-	Pool p;
-	StringHelper::toString(stat, p, s);
+    StringHelper::toString(stat, s);
 	return s;
 }
 
@@ -183,13 +182,12 @@ LogString IOException::formatMessage(log4cxx_status_t stat)
 LogString Exception::makeMessage(const LogString& type, log4cxx_status_t stat)
 {
 	LogString s = type;
-	char err_buff[1024] = {0};
-	apr_strerror(stat, err_buff, sizeof(err_buff));
-	if (0 == err_buff[0] || 0 == strncmp(err_buff, "APR does not understand", 23))
+    char err_buff[1024] = {0};
+    strerror_r(stat, err_buff, sizeof(err_buff));
+    if (0 == err_buff[0])
 	{
-		s.append(LOG4CXX_STR(": error code "));
-		Pool p;
-		StringHelper::toString(stat, p, s);
+        s.append(LOG4CXX_STR(": error code "));
+        StringHelper::toString(stat, s);
 	}
 	else
 	{
@@ -294,8 +292,7 @@ InterruptedException& InterruptedException::operator=(const InterruptedException
 LogString InterruptedException::formatMessage(log4cxx_status_t stat)
 {
 	LogString s(LOG4CXX_STR("InterruptedException: stat = "));
-	Pool p;
-	StringHelper::toString(stat, p, s);
+    StringHelper::toString(stat, s);
 	return s;
 }
 
diff --git a/src/main/cpp/fallbackerrorhandler.cpp b/src/main/cpp/fallbackerrorhandler.cpp
index 3d5f2bef..ac89a88b 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -132,7 +132,7 @@ void FallbackErrorHandler::setBackupAppender(const AppenderPtr& backup1)
 
 }
 
-void FallbackErrorHandler::activateOptions(Pool&)
+void FallbackErrorHandler::activateOptions()
 {
 }
 
diff --git a/src/main/cpp/file.cpp b/src/main/cpp/file.cpp
index 12cf96b3..ac03996b 100644
--- a/src/main/cpp/file.cpp
+++ b/src/main/cpp/file.cpp
@@ -17,12 +17,11 @@
 
 #include <log4cxx/logstring.h>
 #include <log4cxx/file.h>
-#include <apr_file_io.h>
-#include <apr_file_info.h>
 #include <log4cxx/helpers/transcoder.h>
-#include <log4cxx/helpers/pool.h>
 #include <assert.h>
 #include <log4cxx/helpers/exception.h>
+#include <fstream>
+#include <filesystem>
 
 using namespace LOG4CXX_NS;
 using namespace LOG4CXX_NS::helpers;
@@ -43,7 +42,7 @@ struct File::FilePrivate{
 	{}
 
 	LogString path;
-	bool autoDelete;
+    bool autoDelete;
 };
 
 File::File() :
@@ -135,9 +134,8 @@ File& File::operator=(const File& src)
 
 File::~File()
 {
-	if(m_priv->autoDelete){
-		Pool p;
-		deleteFile(p);
+    if(m_priv->autoDelete){
+        deleteFile();
 	}
 }
 
@@ -166,174 +164,78 @@ LogString File::getName() const
 	return m_priv->path;
 }
 
-char* File::getPath(Pool& p) const
+log4cxx_status_t File::open(std::fstream* file_stream, int flags, int perm) const
 {
-	int style = APR_FILEPATH_ENCODING_UNKNOWN;
-	apr_filepath_encoding(&style, p.getAPRPool());
-	char* retval = NULL;
-
-	if (style == APR_FILEPATH_ENCODING_UTF8)
-	{
-		retval = Transcoder::encodeUTF8(m_priv->path, p);
-	}
-	else
-	{
-		retval = Transcoder::encode(m_priv->path, p);
-	}
-
-	return retval;
+    file_stream->open(m_priv->path);
+    if(file_stream->is_open()){
+        return 0;
+    }
+    return -1;
 }
 
-log4cxx_status_t File::open(apr_file_t** file, int flags,
-	int perm, Pool& p) const
+bool File::exists() const
 {
-	return apr_file_open(file, getPath(p), flags, perm, p.getAPRPool());
+    return std::filesystem::exists(m_priv->path);
 }
 
-
-
-bool File::exists(Pool& p) const
+bool File::deleteFile() const
 {
-	apr_finfo_t finfo;
-	apr_status_t rv = apr_stat(&finfo, getPath(p),
-			0, p.getAPRPool());
-	return rv == APR_SUCCESS;
+    return std::filesystem::remove(m_priv->path);
 }
 
-char* File::convertBackSlashes(char* src)
+bool File::renameTo(const File& dest) const
 {
-	for (char* c = src; *c != 0; c++)
-	{
-		if (*c == '\\')
-		{
-			*c = '/';
-		}
-	}
-
-	return src;
+    std::error_code ec;
+    std::filesystem::rename(m_priv->path, dest.getPath(), ec);
+    if(ec){
+        return false;
+    }
+    return true;
 }
 
-bool File::deleteFile(Pool& p) const
-{
-	apr_status_t rv = apr_file_remove(convertBackSlashes(getPath(p)),
-			p.getAPRPool());
-	return rv == APR_SUCCESS;
-}
 
-bool File::renameTo(const File& dest, Pool& p) const
+size_t File::length() const
 {
-	apr_status_t rv = apr_file_rename(convertBackSlashes(getPath(p)),
-			convertBackSlashes(dest.getPath(p)),
-			p.getAPRPool());
-	return rv == APR_SUCCESS;
+    return std::filesystem::file_size(m_priv->path);
 }
 
 
-size_t File::length(Pool& pool) const
+log4cxx_time_t File::lastModified() const
 {
-	apr_finfo_t finfo;
-	apr_status_t rv = apr_stat(&finfo, getPath(pool),
-			APR_FINFO_SIZE, pool.getAPRPool());
-
-	if (rv == APR_SUCCESS)
-	{
-		return (size_t) finfo.size;
-	}
-
-	return 0;
+    return std::filesystem::last_write_time(m_priv->path);
 }
 
 
-log4cxx_time_t File::lastModified(Pool& pool) const
+std::vector<LogString> File::list() const
 {
-	apr_finfo_t finfo;
-	apr_status_t rv = apr_stat(&finfo, getPath(pool),
-			APR_FINFO_MTIME, pool.getAPRPool());
-
-	if (rv == APR_SUCCESS)
-	{
-		return finfo.mtime;
-	}
+	std::vector<LogString> filenames;
 
-	return 0;
-}
+    if(!std::filesystem::is_directory(m_priv->path)){
+        return filenames;
+    }
 
+    for(auto const& dir_entry : std::filesystem::directory_iterator(m_priv->path)){
+        LogString filename;
+        const std::filesystem::path file_path = dir_entry.path();
 
-std::vector<LogString> File::list(Pool& p) const
-{
-	apr_dir_t* dir;
-	apr_finfo_t entry;
-	std::vector<LogString> filenames;
-
-	apr_status_t stat = apr_dir_open(&dir,
-			convertBackSlashes(getPath(p)),
-			p.getAPRPool());
+        Transcoder::decode(file_path.filename(), filename);
 
-	if (stat == APR_SUCCESS)
-	{
-		int style = APR_FILEPATH_ENCODING_UNKNOWN;
-		apr_filepath_encoding(&style, p.getAPRPool());
-		stat = apr_dir_read(&entry, APR_FINFO_DIRENT, dir);
-
-		while (stat == APR_SUCCESS)
-		{
-			if (entry.name != NULL)
-			{
-				LogString filename;
-
-				if (style == APR_FILEPATH_ENCODING_UTF8)
-				{
-					Transcoder::decodeUTF8(entry.name, filename);
-				}
-				else
-				{
-					Transcoder::decode(entry.name, filename);
-				}
-
-				filenames.push_back(filename);
-			}
-
-			stat = apr_dir_read(&entry, APR_FINFO_DIRENT, dir);
-		}
-
-		stat = apr_dir_close(dir);
-	}
+        filenames.push_back(filename);
+    }
 
 	return filenames;
 }
 
-LogString File::getParent(Pool&) const
+LogString File::getParent() const
 {
-	LogString::size_type slashPos = m_priv->path.rfind(LOG4CXX_STR('/'));
-	LogString::size_type backPos = m_priv->path.rfind(LOG4CXX_STR('\\'));
-
-	if (slashPos == LogString::npos)
-	{
-		slashPos = backPos;
-	}
-	else
-	{
-		if (backPos != LogString::npos && backPos > slashPos)
-		{
-			slashPos = backPos;
-		}
-	}
-
-	LogString parent;
-
-	if (slashPos != LogString::npos && slashPos > 0)
-	{
-		parent.assign(m_priv->path, 0, slashPos);
-	}
+    LogString parent = std::filesystem::path(m_priv->path).parent_path();
 
 	return parent;
 }
 
-bool File::mkdirs(Pool& p) const
+bool File::mkdirs() const
 {
-	apr_status_t stat = apr_dir_make_recursive(convertBackSlashes(getPath(p)),
-			APR_OS_DEFAULT, p.getAPRPool());
-	return stat == APR_SUCCESS;
+    return std::filesystem::create_directories(m_priv->path);
 }
 
 void File::setAutoDelete(bool autoDelete){
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index b2350c73..5e1007e6 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);
+    activateOptions();
 }
 
 FileAppender::FileAppender
@@ -63,15 +62,13 @@ FileAppender::FileAppender
 	)
 	: WriterAppender(std::make_unique<FileAppenderPriv>(layout1, fileName1, append1, false))
 {
-	Pool p;
-	activateOptions(p);
+    activateOptions();
 }
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1)
 	: WriterAppender(std::make_unique<FileAppenderPriv>(layout1, fileName1))
 {
-	Pool p;
-	activateOptions(p);
+    activateOptions();
 }
 
 FileAppender::FileAppender(std::unique_ptr<FileAppenderPriv> priv)
@@ -154,13 +151,13 @@ void FileAppender::setOption(const LogString& option,
 	}
 }
 
-void FileAppender::activateOptions(Pool& p)
+void FileAppender::activateOptions()
 {
 	std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
-	activateOptionsInternal(p);
+    activateOptionsInternal();
 }
 
-void FileAppender::activateOptionsInternal(Pool& p)
+void FileAppender::activateOptionsInternal()
 {
 	int errors = 0;
 
@@ -168,7 +165,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)
 		{
@@ -191,7 +188,7 @@ void FileAppender::activateOptionsInternal(Pool& p)
 
 	if (errors == 0)
 	{
-		WriterAppender::activateOptions(p);
+        WriterAppender::activateOptions();
 		if (auto p = _priv->taskManager.lock())
 			p->value().removePeriodicTask(getName());
 
@@ -288,8 +285,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)
@@ -311,7 +307,7 @@ void FileAppender::setFileInternal(
 		{
 			File outFile;
 			outFile.setPath(filename);
-			writeBOM = !outFile.exists(p);
+            writeBOM = !outFile.exists();
 		}
 		else
 		{
@@ -327,14 +323,14 @@ void FileAppender::setFileInternal(
 	}
 	catch (IOException&)
 	{
-		LogString parentName = File().setPath(filename).getParent(p);
+        LogString parentName = File().setPath(filename).getParent();
 
 		if (!parentName.empty())
 		{
 			File parentDir;
 			parentDir.setPath(parentName);
 
-			if (!parentDir.exists(p) && parentDir.mkdirs(p))
+            if (!parentDir.exists() && parentDir.mkdirs())
 			{
 				outStream = std::make_shared<FileOutputStream>(filename, append1);
 			}
@@ -373,7 +369,7 @@ void FileAppender::setFileInternal(
 	_priv->bufferedIO = bufferedIO1;
 	_priv->fileName = filename;
 	_priv->bufferSize = (int)bufferSize1;
-	writeHeader(p);
+    writeHeader();
 
 }
 
diff --git a/src/main/cpp/fileinputstream.cpp b/src/main/cpp/fileinputstream.cpp
index 3a1ac091..df322a6f 100644
--- a/src/main/cpp/fileinputstream.cpp
+++ b/src/main/cpp/fileinputstream.cpp
@@ -20,17 +20,16 @@
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/bytebuffer.h>
 #include <log4cxx/helpers/pool.h>
-#include <apr_file_io.h>
+#include <fstream>
 
 using namespace LOG4CXX_NS;
 using namespace LOG4CXX_NS::helpers;
 
 struct FileInputStream::FileInputStreamPrivate
 {
-	FileInputStreamPrivate() : fileptr(nullptr) {}
+    FileInputStreamPrivate(){}
 
-	Pool pool;
-	apr_file_t* fileptr;
+    std::fstream m_fstream;
 };
 
 IMPLEMENT_LOG4CXX_OBJECT(FileInputStream)
@@ -51,13 +50,12 @@ FileInputStream::FileInputStream(const logchar* filename) :
 
 void FileInputStream::open(const LogString& filename)
 {
-	apr_fileperms_t perm = APR_OS_DEFAULT;
-	apr_int32_t flags = APR_READ;
-	apr_status_t stat = File().setPath(filename).open(&m_priv->fileptr, flags, perm, m_priv->pool);
 
-	if (stat != APR_SUCCESS)
+    bool success = File().setPath(filename).open(&m_priv->m_fstream, 0, 0);
+
+    if (!success)
 	{
-		throw IOException(filename, stat);
+        throw IOException(filename);
 	}
 }
 
@@ -65,56 +63,42 @@ void FileInputStream::open(const LogString& filename)
 FileInputStream::FileInputStream(const File& aFile) :
 	m_priv(std::make_unique<FileInputStreamPrivate>())
 {
-	apr_fileperms_t perm = APR_OS_DEFAULT;
-	apr_int32_t flags = APR_READ;
-	apr_status_t stat = aFile.open(&m_priv->fileptr, flags, perm, m_priv->pool);
+    bool success = File().setPath(aFile.getName()).open(&m_priv->m_fstream, 0, 0);
 
-	if (stat != APR_SUCCESS)
-	{
-		throw IOException(aFile.getName(), stat);
-	}
+    if (!success)
+    {
+        throw IOException(aFile.getName());
+    }
 }
 
 
 FileInputStream::~FileInputStream()
 {
-	if (m_priv->fileptr)
-	{
-		apr_file_close(m_priv->fileptr);
-	}
+    close();
 }
 
 
 void FileInputStream::close()
 {
-	apr_status_t stat = apr_file_close(m_priv->fileptr);
-
-	if (stat == APR_SUCCESS)
-	{
-		m_priv->fileptr = NULL;
-	}
-	else
-	{
-		throw IOException(stat);
-	}
+    if (m_priv->m_fstream.is_open())
+    {
+        m_priv->m_fstream.close();
+    }
 }
 
 
 int FileInputStream::read(ByteBuffer& buf)
 {
-	apr_size_t bytesRead = buf.remaining();
-	apr_status_t stat = apr_file_read(m_priv->fileptr, buf.current(), &bytesRead);
+    size_t bytesRead = buf.remaining();
+    size_t before_read = m_priv->m_fstream.tellg();
+    m_priv->m_fstream.read(buf.current(), bytesRead);
+    size_t after_read = m_priv->m_fstream.tellg();
 	int retval = -1;
 
-	if (!APR_STATUS_IS_EOF(stat))
-	{
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
+    if (!m_priv->m_fstream.eof())
+    {
 		buf.position(buf.position() + bytesRead);
-		retval = (int)bytesRead;
+        retval = (int)(after_read - before_read);
 	}
 
 	return retval;
diff --git a/src/main/cpp/filelocationpatternconverter.cpp b/src/main/cpp/filelocationpatternconverter.cpp
index efb40664..4bd27759 100644
--- a/src/main/cpp/filelocationpatternconverter.cpp
+++ b/src/main/cpp/filelocationpatternconverter.cpp
@@ -41,8 +41,7 @@ PatternConverterPtr FileLocationPatternConverter::newInstance(
 
 void FileLocationPatternConverter::format(
 	const LoggingEventPtr& event,
-	LogString& toAppendTo,
-	Pool& /* p */ ) const
+    LogString& toAppendTo ) const
 {
 	append(toAppendTo, event->getLocationInformation().getFileName());
 }
diff --git a/src/main/cpp/fileoutputstream.cpp b/src/main/cpp/fileoutputstream.cpp
index d75634f5..b053be87 100644
--- a/src/main/cpp/fileoutputstream.cpp
+++ b/src/main/cpp/fileoutputstream.cpp
@@ -20,17 +20,16 @@
 #include <log4cxx/helpers/pool.h>
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/bytebuffer.h>
-#include <apr_file_io.h>
+#include <fstream>
 
 using namespace LOG4CXX_NS;
 using namespace LOG4CXX_NS::helpers;
 
 struct FileOutputStream::FileOutputStreamPrivate
 {
-	FileOutputStreamPrivate() : fileptr(nullptr) {}
+    FileOutputStreamPrivate(){}
 
-	Pool pool;
-	apr_file_t* fileptr;
+    std::ofstream file_out;
 };
 
 IMPLEMENT_LOG4CXX_OBJECT(FileOutputStream)
@@ -38,98 +37,58 @@ IMPLEMENT_LOG4CXX_OBJECT(FileOutputStream)
 FileOutputStream::FileOutputStream(const LogString& filename,
 	bool append) : m_priv(std::make_unique<FileOutputStreamPrivate>())
 {
-	m_priv->fileptr = open(filename, append, m_priv->pool);
+    open(m_priv->file_out, filename, append);
 }
 
 FileOutputStream::FileOutputStream(const logchar* filename,
 	bool append) : m_priv(std::make_unique<FileOutputStreamPrivate>())
 {
-	m_priv->fileptr = open(filename, append, m_priv->pool);
+    open(m_priv->file_out, filename, append);
 }
 
-apr_file_t* FileOutputStream::open(const LogString& filename,
-	bool append, Pool& pool)
+bool FileOutputStream::open(std::ofstream& fout, const LogString& filename,
+    bool append)
 {
-	apr_fileperms_t perm = APR_OS_DEFAULT;
-	apr_int32_t flags = APR_WRITE | APR_CREATE;
-
-	if (append)
-	{
-		flags |= APR_APPEND;
-	}
-	else
-	{
-		flags |= APR_TRUNCATE;
-	}
-
-	File fn;
-	fn.setPath(filename);
-	apr_file_t* fileptr = 0;
-	apr_status_t stat = fn.open(&fileptr, flags, perm, pool);
-
-	if (stat != APR_SUCCESS)
-	{
-		throw IOException(filename, stat);
-	}
-
-	return fileptr;
+    auto open_mode = std::ios_base::out;
+    if(!append){
+        open_mode |= std::ios_base::trunc;
+    }else{
+        open_mode |= std::ios_base::ate;
+    }
+    fout.open(filename.c_str(), open_mode);
+    if(!fout.is_open()){
+        throw IOException(filename);
+    }
+
+    return true;
 }
 
 FileOutputStream::~FileOutputStream()
 {
-	if (m_priv->fileptr)
-	{
-		apr_file_close(m_priv->fileptr);
-	}
 }
 
-void FileOutputStream::close(Pool& /* p */)
+void FileOutputStream::close()
 {
-	if (m_priv->fileptr)
+    if (m_priv->file_out.is_open())
 	{
-		apr_status_t stat = apr_file_close(m_priv->fileptr);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		m_priv->fileptr = NULL;
+        m_priv->file_out.close();
 	}
 }
 
-void FileOutputStream::flush(Pool& /* p */)
+void FileOutputStream::flush()
 {
+    m_priv->file_out.flush();
 }
 
-void FileOutputStream::write(ByteBuffer& buf, Pool& /* p */ )
+void FileOutputStream::write(ByteBuffer& buf)
 {
-	if (m_priv->fileptr == NULL)
-	{
-		throw NullPointerException(LOG4CXX_STR("FileOutputStream"));
-	}
-
-	size_t nbytes = buf.remaining();
-	size_t pos = buf.position();
+    size_t nbytes = buf.remaining();
 	const char* data = buf.data();
 
-	while (nbytes > 0)
-	{
-		apr_status_t stat = apr_file_write(
-				m_priv->fileptr, data + pos, &nbytes);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		pos += nbytes;
-		buf.position(pos);
-		nbytes = buf.remaining();
-	}
+    m_priv->file_out.write(data, nbytes);
 }
 
-apr_file_t* FileOutputStream::getFilePtr() const{
-	return m_priv->fileptr;
+std::ofstream* FileOutputStream::getFilePtr() const{
+    return &m_priv->file_out;
 }
 
diff --git a/src/main/cpp/filerenameaction.cpp b/src/main/cpp/filerenameaction.cpp
index c0d2d3e6..9973b74f 100644
--- a/src/main/cpp/filerenameaction.cpp
+++ b/src/main/cpp/filerenameaction.cpp
@@ -46,7 +46,7 @@ FileRenameAction::FileRenameAction(const File& toRename,
 {
 }
 
-bool FileRenameAction::execute(LOG4CXX_NS::helpers::Pool& pool1) const
+bool FileRenameAction::execute() const
 {
-	return priv->source.renameTo(priv->destination, pool1);
+    return priv->source.renameTo(priv->destination);
 }
diff --git a/src/main/cpp/filewatchdog.cpp b/src/main/cpp/filewatchdog.cpp
index 80d3a3a3..62ecb058 100644
--- a/src/main/cpp/filewatchdog.cpp
+++ b/src/main/cpp/filewatchdog.cpp
@@ -34,7 +34,7 @@ long FileWatchdog::DEFAULT_DELAY = 60000;
 
 struct FileWatchdog::FileWatchdogPrivate{
 	FileWatchdogPrivate(const File& file1) :
-		file(file1), delay(DEFAULT_DELAY), lastModif(0),
+        file(file1), delay(DEFAULT_DELAY),
 		warnedAlready(false),
 		taskName{ LOG4CXX_STR("WatchDog_") + file1.getName() }
 	{ }
@@ -49,7 +49,7 @@ struct FileWatchdog::FileWatchdogPrivate{
 	The delay to observe between every check.
 	By default set DEFAULT_DELAY.*/
 	long delay;
-	log4cxx_time_t lastModif;
+    std::chrono::time_point<std::chrono::system_clock> lastModif;
 	bool warnedAlready;
 	LogString taskName;
 	ThreadUtility::ManagerWeakPtr taskManager;
@@ -101,10 +101,9 @@ void FileWatchdog::checkAndConfigure()
 		msg += m_priv->file.getPath();
 		msg += LOG4CXX_STR("]");
 		LogLog::debug(msg);
-	}
-	Pool pool1;
+    }
 
-	if (!m_priv->file.exists(pool1))
+    if (!m_priv->file.exists())
 	{
 		if (!m_priv->warnedAlready)
 		{
@@ -116,7 +115,7 @@ void FileWatchdog::checkAndConfigure()
 	}
 	else
 	{
-		auto thisMod = m_priv->file.lastModified(pool1);
+        auto thisMod = m_priv->file.lastModified();
 
 		if (thisMod > m_priv->lastModif)
 		{
@@ -134,12 +133,11 @@ void FileWatchdog::start()
 	if (!taskManager->value().hasPeriodicTask(m_priv->taskName))
 	{
 		if (LogLog::isDebugEnabled())
-		{
-			Pool p;
+        {
 			LogString msg(LOG4CXX_STR("Checking ["));
 			msg += m_priv->file.getPath();
 			msg += LOG4CXX_STR("] at ");
-			StringHelper::toString((int)m_priv->delay, p, msg);
+            StringHelper::toString((int)m_priv->delay, msg);
 			msg += LOG4CXX_STR(" ms interval");
 			LogLog::debug(msg);
 		}
diff --git a/src/main/cpp/filter.cpp b/src/main/cpp/filter.cpp
index c0d8fb2b..2ffce973 100644
--- a/src/main/cpp/filter.cpp
+++ b/src/main/cpp/filter.cpp
@@ -45,7 +45,7 @@ void Filter::setNext(const FilterPtr& newNext)
 	m_priv->next = newNext;
 }
 
-void Filter::activateOptions(Pool&)
+void Filter::activateOptions()
 {
 }
 
diff --git a/src/main/cpp/filterbasedtriggeringpolicy.cpp b/src/main/cpp/filterbasedtriggeringpolicy.cpp
index ca7131cd..af4cf6ee 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()
 {
 	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 78b5c7a7..b8bbf3d8 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()
 {
-	RollingPolicyBase::activateOptions(p);
+    RollingPolicyBase::activateOptions();
 
 	if (priv->maxIndex < priv->minIndex)
 	{
@@ -129,8 +129,7 @@ void FixedWindowRollingPolicy::activateOptions(Pool& p)
  */
 RolloverDescriptionPtr FixedWindowRollingPolicy::initialize(
 	const   LogString&  currentActiveFile,
-	const   bool        append,
-	Pool&       pool)
+    const   bool        append)
 {
 	LogString newActiveFile(currentActiveFile);
 	priv->explicitActiveFile = false;
@@ -145,7 +144,7 @@ RolloverDescriptionPtr FixedWindowRollingPolicy::initialize(
 	{
 		LogString buf;
 		ObjectPtr obj = std::make_shared<Integer>(priv->minIndex);
-		formatFileName(obj, buf, pool);
+        formatFileName(obj, buf);
 		newActiveFile = buf;
 	}
 
@@ -159,8 +158,7 @@ RolloverDescriptionPtr FixedWindowRollingPolicy::initialize(
  */
 RolloverDescriptionPtr FixedWindowRollingPolicy::rollover(
 	const   LogString&  currentActiveFile,
-	const   bool        append,
-	Pool&       pool)
+    const   bool        append)
 {
 	RolloverDescriptionPtr desc;
 
@@ -176,14 +174,14 @@ RolloverDescriptionPtr FixedWindowRollingPolicy::rollover(
 		purgeStart++;
 	}
 
-	if (!purge(purgeStart, priv->maxIndex, pool))
+    if (!purge(purgeStart, priv->maxIndex))
 	{
 		return desc;
 	}
 
 	LogString buf;
 	ObjectPtr obj = std::make_shared<Integer>(purgeStart);
-	formatFileName(obj, buf, pool);
+    formatFileName(obj, buf);
 
 	LogString renameTo(buf);
 	LogString compressedName(renameTo);
@@ -191,8 +189,8 @@ RolloverDescriptionPtr FixedWindowRollingPolicy::rollover(
 
 	if(getCreateIntermediateDirectories()){
 		File compressedFile(compressedName);
-		File compressedParent (compressedFile.getParent(pool));
-		compressedParent.mkdirs(pool);
+        File compressedParent (compressedFile.getParent());
+        compressedParent.mkdirs();
 	}
 
 	if (StringHelper::endsWith(renameTo, LOG4CXX_STR(".gz")))
@@ -254,7 +252,7 @@ int FixedWindowRollingPolicy::getMinIndex() const
  * index will be deleted if needed.
  * @return true if purge was successful and rollover should be attempted.
  */
-bool FixedWindowRollingPolicy::purge(int lowIndex, int highIndex, Pool& p) const
+bool FixedWindowRollingPolicy::purge(int lowIndex, int highIndex) const
 {
 	int suffixLength = 0;
 
@@ -282,21 +280,21 @@ bool FixedWindowRollingPolicy::purge(int lowIndex, int highIndex, Pool& p) const
 		toRenameBase.setPath(lowFilename.substr(0, lowFilename.length() - suffixLength));
 		File* toRename = &toRenameCompressed;
 		bool isBase = false;
-		bool exists = toRenameCompressed.exists(p);
+        bool exists = toRenameCompressed.exists();
 
 		if (suffixLength > 0)
 		{
 			if (exists)
 			{
-				if (toRenameBase.exists(p))
+                if (toRenameBase.exists())
 				{
-					toRenameBase.deleteFile(p);
+                    toRenameBase.deleteFile();
 				}
 			}
 			else
 			{
 				toRename = &toRenameBase;
-				exists = toRenameBase.exists(p);
+                exists = toRenameBase.exists();
 				isBase = true;
 			}
 		}
@@ -309,7 +307,7 @@ bool FixedWindowRollingPolicy::purge(int lowIndex, int highIndex, Pool& p) const
 			//        if that fails then abandon purge
 			if (i == highIndex)
 			{
-				if (!toRename->deleteFile(p))
+                if (!toRename->deleteFile())
 				{
 					return false;
 				}
@@ -352,7 +350,7 @@ bool FixedWindowRollingPolicy::purge(int lowIndex, int highIndex, Pool& p) const
 
 		try
 		{
-			if (!(*iter)->execute(p))
+            if (!(*iter)->execute())
 			{
 				return false;
 			}
diff --git a/src/main/cpp/gzcompressaction.cpp b/src/main/cpp/gzcompressaction.cpp
index 8b30690f..a5322bef 100644
--- a/src/main/cpp/gzcompressaction.cpp
+++ b/src/main/cpp/gzcompressaction.cpp
@@ -16,8 +16,6 @@
  */
 
 #include <log4cxx/rolling/gzcompressaction.h>
-#include <apr_thread_proc.h>
-#include <apr_strings.h>
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/private/action_priv.h>
@@ -54,115 +52,115 @@ GZCompressAction::GZCompressAction(const File& src,
 
 GZCompressAction::~GZCompressAction() {}
 
-bool GZCompressAction::execute(LOG4CXX_NS::helpers::Pool& p) const
+bool GZCompressAction::execute() const
 {
-	if (priv->source.exists(p))
+    if (priv->source.exists())
 	{
-		apr_pool_t* aprpool = p.getAPRPool();
-		apr_procattr_t* attr;
-		apr_status_t stat = apr_procattr_create(&attr, aprpool);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		stat = apr_procattr_io_set(attr, APR_NO_PIPE, APR_FULL_BLOCK, APR_FULL_BLOCK);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		stat = apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		//
-		//   set child process output to destination file
-		//
-		apr_file_t* child_out;
-		apr_int32_t flags = APR_FOPEN_READ | APR_FOPEN_WRITE |
-			APR_FOPEN_CREATE | APR_FOPEN_TRUNCATE;
-		stat = priv->destination.open(&child_out, flags, APR_OS_DEFAULT, p);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(priv->destination.getName(), stat);
-		}
-
-		stat =  apr_procattr_child_out_set(attr, child_out, NULL);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		//
-		//   redirect the child's error stream to this processes' error stream
-		//
-		apr_file_t* child_err;
-		stat = apr_file_open_stderr(&child_err, aprpool);
-
-		if (stat == APR_SUCCESS)
-		{
-			stat =  apr_procattr_child_err_set(attr, child_err, NULL);
-
-			if (stat != APR_SUCCESS)
-			{
-				throw IOException(stat);
-			}
-		}
-
-		priv->destination.setAutoDelete(true);
-
-		const char** args = (const char**)
-			apr_palloc(aprpool, 4 * sizeof(*args));
-		int i = 0;
-		args[i++] = "gzip";
-		args[i++] = "-c";
-		args[i++] = Transcoder::encode(priv->source.getPath(), p);
-		args[i++] = NULL;
-
-		apr_proc_t pid;
-		stat = apr_proc_create(&pid, "gzip", args, NULL, attr, aprpool);
-
-		if (stat != APR_SUCCESS)
-		{
-			LogLog::warn(LOG4CXX_STR("Failed to fork gzip during log rotation; leaving log file uncompressed"));
-			if (priv->throwIOExceptionOnForkFailure)
-				throw IOException(LOG4CXX_STR("gzip"), stat);
-			/* If we fail here (to create the gzip child process),
-			 * skip the compression and consider the rotation to be
-			 * otherwise successful. The caller has already rotated
-			 * the log file (`source` here refers to the
-			 * uncompressed, rotated path, and `destination` the
-			 * same path with `.gz` appended). Remove the empty
-			 * destination file and leave source as-is.
-			 */
-			stat = apr_file_close(child_out);
-			return true;
-		}
-
-		apr_proc_wait(&pid, NULL, NULL, APR_WAIT);
-		stat = apr_file_close(child_out);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-
-		priv->destination.setAutoDelete(false);
-
-		if (priv->deleteSource)
-		{
-			priv->source.deleteFile(p);
-		}
-
-		return true;
+//		apr_pool_t* aprpool = p.getAPRPool();
+//		apr_procattr_t* attr;
+//		apr_status_t stat = apr_procattr_create(&attr, aprpool);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(stat);
+//		}
+
+//		stat = apr_procattr_io_set(attr, APR_NO_PIPE, APR_FULL_BLOCK, APR_FULL_BLOCK);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(stat);
+//		}
+
+//		stat = apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(stat);
+//		}
+
+//		//
+//		//   set child process output to destination file
+//		//
+//		apr_file_t* child_out;
+//		apr_int32_t flags = APR_FOPEN_READ | APR_FOPEN_WRITE |
+//			APR_FOPEN_CREATE | APR_FOPEN_TRUNCATE;
+//		stat = priv->destination.open(&child_out, flags, APR_OS_DEFAULT, p);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(priv->destination.getName(), stat);
+//		}
+
+//		stat =  apr_procattr_child_out_set(attr, child_out, NULL);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(stat);
+//		}
+
+//		//
+//		//   redirect the child's error stream to this processes' error stream
+//		//
+//		apr_file_t* child_err;
+//		stat = apr_file_open_stderr(&child_err, aprpool);
+
+//		if (stat == APR_SUCCESS)
+//		{
+//			stat =  apr_procattr_child_err_set(attr, child_err, NULL);
+
+//			if (stat != APR_SUCCESS)
+//			{
+//				throw IOException(stat);
+//			}
+//		}
+
+//		priv->destination.setAutoDelete(true);
+
+//		const char** args = (const char**)
+//			apr_palloc(aprpool, 4 * sizeof(*args));
+//		int i = 0;
+//		args[i++] = "gzip";
+//		args[i++] = "-c";
+//		args[i++] = Transcoder::encode(priv->source.getPath(), p);
+//		args[i++] = NULL;
+
+//		apr_proc_t pid;
+//		stat = apr_proc_create(&pid, "gzip", args, NULL, attr, aprpool);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			LogLog::warn(LOG4CXX_STR("Failed to fork gzip during log rotation; leaving log file uncompressed"));
+//			if (priv->throwIOExceptionOnForkFailure)
+//				throw IOException(LOG4CXX_STR("gzip"), stat);
+//			/* If we fail here (to create the gzip child process),
+//			 * skip the compression and consider the rotation to be
+//			 * otherwise successful. The caller has already rotated
+//			 * the log file (`source` here refers to the
+//			 * uncompressed, rotated path, and `destination` the
+//			 * same path with `.gz` appended). Remove the empty
+//			 * destination file and leave source as-is.
+//			 */
+//			stat = apr_file_close(child_out);
+//			return true;
+//		}
+
+//		apr_proc_wait(&pid, NULL, NULL, APR_WAIT);
+//		stat = apr_file_close(child_out);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(stat);
+//		}
+
+//		priv->destination.setAutoDelete(false);
+
+//		if (priv->deleteSource)
+//		{
+//            priv->source.deleteFile();
+//		}
+
+//		return true;
 	}
 
 	return false;
diff --git a/src/main/cpp/inputstreamreader.cpp b/src/main/cpp/inputstreamreader.cpp
index e300202a..54b12d26 100644
--- a/src/main/cpp/inputstreamreader.cpp
+++ b/src/main/cpp/inputstreamreader.cpp
@@ -67,12 +67,12 @@ InputStreamReader::~InputStreamReader()
 {
 }
 
-void InputStreamReader::close(Pool& )
+void InputStreamReader::close()
 {
 	m_priv->in->close();
 }
 
-LogString InputStreamReader::read(Pool& p)
+LogString InputStreamReader::read()
 {
 	const size_t BUFSIZE = 4096;
 	ByteBuffer buf(p.pstralloc(BUFSIZE), BUFSIZE);
diff --git a/src/main/cpp/integerpatternconverter.cpp b/src/main/cpp/integerpatternconverter.cpp
index 3e8d3c58..1960ae31 100644
--- a/src/main/cpp/integerpatternconverter.cpp
+++ b/src/main/cpp/integerpatternconverter.cpp
@@ -41,13 +41,12 @@ PatternConverterPtr IntegerPatternConverter::newInstance(
 
 void IntegerPatternConverter::format(
 	const ObjectPtr& obj,
-	LogString& toAppendTo,
-	Pool& p) const
+    LogString& toAppendTo) const
 {
 	IntegerPtr i = LOG4CXX_NS::cast<Integer>(obj);
 
 	if (i != NULL)
 	{
-		StringHelper::toString(i->intValue(), p, toAppendTo);
+        StringHelper::toString(i->intValue(), toAppendTo);
 	}
 }
diff --git a/src/main/cpp/manualtriggeringpolicy.cpp b/src/main/cpp/manualtriggeringpolicy.cpp
index eeb9ef1e..2234c129 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( )
 {
 }
 
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index 24a2c528..6ba87302 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -66,8 +66,7 @@ using namespace LOG4CXX_NS::spi;
 using namespace LOG4CXX_NS::pattern;
 
 SQLException::SQLException(short fHandleType,
-	void* hInput, const char* prolog,
-	LOG4CXX_NS::helpers::Pool& p)
+    void* hInput, const char* prolog)
 	: Exception(formatMessage(fHandleType, hInput, prolog, p))
 {
 }
@@ -84,7 +83,7 @@ SQLException::SQLException(const SQLException& src)
 }
 
 const char* SQLException::formatMessage(short fHandleType,
-	void* hInput, const char* prolog, LOG4CXX_NS::helpers::Pool& p)
+    void* hInput, const char* prolog)
 {
 	std::string strReturn(prolog);
 	strReturn.append(" - ");
@@ -110,7 +109,8 @@ const char* SQLException::formatMessage(short fHandleType,
 	strReturn.append("log4cxx built without ODBC support");
 #endif
 
-	return apr_pstrdup((apr_pool_t*) p.getAPRPool(), strReturn.c_str());
+//	return apr_pstrdup((apr_pool_t*) p.getAPRPool(), strReturn.c_str());
+    return nullptr;
 }
 
 
@@ -212,7 +212,7 @@ bool ODBCAppender::requiresLayout() const
 	return false;
 }
 
-void ODBCAppender::activateOptions(LOG4CXX_NS::helpers::Pool&)
+void ODBCAppender::activateOptions()
 {
 #if !LOG4CXX_HAVE_ODBC
 	LogLog::error(LOG4CXX_STR("Can not activate ODBCAppender unless compiled with ODBC support."));
@@ -254,7 +254,7 @@ void ODBCAppender::activateOptions(LOG4CXX_NS::helpers::Pool&)
 }
 
 
-void ODBCAppender::append(const spi::LoggingEventPtr& event, LOG4CXX_NS::helpers::Pool& p)
+void ODBCAppender::append(const spi::LoggingEventPtr& event)
 {
 #if LOG4CXX_HAVE_ODBC
 	_priv->buffer.push_back(event);
@@ -268,12 +268,12 @@ void ODBCAppender::append(const spi::LoggingEventPtr& event, LOG4CXX_NS::helpers
 }
 
 #if LOG4CXX_ABI_VERSION <= 15
-LogString ODBCAppender::getLogStatement(const spi::LoggingEventPtr& event, LOG4CXX_NS::helpers::Pool& p) const
+LogString ODBCAppender::getLogStatement(const spi::LoggingEventPtr& event) const
 {
     return LogString();
 }
 
-void ODBCAppender::execute(const LogString& sql, LOG4CXX_NS::helpers::Pool& p)
+void ODBCAppender::execute(const LogString& sql)
 {
 }
 #endif
diff --git a/src/main/cpp/onlyonceerrorhandler.cpp b/src/main/cpp/onlyonceerrorhandler.cpp
index ebc07abd..96da60c7 100644
--- a/src/main/cpp/onlyonceerrorhandler.cpp
+++ b/src/main/cpp/onlyonceerrorhandler.cpp
@@ -41,7 +41,7 @@ void OnlyOnceErrorHandler::setLogger(const LoggerPtr&)
 {
 }
 
-void OnlyOnceErrorHandler::activateOptions(Pool&)
+void OnlyOnceErrorHandler::activateOptions()
 {
 }
 
diff --git a/src/main/cpp/outputstreamwriter.cpp b/src/main/cpp/outputstreamwriter.cpp
index 659a6c8b..945eb82e 100644
--- a/src/main/cpp/outputstreamwriter.cpp
+++ b/src/main/cpp/outputstreamwriter.cpp
@@ -71,24 +71,24 @@ OutputStreamWriter::~OutputStreamWriter()
 {
 }
 
-void OutputStreamWriter::close(Pool& p)
+void OutputStreamWriter::close()
 {
-	m_priv->out->close(p);
+    m_priv->out->close();
 }
 
-void OutputStreamWriter::flush(Pool& p)
+void OutputStreamWriter::flush()
 {
-	m_priv->out->flush(p);
+    m_priv->out->flush();
 }
 
-void OutputStreamWriter::write(const LogString& str, Pool& p)
+void OutputStreamWriter::write(const LogString& str)
 {
 	if (str.empty())
 		return;
 	if (CharsetEncoder::isTriviallyCopyable(str, m_priv->enc))
 	{
 		ByteBuffer buf((char*)str.data(), str.size() * sizeof (logchar));
-		m_priv->out->write(buf, p);
+        m_priv->out->write(buf);
 	}
 	else
 	{
@@ -113,14 +113,14 @@ void OutputStreamWriter::write(const LogString& str, Pool& p)
 		{
 			CharsetEncoder::encode(m_priv->enc, str, iter, buf);
 			buf.flip();
-			m_priv->out->write(buf, p);
+            m_priv->out->write(buf);
 			buf.clear();
 		}
 
 		CharsetEncoder::encode(m_priv->enc, str, iter, buf);
 		m_priv->enc->flush(buf);
 		buf.flip();
-		m_priv->out->write(buf, p);
+        m_priv->out->write(buf);
 	}
 }
 
diff --git a/src/main/cpp/patternlayout.cpp b/src/main/cpp/patternlayout.cpp
index 68d43c5e..f9a0f191 100644
--- a/src/main/cpp/patternlayout.cpp
+++ b/src/main/cpp/patternlayout.cpp
@@ -105,22 +105,19 @@ 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() {}
 
 void PatternLayout::setConversionPattern(const LogString& pattern)
 {
-	m_priv->conversionPattern = pattern;
-	Pool pool;
-	activateOptions(pool);
+    m_priv->conversionPattern = pattern;
+    activateOptions();
 }
 
 void PatternLayout::format(LogString& output,
-	const spi::LoggingEventPtr& event,
-	Pool& pool) const
+    const spi::LoggingEventPtr& event) const
 {
 	auto& lsMsg = event->getRenderedMessage();
 	output.reserve(m_priv->expectedPatternLength + lsMsg.size());
@@ -133,7 +130,7 @@ void PatternLayout::format(LogString& output,
 		converterIter++, formatterIter++)
 	{
 		int startField = (int)output.length();
-		(*converterIter)->format(event, output, pool);
+        (*converterIter)->format(event, output);
 		(*formatterIter)->format(startField, output);
 	}
 
@@ -179,7 +176,7 @@ void PatternLayout::setOption(const LogString& option, const LogString& value)
 	}
 }
 
-void PatternLayout::activateOptions(Pool&)
+void PatternLayout::activateOptions()
 {
 	LogString pat(m_priv->conversionPattern);
 
diff --git a/src/main/cpp/rollingpolicybase.cpp b/src/main/cpp/rollingpolicybase.cpp
index e6630412..9d71be1f 100644
--- a/src/main/cpp/rollingpolicybase.cpp
+++ b/src/main/cpp/rollingpolicybase.cpp
@@ -47,7 +47,7 @@ RollingPolicyBase::~RollingPolicyBase()
 {
 }
 
-void RollingPolicyBase::activateOptions(LOG4CXX_NS::helpers::Pool& /* pool */)
+void RollingPolicyBase::activateOptions()
 {
 	if (m_priv->fileNamePatternStr.length() > 0)
 	{
@@ -111,8 +111,7 @@ void RollingPolicyBase::parseFileNamePattern()
  */
 void RollingPolicyBase::formatFileName(
 	const ObjectPtr& obj,
-	LogString& toAppendTo,
-	Pool& pool) const
+    LogString& toAppendTo) const
 {
 	std::vector<FormattingInfoPtr>::const_iterator formatterIter =
 		m_priv->patternFields.begin();
@@ -123,7 +122,7 @@ void RollingPolicyBase::formatFileName(
 		converterIter++, formatterIter++)
 	{
 		auto startField = toAppendTo.length();
-		(*converterIter)->format(obj, toAppendTo, pool);
+        (*converterIter)->format(obj, toAppendTo);
 		(*formatterIter)->format((int)startField, toAppendTo);
 	}
 }
diff --git a/src/main/cpp/simpledateformat.cpp b/src/main/cpp/simpledateformat.cpp
index 15017752..77698842 100644
--- a/src/main/cpp/simpledateformat.cpp
+++ b/src/main/cpp/simpledateformat.cpp
@@ -17,8 +17,6 @@
 #include <log4cxx/logstring.h>
 #include <log4cxx/helpers/simpledateformat.h>
 
-#include <apr_time.h>
-#include <apr_strings.h>
 #include <sstream>
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/helpers/stringhelper.h>
@@ -87,12 +85,10 @@ class PatternToken
 		/**
 		 * Appends the formatted content to the string.
 		 * @param s string to which format contribution is appended.
-		 * @param date exploded date/time.
-		 * @param p memory pool.
+         * @param date exploded date/time.
 		 */
 		virtual void format(LogString& s,
-			const apr_time_exp_t& date,
-			LOG4CXX_NS::helpers::Pool& p) const = 0;
+            const apr_time_exp_t& date) const = 0;
 
 	protected:
 
@@ -206,7 +202,7 @@ class LiteralToken : public PatternToken
 		{
 		}
 
-		void format( LogString& s, const apr_time_exp_t&, Pool& /* p */ ) const
+        void format( LogString& s, const apr_time_exp_t&) const
 		{
 			s.append( count, ch );
 		}
@@ -225,7 +221,7 @@ class EraToken : public PatternToken
 		{
 		}
 
-		void format(LogString& s, const apr_time_exp_t& /* tm */, Pool& /* p */ ) const
+        void format(LogString& s, const apr_time_exp_t& /* tm */) const
 		{
 			s.append(1, (logchar) 0x41 /* 'A' */);
 			s.append(1, (logchar) 0x44 /* 'D' */);
@@ -243,11 +239,11 @@ class NumericToken : public PatternToken
 
 		virtual int getField( const apr_time_exp_t& tm ) const = 0;
 
-		void format( LogString& s, const apr_time_exp_t& tm, Pool& p ) const
+        void format( LogString& s, const apr_time_exp_t& tm ) const
 		{
 			size_t initialLength = s.length();
 
-			StringHelper::toString( getField( tm ), p, s );
+            StringHelper::toString( getField( tm ), s );
 			size_t finalLength = s.length();
 
 			if ( initialLength + width > finalLength )
@@ -300,7 +296,7 @@ class AbbreviatedMonthNameToken : public PatternToken
 			renderFacet(locale, PatternToken::incrementMonth, 'b', 0x62, "%b", names);
 		}
 
-		void format(LogString& s, const apr_time_exp_t& tm, Pool& /* p */ ) const
+        void format(LogString& s, const apr_time_exp_t& tm) const
 		{
 			s.append( names[tm.tm_mon] );
 		}
@@ -319,7 +315,7 @@ class FullMonthNameToken : public PatternToken
 			renderFacet(locale, PatternToken::incrementMonth, 'B', 0x42, "%B", names);
 		}
 
-		void format( LogString& s, const apr_time_exp_t& tm, Pool& /* p */ ) const
+        void format( LogString& s, const apr_time_exp_t& tm) const
 		{
 			s.append( names[tm.tm_mon] );
 		}
@@ -413,7 +409,7 @@ class AbbreviatedDayNameToken : public PatternToken
 			renderFacet(locale, PatternToken::incrementDay, 'a', 0x61, "%a", names);
 		}
 
-		void format( LogString& s, const apr_time_exp_t& tm, Pool& /* p */ ) const
+        void format( LogString& s, const apr_time_exp_t& tm ) const
 		{
 			s.append( names[tm.tm_wday] );
 		}
@@ -433,7 +429,7 @@ class FullDayNameToken : public PatternToken
 			renderFacet(locale, PatternToken::incrementDay, 'A', 0x41, "%A", names);
 		}
 
-		void format( LogString& s, const apr_time_exp_t& tm, Pool& /* p */ ) const
+        void format( LogString& s, const apr_time_exp_t& tm) const
 		{
 			s.append( names[tm.tm_wday] );
 		}
@@ -549,7 +545,7 @@ class AMPMToken : public PatternToken
 			renderFacet(locale, PatternToken::incrementHalfDay, 'p', 0x70, "%p", names);
 		}
 
-		void format( LogString& s, const apr_time_exp_t& tm, Pool& /* p */ ) const
+        void format( LogString& s, const apr_time_exp_t& tm) const
 		{
 			s.append( names[tm.tm_hour / 12] );
 		}
@@ -567,7 +563,7 @@ class GeneralTimeZoneToken : public PatternToken
 		{
 		}
 
-		void format( LogString& s, const apr_time_exp_t&, Pool& /* p */ ) const
+        void format( LogString& s, const apr_time_exp_t&) const
 		{
 			s.append(timeZone->getID());
 		}
@@ -590,7 +586,7 @@ class RFC822TimeZoneToken : public PatternToken
 		{
 		}
 
-		void format( LogString& s, const apr_time_exp_t& tm, Pool& p ) const
+        void format( LogString& s, const apr_time_exp_t& tm) const
 		{
 			if ( tm.tm_gmtoff == 0 )
 			{
@@ -610,14 +606,14 @@ class RFC822TimeZoneToken : public PatternToken
 				}
 
 				LogString hours;
-				StringHelper::toString( off / 3600, p, hours );
+                StringHelper::toString( off / 3600, hours );
 				if( hours.size() == 1 ){
 					s.push_back( '0' );
 				}
 				s.append(hours);
 
 				LogString min;
-				StringHelper::toString( ( off % 3600 ) / 60, p, min );
+                StringHelper::toString( ( off % 3600 ) / 60, min );
 				if( min.size() == 1 ){
 					s.push_back( '0' );
 				}
@@ -838,7 +834,7 @@ SimpleDateFormat::~SimpleDateFormat()
 }
 
 
-void SimpleDateFormat::format( LogString& s, log4cxx_time_t time, Pool& p ) const
+void SimpleDateFormat::format( LogString& s, log4cxx_time_t time ) const
 {
 	apr_time_exp_t exploded;
 	apr_status_t stat = m_priv->timeZone->explode( & exploded, time );
@@ -847,7 +843,7 @@ void SimpleDateFormat::format( LogString& s, log4cxx_time_t time, Pool& p ) cons
 	{
 		for ( PatternTokenList::const_iterator iter = m_priv->pattern.begin(); iter != m_priv->pattern.end(); iter++ )
 		{
-			( * iter )->format( s, exploded, p );
+            ( * iter )->format( s, exploded );
 		}
 	}
 }
diff --git a/src/main/cpp/sizebasedtriggeringpolicy.cpp b/src/main/cpp/sizebasedtriggeringpolicy.cpp
index 64788fa7..099c3796 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()
 {
 }
 
diff --git a/src/main/cpp/smtpappender.cpp b/src/main/cpp/smtpappender.cpp
index 752d25db..22020549 100644
--- a/src/main/cpp/smtpappender.cpp
+++ b/src/main/cpp/smtpappender.cpp
@@ -586,7 +586,7 @@ 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()
 {
 	bool activate = true;
 
@@ -629,7 +629,7 @@ void SMTPAppender::activateOptions(Pool& p)
 
 	if (activate)
 	{
-		AppenderSkeleton::activateOptions(p);
+        AppenderSkeleton::activateOptions();
 	}
 }
 
@@ -637,7 +637,7 @@ void SMTPAppender::activateOptions(Pool& p)
 Perform SMTPAppender specific appending actions, mainly adding
 the event to a cyclic buffer and checking if the event triggers
 an e-mail to be sent. */
-void SMTPAppender::append(const spi::LoggingEventPtr& event, Pool& p)
+void SMTPAppender::append(const spi::LoggingEventPtr& event)
 {
 	if (!checkEntryConditions())
 	{
@@ -651,7 +651,7 @@ void SMTPAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 	if (_priv->evaluator->isTriggeringEvent(event))
 	{
-		sendBuffer(p);
+        sendBuffer();
 	}
 }
 
@@ -730,7 +730,7 @@ void SMTPAppender::setBcc(const LogString& addressStr)
 /**
 Send the contents of the cyclic buffer as an e-mail message.
 */
-void SMTPAppender::sendBuffer(Pool& p)
+void SMTPAppender::sendBuffer()
 {
 #if LOG4CXX_HAVE_LIBESMTP
 
diff --git a/src/main/cpp/socketappenderskeleton.cpp b/src/main/cpp/socketappenderskeleton.cpp
index a0bdecfa..c664a744 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -61,19 +61,19 @@ SocketAppenderSkeleton::~SocketAppenderSkeleton()
 	finalize();
 }
 
-void SocketAppenderSkeleton::activateOptions(Pool& p)
+void SocketAppenderSkeleton::activateOptions()
 {
-	AppenderSkeleton::activateOptions(p);
+    AppenderSkeleton::activateOptions();
 	connect(p);
 }
 
 void SocketAppenderSkeleton::close()
 {
 	_priv->stopMonitor();
-	cleanUp(_priv->pool);
+    cleanUp();
 }
 
-void SocketAppenderSkeleton::connect(Pool& p)
+void SocketAppenderSkeleton::connect()
 {
 	if (_priv->address == 0)
 	{
@@ -90,7 +90,7 @@ void SocketAppenderSkeleton::connect(Pool& p)
 			{
 				LogString msg(LOG4CXX_STR("Connecting to [")
 					+ _priv->address->toString() + LOG4CXX_STR(":"));
-				StringHelper::toString(_priv->port, p, msg);
+                StringHelper::toString(_priv->port, msg);
 				msg += LOG4CXX_STR("].");
 				LogLog::debug(msg);
 			}
@@ -139,23 +139,20 @@ void SocketAppenderSkeleton::fireConnector()
 	std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
     if (_priv->taskName.empty())
     {
-        Pool p;
         _priv->taskName = _priv->name + LOG4CXX_STR(":")
             + _priv->address->toString() + LOG4CXX_STR(":");
-        StringHelper::toString(_priv->port, p, _priv->taskName);
+        StringHelper::toString(_priv->port, _priv->taskName);
     }
     auto taskManager = ThreadUtility::instancePtr();
     if (!taskManager->value().hasPeriodicTask(_priv->taskName))
     {
-        Pool p;
         if (LogLog::isDebugEnabled())
         {
-            Pool p;
             LogString msg(LOG4CXX_STR("Waiting "));
-            StringHelper::toString(_priv->reconnectionDelay, p, msg);
+            StringHelper::toString(_priv->reconnectionDelay, msg);
             msg += LOG4CXX_STR(" ms before retrying [")
                 + _priv->address->toString() + LOG4CXX_STR(":");
-            StringHelper::toString(_priv->port, p, msg);
+            StringHelper::toString(_priv->port, msg);
             msg += LOG4CXX_STR("].");
             LogLog::debug(msg);
         }
@@ -175,8 +172,7 @@ void SocketAppenderSkeleton::retryConnect()
 			pManager->value().removePeriodicTask(_priv->taskName);
 	}
 	else
-	{
-		Pool p;
+    {
 		SocketPtr socket;
 		try
 		{
@@ -184,17 +180,17 @@ void SocketAppenderSkeleton::retryConnect()
 			{
 				LogString msg(LOG4CXX_STR("Attempting connection to [")
 					+ _priv->address->toString() + LOG4CXX_STR(":"));
-				StringHelper::toString(_priv->port, p, msg);
+                StringHelper::toString(_priv->port, msg);
 				msg += LOG4CXX_STR("].");
 				LogLog::debug(msg);
 			}
 			socket = Socket::create(_priv->address, _priv->port);
-			setSocket(socket, p);
+            setSocket(socket);
 			if (LogLog::isDebugEnabled())
 			{
 				LogString msg(LOG4CXX_STR("Connection established to [")
 					+ _priv->address->toString() + LOG4CXX_STR(":"));
-				StringHelper::toString(_priv->port, p, msg);
+                StringHelper::toString(_priv->port, msg);
 				msg += LOG4CXX_STR("].");
 				LogLog::debug(msg);
 			}
@@ -212,7 +208,7 @@ void SocketAppenderSkeleton::retryConnect()
 		{
 			LogString msg(LOG4CXX_STR("Could not connect to [")
 				+ _priv->address->toString() + LOG4CXX_STR(":"));
-			StringHelper::toString(_priv->port, p, msg);
+            StringHelper::toString(_priv->port, msg);
 			msg += LOG4CXX_STR("].");
 			LogLog::warn(msg, e);
 		}
@@ -222,10 +218,10 @@ void SocketAppenderSkeleton::retryConnect()
 			if (LogLog::isDebugEnabled())
 			{
 				LogString msg(LOG4CXX_STR("Waiting "));
-				StringHelper::toString(_priv->reconnectionDelay, p, msg);
+                StringHelper::toString(_priv->reconnectionDelay, msg);
 				msg += LOG4CXX_STR(" ms before retrying [")
 					+ _priv->address->toString() + LOG4CXX_STR(":");
-				StringHelper::toString(_priv->port, p, msg);
+                StringHelper::toString(_priv->port, msg);
 				msg += LOG4CXX_STR("].");
 				LogLog::debug(msg);
 			}
diff --git a/src/main/cpp/stringhelper.cpp b/src/main/cpp/stringhelper.cpp
index 17321e03..0fd6f45b 100644
--- a/src/main/cpp/stringhelper.cpp
+++ b/src/main/cpp/stringhelper.cpp
@@ -151,7 +151,7 @@ void StringHelper::toString(bool val, LogString& dst)
 }
 
 
-void StringHelper::toString(int64_t n, Pool& pool, LogString& dst)
+void StringHelper::toString(int64_t n, LogString& dst)
 {
 #if LOG4CXX_LOGCHAR_IS_WCHAR
 	dst.append(std::to_wstring(n));
@@ -161,7 +161,7 @@ void StringHelper::toString(int64_t n, Pool& pool, LogString& dst)
 }
 
 
-void StringHelper::toString(size_t n, Pool& pool, LogString& dst)
+void StringHelper::toString(size_t n, LogString& dst)
 {
 #if LOG4CXX_LOGCHAR_IS_WCHAR
 	dst.append(std::to_wstring(n));
diff --git a/src/main/cpp/syslogappender.cpp b/src/main/cpp/syslogappender.cpp
index aee1ae80..34220bf1 100644
--- a/src/main/cpp/syslogappender.cpp
+++ b/src/main/cpp/syslogappender.cpp
@@ -82,10 +82,9 @@ void SyslogAppender::initSyslogFacilityStr()
 	_priv->facilityStr = getFacilityString(_priv->syslogFacility);
 
 	if (_priv->facilityStr.empty())
-	{
-		Pool p;
+    {
 		LogString msg(LOG4CXX_STR("\""));
-		StringHelper::toString(_priv->syslogFacility, p, msg);
+        StringHelper::toString(_priv->syslogFacility, msg);
 		msg.append(LOG4CXX_STR("\" is an unknown syslog facility. Defaulting to \"USER\"."));
 		LogLog::warn(msg);
 		_priv->syslogFacility = LOG_USER;
@@ -271,7 +270,7 @@ int SyslogAppender::getFacility(
 	}
 }
 
-void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
+void SyslogAppender::append(const spi::LoggingEventPtr& event)
 {
 	if  (!isAsSevereAsThreshold(event->getLevel()))
 	{
@@ -280,7 +279,7 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 	LogString msg;
 	std::string encoded;
-	_priv->layout->format(msg, event, p);
+    _priv->layout->format(msg, event);
 
 	Transcoder::encode(msg, encoded);
 
@@ -355,7 +354,7 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	for (auto const& item : packets)
 	{
 		LogString sbuf(1, 0x3C /* '<' */);
-		StringHelper::toString((_priv->syslogFacility | event->getLevel()->getSyslogEquivalent()), p, sbuf);
+        StringHelper::toString((_priv->syslogFacility | event->getLevel()->getSyslogEquivalent()), sbuf);
 		sbuf.append(1, (logchar) 0x3E /* '>' */);
 
 		if (_priv->facilityPrinting)
@@ -368,7 +367,7 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	}
 }
 
-void SyslogAppender::activateOptions(Pool&)
+void SyslogAppender::activateOptions()
 {
 }
 
diff --git a/src/main/cpp/systemerrwriter.cpp b/src/main/cpp/systemerrwriter.cpp
index 97f0d108..f459e425 100644
--- a/src/main/cpp/systemerrwriter.cpp
+++ b/src/main/cpp/systemerrwriter.cpp
@@ -37,16 +37,16 @@ SystemErrWriter::~SystemErrWriter()
 {
 }
 
-void SystemErrWriter::close(Pool& /* p */)
+void SystemErrWriter::close()
 {
 }
 
-void SystemErrWriter::flush(Pool& /* p */)
+void SystemErrWriter::flush()
 {
 	flush();
 }
 
-void SystemErrWriter::write(const LogString& str, Pool& /* p */)
+void SystemErrWriter::write(const LogString& str)
 {
 	write(str);
 }
diff --git a/src/main/cpp/systemoutwriter.cpp b/src/main/cpp/systemoutwriter.cpp
index d4b40b58..e7f56c51 100644
--- a/src/main/cpp/systemoutwriter.cpp
+++ b/src/main/cpp/systemoutwriter.cpp
@@ -37,18 +37,18 @@ SystemOutWriter::~SystemOutWriter()
 {
 }
 
-void SystemOutWriter::close(Pool& /* p */ )
+void SystemOutWriter::close()
 {
 }
 
-void SystemOutWriter::flush(Pool& /* p */ )
+void SystemOutWriter::flush()
 {
-	flush();
+    flush();
 }
 
-void SystemOutWriter::write(const LogString& str, Pool& /* p */ )
+void SystemOutWriter::write(const LogString& str)
 {
-	write(str);
+    write(str);
 }
 
 bool SystemOutWriter::isWide()
@@ -62,7 +62,7 @@ bool SystemOutWriter::isWide()
 #endif
 }
 
-void SystemOutWriter::write(const LogString& str)
+void SystemOutWriter::write_raw(const LogString& str)
 {
 #if LOG4CXX_WCHAR_T_API
 
@@ -78,7 +78,7 @@ void SystemOutWriter::write(const LogString& str)
 	fputs(msg.c_str(), stdout);
 }
 
-void SystemOutWriter::flush()
+void SystemOutWriter::flush_raw()
 {
 	fflush(stdout);
 }
diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp
index cc3b1439..52eff768 100644
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@ -110,7 +110,7 @@ TelnetAppender::~TelnetAppender()
 	finalize();
 }
 
-void TelnetAppender::activateOptions(Pool& /* p */)
+void TelnetAppender::activateOptions()
 {
 	if (_priv->serverSocket == NULL)
 	{
@@ -203,7 +203,7 @@ void TelnetAppender::write(ByteBuffer& buf)
 	}
 }
 
-void TelnetAppender::writeStatus(const SocketPtr& socket, const LogString& msg, Pool& p)
+void TelnetAppender::writeStatus(const SocketPtr& socket, const LogString& msg)
 {
 	size_t bytesSize = msg.size() * 2;
 	char* bytes = p.pstralloc(bytesSize);
@@ -220,7 +220,7 @@ void TelnetAppender::writeStatus(const SocketPtr& socket, const LogString& msg,
 	}
 }
 
-void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p)
+void TelnetAppender::append(const spi::LoggingEventPtr& event)
 {
 	size_t count = _priv->activeConnections;
 
@@ -228,7 +228,7 @@ void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	{
 		LogString msg;
 		if (_priv->layout)
-			_priv->layout->format(msg, event, p);
+            _priv->layout->format(msg, event);
 		else
 			msg = event->getRenderedMessage();
 		msg.append(LOG4CXX_STR("\r\n"));
@@ -273,9 +273,8 @@ void TelnetAppender::acceptConnections()
 			bool done = _priv->closed;
 
 			if (done)
-			{
-				Pool p;
-				writeStatus(newClient, LOG4CXX_STR("Log closed.\r\n"), p);
+            {
+                writeStatus(newClient, LOG4CXX_STR("Log closed.\r\n"));
 				newClient->close();
 
 				break;
@@ -284,9 +283,8 @@ void TelnetAppender::acceptConnections()
 			size_t count = _priv->activeConnections;
 
 			if (count >= _priv->connections.size())
-			{
-				Pool p;
-				writeStatus(newClient, LOG4CXX_STR("Too many connections.\r\n"), p);
+            {
+                writeStatus(newClient, LOG4CXX_STR("Too many connections.\r\n"));
 				newClient->close();
 			}
 			else
@@ -307,11 +305,10 @@ void TelnetAppender::acceptConnections()
 					}
 				}
 
-				Pool p;
 				LogString oss(LOG4CXX_STR("TelnetAppender v1.0 ("));
-				StringHelper::toString((int) count + 1, p, oss);
+                StringHelper::toString((int) count + 1, oss);
 				oss += LOG4CXX_STR(" active connections)\r\n\r\n");
-				writeStatus(newClient, oss, p);
+                writeStatus(newClient, oss);
 			}
 		}
 		catch (InterruptedIOException&)
diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp
index 1be53e87..ab7e0aff 100644
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@ -40,8 +40,7 @@ WriterAppender::WriterAppender() :
 WriterAppender::WriterAppender(const LayoutPtr& layout, helpers::WriterPtr& writer)
 	: AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout, writer))
 {
-	Pool p;
-	activateOptions(p);
+    activateOptions();
 }
 
 WriterAppender::WriterAppender(const LayoutPtr& layout)
@@ -68,7 +67,7 @@ WriterAppender::~WriterAppender()
 	finalize();
 }
 
-void WriterAppender::activateOptions(Pool& p)
+void WriterAppender::activateOptions()
 {
 	int errors = 0;
 
@@ -96,7 +95,7 @@ void WriterAppender::activateOptions(Pool& p)
 
 
 
-void WriterAppender::append(const spi::LoggingEventPtr& event, Pool& pool1)
+void WriterAppender::append(const spi::LoggingEventPtr& event)
 {
 
 	if (!checkEntryConditions())
@@ -104,7 +103,7 @@ void WriterAppender::append(const spi::LoggingEventPtr& event, Pool& pool1)
 		return;
 	}
 
-	subAppend(event, pool1);
+    subAppend(event);
 }
 
 /**
@@ -172,8 +171,8 @@ void WriterAppender::closeWriter()
 			//   Using the object's pool since this is a one-shot operation
 			//    and pool is likely to be reclaimed soon when appender is destructed.
 			//
-			writeFooter(_priv->pool);
-			_priv->writer->close(_priv->pool);
+            writeFooter();
+            _priv->writer->close();
 			_priv->writer = 0;
 		}
 		catch (IOException& e)
@@ -234,10 +233,10 @@ void WriterAppender::setEncoding(const LogString& enc)
 	_priv->encoding = enc;
 }
 
-void WriterAppender::subAppend(const spi::LoggingEventPtr& event, Pool& p)
+void WriterAppender::subAppend(const spi::LoggingEventPtr& event)
 {
 	LogString msg;
-	_priv->layout->format(msg, event, p);
+    _priv->layout->format(msg, event);
 
 	if (_priv->writer != NULL)
 	{
@@ -251,17 +250,17 @@ void WriterAppender::subAppend(const spi::LoggingEventPtr& event, Pool& p)
 }
 
 
-void WriterAppender::writeFooter(Pool& p)
+void WriterAppender::writeFooter()
 {
 	if (_priv->layout != NULL)
 	{
 		LogString foot;
-		_priv->layout->appendFooter(foot, p);
-		_priv->writer->write(foot, p);
+        _priv->layout->appendFooter(foot);
+        _priv->writer->write(foot);
 	}
 }
 
-void WriterAppender::writeHeader(Pool& p)
+void WriterAppender::writeHeader()
 {
 	if (_priv->layout != NULL)
 	{
diff --git a/src/main/cpp/zipcompressaction.cpp b/src/main/cpp/zipcompressaction.cpp
index febb2004..64baba1a 100644
--- a/src/main/cpp/zipcompressaction.cpp
+++ b/src/main/cpp/zipcompressaction.cpp
@@ -52,98 +52,98 @@ ZipCompressAction::ZipCompressAction(const File& src,
 {
 }
 
-bool ZipCompressAction::execute(LOG4CXX_NS::helpers::Pool& p) const
+bool ZipCompressAction::execute() const
 {
-	if (!priv->source.exists(p))
+    if (!priv->source.exists())
 	{
 		return false;
 	}
 
-	apr_pool_t* aprpool = p.getAPRPool();
-	apr_procattr_t* attr;
-	apr_status_t stat = apr_procattr_create(&attr, aprpool);
-
-	if (stat != APR_SUCCESS)
-	{
-		throw IOException(stat);
-	}
-
-	stat = apr_procattr_io_set(attr, APR_NO_PIPE, APR_NO_PIPE, APR_FULL_BLOCK);
-
-	if (stat != APR_SUCCESS)
-	{
-		throw IOException(stat);
-	}
-
-	stat = apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
-
-	if (stat != APR_SUCCESS)
-	{
-		throw IOException(stat);
-	}
-
-	//
-	// redirect the child's error stream to this processes' error stream
-	//
-	apr_file_t* child_err;
-	stat = apr_file_open_stderr(&child_err, aprpool);
-
-	if (stat == APR_SUCCESS)
-	{
-		stat =  apr_procattr_child_err_set(attr, child_err, NULL);
-
-		if (stat != APR_SUCCESS)
-		{
-			throw IOException(stat);
-		}
-	}
-
-	const char** args = (const char**)
-		apr_palloc(aprpool, 5 * sizeof(*args));
-	int i = 0;
-
-	args[i++] = "zip";
-	args[i++] = "-q";
-	args[i++] = Transcoder::encode(priv->destination.getPath(), p);
-	args[i++] = Transcoder::encode(priv->source.getPath(), p);
-	args[i++] = NULL;
-
-	if (priv->destination.exists(p))
-	{
-		priv->destination.deleteFile(p);
-	}
-
-	apr_proc_t pid;
-	stat = apr_proc_create(&pid, "zip", args, NULL, attr, aprpool);
-
-	if (stat != APR_SUCCESS)
-	{
-		LogLog::warn(LOG4CXX_STR("Failed to fork zip during log rotation; leaving log file uncompressed"));
-		if (priv->throwIOExceptionOnForkFailure)
-			throw IOException(LOG4CXX_STR("zip"), stat);
-		/* If we fail here (to create the zip child process),
-		 * skip the compression and consider the rotation to be
-		 * otherwise successful. The caller has already rotated
-		 * the log file (`source` here refers to the
-		 * uncompressed, rotated path, and `destination` the
-		 * same path with `.zip` appended). Remove the empty
-		 * destination file and leave source as-is.
-		 */
-		return true;
-	}
-
-	int exitCode;
-	apr_proc_wait(&pid, &exitCode, NULL, APR_WAIT);
-
-	if (exitCode != APR_SUCCESS)
-	{
-		throw IOException(exitCode);
-	}
-
-	if (priv->deleteSource)
-	{
-		priv->source.deleteFile(p);
-	}
+//	apr_pool_t* aprpool = p.getAPRPool();
+//	apr_procattr_t* attr;
+//	apr_status_t stat = apr_procattr_create(&attr, aprpool);
+
+//	if (stat != APR_SUCCESS)
+//	{
+//		throw IOException(stat);
+//	}
+
+//	stat = apr_procattr_io_set(attr, APR_NO_PIPE, APR_NO_PIPE, APR_FULL_BLOCK);
+
+//	if (stat != APR_SUCCESS)
+//	{
+//		throw IOException(stat);
+//	}
+
+//	stat = apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
+
+//	if (stat != APR_SUCCESS)
+//	{
+//		throw IOException(stat);
+//	}
+
+//	//
+//	// redirect the child's error stream to this processes' error stream
+//	//
+//	apr_file_t* child_err;
+//	stat = apr_file_open_stderr(&child_err, aprpool);
+
+//	if (stat == APR_SUCCESS)
+//	{
+//		stat =  apr_procattr_child_err_set(attr, child_err, NULL);
+
+//		if (stat != APR_SUCCESS)
+//		{
+//			throw IOException(stat);
+//		}
+//	}
+
+//	const char** args = (const char**)
+//		apr_palloc(aprpool, 5 * sizeof(*args));
+//	int i = 0;
+
+//	args[i++] = "zip";
+//	args[i++] = "-q";
+//	args[i++] = Transcoder::encode(priv->destination.getPath(), p);
+//	args[i++] = Transcoder::encode(priv->source.getPath(), p);
+//	args[i++] = NULL;
+
+//    if (priv->destination.exists())
+//	{
+//        priv->destination.deleteFile();
+//	}
+
+//	apr_proc_t pid;
+//	stat = apr_proc_create(&pid, "zip", args, NULL, attr, aprpool);
+
+//	if (stat != APR_SUCCESS)
+//	{
+//		LogLog::warn(LOG4CXX_STR("Failed to fork zip during log rotation; leaving log file uncompressed"));
+//		if (priv->throwIOExceptionOnForkFailure)
+//			throw IOException(LOG4CXX_STR("zip"), stat);
+//		/* If we fail here (to create the zip child process),
+//		 * skip the compression and consider the rotation to be
+//		 * otherwise successful. The caller has already rotated
+//		 * the log file (`source` here refers to the
+//		 * uncompressed, rotated path, and `destination` the
+//		 * same path with `.zip` appended). Remove the empty
+//		 * destination file and leave source as-is.
+//		 */
+//		return true;
+//	}
+
+//	int exitCode;
+//	apr_proc_wait(&pid, &exitCode, NULL, APR_WAIT);
+
+//	if (exitCode != APR_SUCCESS)
+//	{
+//		throw IOException(exitCode);
+//	}
+
+//	if (priv->deleteSource)
+//	{
+//        priv->source.deleteFile();
+//	}
 
 	return true;
 }
diff --git a/src/main/include/log4cxx/appender.h b/src/main/include/log4cxx/appender.h
index 8e74552e..0340bb36 100644
--- a/src/main/include/log4cxx/appender.h
+++ b/src/main/include/log4cxx/appender.h
@@ -84,8 +84,7 @@ class LOG4CXX_EXPORT Appender :
 		 Loggers will call the <code>doAppend</code> method of appender
 		 implementations in order to log.
 		*/
-		virtual void doAppend(const spi::LoggingEventPtr& event,
-			LOG4CXX_NS::helpers::Pool& pool) = 0;
+        virtual void doAppend(const spi::LoggingEventPtr& event) = 0;
 
 
 		/**
diff --git a/src/main/include/log4cxx/appenderskeleton.h b/src/main/include/log4cxx/appenderskeleton.h
index 30260371..cc55e7fa 100644
--- a/src/main/include/log4cxx/appenderskeleton.h
+++ b/src/main/include/log4cxx/appenderskeleton.h
@@ -48,14 +48,14 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		method to perform actual logging. See also AppenderSkeleton::doAppend
 		method.
 		*/
-		virtual void append(const spi::LoggingEventPtr& event, helpers::Pool& p) = 0;
+        virtual void append(const spi::LoggingEventPtr& event) = 0;
 
 		/**
 		* Compare \c event level against the appender threshold and check that \c event is accepted.
 		* If \c event is accepted, delegate log output to the subclass implementation of
 		* the AppenderSkeleton#append method.
 		* */
-		void doAppendImpl(const spi::LoggingEventPtr& event, helpers::Pool& pool);
+        void doAppendImpl(const spi::LoggingEventPtr& event);
 
 		/**
 		* Does no attached filter deny \c event or does an attached filter accept \c event?
@@ -85,7 +85,7 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool& /* pool */) override {}
+        void activateOptions() override {}
 
 		/**
 		\copybrief spi::OptionHandler::setOption()
@@ -157,7 +157,7 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		*
 		* Reimplement this method in your appender if you use a different concurrency control technique.
 		* */
-		void doAppend(const spi::LoggingEventPtr& event, helpers::Pool& pool) override;
+        void doAppend(const spi::LoggingEventPtr& event) override;
 
 		/**
 		Set the {@link spi::ErrorHandler ErrorHandler} for this Appender.
diff --git a/src/main/include/log4cxx/asyncappender.h b/src/main/include/log4cxx/asyncappender.h
index 6e3212fe..0522ffaa 100644
--- a/src/main/include/log4cxx/asyncappender.h
+++ b/src/main/include/log4cxx/asyncappender.h
@@ -123,15 +123,14 @@ class LOG4CXX_EXPORT AsyncAppender :
 		/**
 		* Call AppenderSkeleton#doAppendImpl without acquiring a lock.
 		*/
-		void doAppend(const spi::LoggingEventPtr& event,
-			helpers::Pool& pool1) override;
+        void doAppend(const spi::LoggingEventPtr& event) override;
 
 		/**
 		* Add \c event to a ring buffer.
 		* The behaviour when the ring buffer is full
 		* is controlled by the [Blocking property](@ref BlockingProperty) value.
 		*/
-		void append(const spi::LoggingEventPtr& event, helpers::Pool& p) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 		/**
 		Close this <code>AsyncAppender</code> by interrupting the
diff --git a/src/main/include/log4cxx/consoleappender.h b/src/main/include/log4cxx/consoleappender.h
index 328ea809..5e6c438f 100644
--- a/src/main/include/log4cxx/consoleappender.h
+++ b/src/main/include/log4cxx/consoleappender.h
@@ -87,7 +87,7 @@ class LOG4CXX_EXPORT ConsoleAppender : public WriterAppender
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 		/**
 		\copybrief WriterAppender::setOption()
 
diff --git a/src/main/include/log4cxx/db/odbcappender.h b/src/main/include/log4cxx/db/odbcappender.h
index 5a58cb3c..8642cedd 100644
--- a/src/main/include/log4cxx/db/odbcappender.h
+++ b/src/main/include/log4cxx/db/odbcappender.h
@@ -179,27 +179,25 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 		/**
 		Activate the specified options.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		* Adds the event to the buffer.  When full the buffer is flushed.
 		*/
-		void append(const spi::LoggingEventPtr& event, helpers::Pool&) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 	protected:
 #if LOG4CXX_ABI_VERSION <= 15
 		/**
 		* To be removed.
 		*/
-		LogString getLogStatement(const spi::LoggingEventPtr& event,
-			helpers::Pool& p) const;
+        LogString getLogStatement(const spi::LoggingEventPtr& event) const;
 
 		/**
 		*
 		* To be removed.
 		* */
-		virtual void execute(const LogString& sql,
-			LOG4CXX_NS::helpers::Pool& p) /*throw(SQLException)*/;
+        virtual void execute(const LogString& sql) /*throw(SQLException)*/;
 #endif
 		/**
 		* Override this to return the connection to a pool, or to clean up the
@@ -216,7 +214,7 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 		* By default this creates a single connection which is held open
 		* until the object is garbage collected.
 		*/
-		virtual SQLHDBC getConnection(LOG4CXX_NS::helpers::Pool& p) /*throw(SQLException)*/;
+        virtual SQLHDBC getConnection() /*throw(SQLException)*/;
 
 		/**
 		* Closes the appender, flushing the buffer first then closing the default
@@ -232,7 +230,7 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 		*
 		* If a statement fails the LoggingEvent stays in the buffer!
 		*/
-		virtual void flushBuffer(LOG4CXX_NS::helpers::Pool& p);
+        virtual void flushBuffer();
 
 		/**
 		* Does this appender require a layout?
@@ -269,11 +267,9 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 		ODBCAppender(const ODBCAppender&);
 		ODBCAppender& operator=(const ODBCAppender&);
 #if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) || defined(_WIN32)
-		static void encode(wchar_t** dest, const LogString& src,
-			LOG4CXX_NS::helpers::Pool& p);
+        static void encode(wchar_t** dest, const LogString& src);
 #endif
-		static void encode(unsigned short** dest, const LogString& src,
-			LOG4CXX_NS::helpers::Pool& p);
+        static void encode(unsigned short** dest, const LogString& src);
 
 	protected:
 		struct ODBCAppenderPriv;
diff --git a/src/main/include/log4cxx/file.h b/src/main/include/log4cxx/file.h
index 3f2ab806..7a611f47 100644
--- a/src/main/include/log4cxx/file.h
+++ b/src/main/include/log4cxx/file.h
@@ -20,18 +20,13 @@
 
 #include <log4cxx/logger.h>
 #include <log4cxx/logstring.h>
-
-extern "C" {
-	struct apr_file_t;
-	struct apr_finfo_t;
-}
+#include <filesystem>
 
 namespace LOG4CXX_NS
 {
 namespace helpers
 {
 class Transcoder;
-class Pool;
 }
 
 /**
@@ -99,23 +94,20 @@ class LOG4CXX_EXPORT File
 		~File();
 
 		/**
-		 *  Determines if file exists.
-		 *  @param p pool.
+         *  Determines if file exists.
 		 *  @return true if file exists.
 		 */
-		bool exists(LOG4CXX_NS::helpers::Pool& p) const;
+        bool exists() const;
 		/**
 		 *  Determines length of file.  May not be accurate if file is current open.
-		 *  @param p pool.
 		 *  @return length of file.
 		 */
-		size_t length(LOG4CXX_NS::helpers::Pool& p) const;
+        size_t length() const;
 		/**
-		 *  Determines last modification date.
-		 *  @param p pool.
+         *  Determines last modification date.
 		 *  @return length of file.
 		 */
-		log4cxx_time_t lastModified(LOG4CXX_NS::helpers::Pool& p) const;
+        log4cxx_time_t lastModified() const;
 		/**
 		 *  Get final portion of file path.
 		 *  @return file name.
@@ -132,49 +124,45 @@ class LOG4CXX_EXPORT File
 		File& setPath(const LogString&);
 
 		/**
-		 *  Open file.  See apr_file_open for details.
-		 *  @param file APR file handle.
+         *  Open file.  See apr_file_open for details.
 		 *  @param flags flags.
-		 *  @param perm permissions.
-		 *  @param p pool.
+         *  @param perm permissions.
 		 *  @return APR_SUCCESS if successful.
 		 */
-		log4cxx_status_t open(apr_file_t** file, int flags,
-			int perm, LOG4CXX_NS::helpers::Pool& p) const;
+        log4cxx_status_t open(std::fstream* fstream, int flags,
+            int perm) const;
 
 		/**
 		 *   List files if current file is a directory.
 		 *   @param p pool.
 		 *   @return list of files in this directory, operation of non-directory returns empty list.
 		 */
-		std::vector<LogString> list(LOG4CXX_NS::helpers::Pool& p) const;
+        std::vector<LogString> list() const;
 
 		/**
-		 *   Delete file.
-		 *   @param p pool.
+         *   Delete file.
 		 *   @return true if file successfully deleted.
 		 */
-		bool deleteFile(LOG4CXX_NS::helpers::Pool& p) const;
+        bool deleteFile() const;
 		/**
 		 *   Rename file.
-		 *   @param dest new path for file.
-		 *   @param p pool.
+         *   @param dest new path for file.
 		 *   @return true if file successfully renamed.
 		 */
-		bool renameTo(const File& dest, LOG4CXX_NS::helpers::Pool& p) const;
+        bool renameTo(const File& dest) const;
 
 		/**
 		 *   Get path of parent directory.
 		 *   @param p pool.
 		 *   @return path of parent directory.
 		 */
-		LogString getParent(LOG4CXX_NS::helpers::Pool& p) const;
+        LogString getParent() const;
 		/**
 		 *  Make directories recursively.
 		 *  @param p pool.
 		 *  @return true if all requested directories existed or have been created.
 		 */
-		bool mkdirs(LOG4CXX_NS::helpers::Pool& p) const;
+        bool mkdirs() const;
 
 		/**
 		 * Set the file to be deleted when this object is destroyed.
@@ -191,9 +179,7 @@ class LOG4CXX_EXPORT File
 		bool getAutoDelete() const;
 
 	private:
-		LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(FilePrivate, m_priv)
-		static char* convertBackSlashes(char*);
-		char* getPath(LOG4CXX_NS::helpers::Pool& p) const;
+        LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(FilePrivate, m_priv)
 };
 } // namespace log4cxx
 
diff --git a/src/main/include/log4cxx/fileappender.h b/src/main/include/log4cxx/fileappender.h
index eb72f58d..9f523db8 100644
--- a/src/main/include/log4cxx/fileappender.h
+++ b/src/main/include/log4cxx/fileappender.h
@@ -26,10 +26,6 @@
 
 namespace LOG4CXX_NS
 {
-namespace helpers
-{
-class Pool;
-}
 
 /**
 *  FileAppender appends log events to a file.
@@ -123,7 +119,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() override;
 
 		/**
 		\copybrief AppenderSkeleton::setOption()
@@ -219,7 +215,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,12 +234,10 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
 		@param append If true will append to fileName. Otherwise will
 		truncate fileName.
 		@param bufferedIO Do we do bufferedIO?
-		@param bufferSize How big should the IO buffer be?
-		@param p memory pool for operation.
+        @param bufferSize How big should the IO buffer be?
 		*/
 		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);
 
diff --git a/src/main/include/log4cxx/helpers/appenderattachableimpl.h b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
index 289512e9..a4d3378a 100644
--- a/src/main/include/log4cxx/helpers/appenderattachableimpl.h
+++ b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
@@ -66,8 +66,7 @@ class LOG4CXX_EXPORT AppenderAttachableImpl :
 		/**
 		 Call the <code>doAppend</code> method on all attached appenders.
 		*/
-		int appendLoopOnAppenders(const spi::LoggingEventPtr& event,
-			LOG4CXX_NS::helpers::Pool& p);
+        int appendLoopOnAppenders(const spi::LoggingEventPtr& event);
 
 		/**
 		 * Get all previously added appenders as an Enumeration.
diff --git a/src/main/include/log4cxx/helpers/bufferedwriter.h b/src/main/include/log4cxx/helpers/bufferedwriter.h
index 36ae80e3..7a5f146d 100644
--- a/src/main/include/log4cxx/helpers/bufferedwriter.h
+++ b/src/main/include/log4cxx/helpers/bufferedwriter.h
@@ -46,9 +46,9 @@ class LOG4CXX_EXPORT BufferedWriter : public Writer
 		BufferedWriter(WriterPtr& out, size_t sz);
 		virtual ~BufferedWriter();
 
-		void close(Pool& p) override;
-		void flush(Pool& p) override;
-		void write(const LogString& str, Pool& p) override;
+        void close() override;
+        void flush() override;
+        void write(const LogString& str) override;
 
 		WriterPtr getWriter() const;
 	private:
diff --git a/src/main/include/log4cxx/helpers/bytearrayoutputstream.h b/src/main/include/log4cxx/helpers/bytearrayoutputstream.h
index 0335914d..15161fb9 100644
--- a/src/main/include/log4cxx/helpers/bytearrayoutputstream.h
+++ b/src/main/include/log4cxx/helpers/bytearrayoutputstream.h
@@ -48,9 +48,9 @@ class LOG4CXX_EXPORT ByteArrayOutputStream : public OutputStream
 		ByteArrayOutputStream();
 		virtual ~ByteArrayOutputStream();
 
-		void close(Pool& p) override;
-		void flush(Pool& p) override;
-		void write(ByteBuffer& buf, Pool& p) override;
+        void close() override;
+        void flush() override;
+        void write(ByteBuffer& buf) override;
 		ByteList toByteArray() const;
 
 	private:
diff --git a/src/main/include/log4cxx/helpers/cacheddateformat.h b/src/main/include/log4cxx/helpers/cacheddateformat.h
index 772ead2e..3878e8e4 100644
--- a/src/main/include/log4cxx/helpers/cacheddateformat.h
+++ b/src/main/include/log4cxx/helpers/cacheddateformat.h
@@ -100,27 +100,23 @@ class LOG4CXX_EXPORT CachedDateFormat : public LOG4CXX_NS::helpers::DateFormat
 		 * Finds start of millisecond field in formatted time.
 		 * @param time long time, must be integral number of seconds
 		 * @param formatted String corresponding formatted string
-		 * @param formatter DateFormat date format
-		 * @param pool pool.
+         * @param formatter DateFormat date format
 		 * @return int position in string of first digit of milliseconds,
 		 *    -1 indicates no millisecond field, -2 indicates unrecognized
 		 *    field (likely RelativeTimeDateFormat)
 		 */
 		static int findMillisecondStart(
 			log4cxx_time_t time, const LogString& formatted,
-			const LOG4CXX_NS::helpers::DateFormatPtr& formatter,
-			LOG4CXX_NS::helpers::Pool& pool);
+            const LOG4CXX_NS::helpers::DateFormatPtr& formatter);
 
 		/**
 		 * Formats a Date into a date/time string.
 		 *
 		 *  @param date the date to format.
-		 *  @param sbuf the string buffer to write to.
-		 *  @param p memory pool.
+         *  @param sbuf the string buffer to write to.
 		 */
 		virtual void format(LogString& sbuf,
-			log4cxx_time_t date,
-			LOG4CXX_NS::helpers::Pool& p) const;
+            log4cxx_time_t date) const;
 
 	private:
 		/**
@@ -148,12 +144,10 @@ class LOG4CXX_EXPORT CachedDateFormat : public LOG4CXX_NS::helpers::DateFormat
 		/**
 		* Format an integer consistent with the format method.
 		* @param s string to which the numeric string is appended.
-		* @param n integer value.
-		* @param p memory pool used during formatting.
+        * @param n integer value.
 		*/
 		virtual void numberFormat(LogString& s,
-			int n,
-			LOG4CXX_NS::helpers::Pool& p) const;
+            int n) const;
 
 		/**
 		 * Gets maximum cache validity for the specified SimpleDateTime
diff --git a/src/main/include/log4cxx/helpers/dateformat.h b/src/main/include/log4cxx/helpers/dateformat.h
index 8a827883..725ab841 100644
--- a/src/main/include/log4cxx/helpers/dateformat.h
+++ b/src/main/include/log4cxx/helpers/dateformat.h
@@ -46,10 +46,9 @@ class LOG4CXX_EXPORT DateFormat : public Object
 		/**
 		* Formats an log4cxx_time_t into a date/time string.
 		* @param s string to which the date/time string is appended.
-		* @param tm date to be formatted.
-		* @param p memory pool used during formatting.
+        * @param tm date to be formatted.
 		*/
-		virtual void format(LogString& s, log4cxx_time_t tm, LOG4CXX_NS::helpers::Pool& p) const = 0;
+        virtual void format(LogString& s, log4cxx_time_t tm) const = 0;
 
 		/**
 		* Sets the time zone.
@@ -60,12 +59,11 @@ class LOG4CXX_EXPORT DateFormat : public Object
 		/**
 		* Format an integer consistent with the format method.
 		* @param s string to which the numeric string is appended.
-		* @param n integer value.
-		* @param p memory pool used during formatting.
+        * @param n integer value.
 		* @remarks This method is used by CachedDateFormat to
 		* format the milliseconds.
 		*/
-		virtual void numberFormat(LogString& s, int n, LOG4CXX_NS::helpers::Pool& p) const;
+        virtual void numberFormat(LogString& s, int n) const;
 
 
 	protected:
diff --git a/src/main/include/log4cxx/helpers/fileoutputstream.h b/src/main/include/log4cxx/helpers/fileoutputstream.h
index a1b15c4e..ed09c33d 100644
--- a/src/main/include/log4cxx/helpers/fileoutputstream.h
+++ b/src/main/include/log4cxx/helpers/fileoutputstream.h
@@ -47,18 +47,17 @@ class LOG4CXX_EXPORT FileOutputStream : public OutputStream
 		FileOutputStream(const logchar* filename, bool append = false);
 		virtual ~FileOutputStream();
 
-		void close(Pool& p) override;
-		void flush(Pool& p) override;
-		void write(ByteBuffer& buf, Pool& p) override;
+        void close() override;
+        void flush() override;
+        void write(ByteBuffer& buf) override;
 
-		apr_file_t* getFilePtr() const;
+        std::ofstream* getFilePtr() const;
 
 	private:
 		FileOutputStream(const FileOutputStream&) = delete;
 		FileOutputStream(FileOutputStream&&) = delete;
 		FileOutputStream& operator=(const FileOutputStream&) = delete;
-		static apr_file_t* open(const LogString& fn, bool append,
-			LOG4CXX_NS::helpers::Pool& p);
+        static bool open(std::ofstream& fout, const LogString& fn, bool append);
 };
 
 LOG4CXX_PTR_DEF(FileOutputStream);
diff --git a/src/main/include/log4cxx/helpers/inputstreamreader.h b/src/main/include/log4cxx/helpers/inputstreamreader.h
index 822748aa..32fc094c 100644
--- a/src/main/include/log4cxx/helpers/inputstreamreader.h
+++ b/src/main/include/log4cxx/helpers/inputstreamreader.h
@@ -68,16 +68,14 @@ class LOG4CXX_EXPORT InputStreamReader : public Reader
 
 		/**
 		 * Closes the stream.
-		 *
-		 * @param p The memory pool associated with the reader.
 		 */
-		void close(Pool& p) override;
+        void close() override;
 
 		/**
 		 * @return The complete stream contents as a LogString.
 		 * @param p The memory pool associated with the reader.
 		 */
-		LogString read(Pool& p) override;
+        LogString read() override;
 
 		/**
 		 * @return The name of the character encoding being used by this stream.
diff --git a/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h b/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
index 21111668..63d580d8 100644
--- a/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
+++ b/src/main/include/log4cxx/helpers/onlyonceerrorhandler.h
@@ -69,7 +69,7 @@ class LOG4CXX_EXPORT OnlyOnceErrorHandler :
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/helpers/outputstream.h b/src/main/include/log4cxx/helpers/outputstream.h
index 95d20bf5..368b20f7 100644
--- a/src/main/include/log4cxx/helpers/outputstream.h
+++ b/src/main/include/log4cxx/helpers/outputstream.h
@@ -43,9 +43,9 @@ class LOG4CXX_EXPORT OutputStream : public Object
 		virtual ~OutputStream();
 
 	public:
-		virtual void close(Pool& p) = 0;
-		virtual void flush(Pool& p) = 0;
-		virtual void write(ByteBuffer& buf, Pool& p) = 0;
+        virtual void close() = 0;
+        virtual void flush() = 0;
+        virtual void write(ByteBuffer& buf) = 0;
 
 	private:
 		OutputStream(const OutputStream&);
diff --git a/src/main/include/log4cxx/helpers/outputstreamwriter.h b/src/main/include/log4cxx/helpers/outputstreamwriter.h
index 547744b9..cb5729f9 100644
--- a/src/main/include/log4cxx/helpers/outputstreamwriter.h
+++ b/src/main/include/log4cxx/helpers/outputstreamwriter.h
@@ -53,9 +53,9 @@ class LOG4CXX_EXPORT OutputStreamWriter : public Writer
 		OutputStreamWriter(LOG4CXX_16_CONST OutputStreamPtr& out, LOG4CXX_16_CONST CharsetEncoderPtr& enc);
 		~OutputStreamWriter();
 
-		void close(Pool& p) override;
-		void flush(Pool& p) override;
-		void write(const LogString& str, Pool& p) override;
+        void close() override;
+        void flush() override;
+        void write(const LogString& str) override;
 		LogString getEncoding() const;
 
 		OutputStreamPtr getOutputStreamPtr() const;
diff --git a/src/main/include/log4cxx/helpers/reader.h b/src/main/include/log4cxx/helpers/reader.h
index 1c5d2bdb..e4b08085 100644
--- a/src/main/include/log4cxx/helpers/reader.h
+++ b/src/main/include/log4cxx/helpers/reader.h
@@ -48,16 +48,14 @@ class LOG4CXX_EXPORT Reader : public Object
 
 	public:
 		/**
-		 * Closes the stream.
-		 * @param p The memory pool associated with the reader.
+         * Closes the stream.
 		 */
-		virtual void close(Pool& p) = 0;
+        virtual void close() = 0;
 
 		/**
-		 * @return The complete stream contents as a LogString.
-		 * @param p The memory pool associated with the reader.
+         * @return The complete stream contents as a LogString.
 		 */
-		virtual LogString read(Pool& p) = 0;
+        virtual LogString read() = 0;
 
 	private:
 		Reader(const Reader&);
diff --git a/src/main/include/log4cxx/helpers/simpledateformat.h b/src/main/include/log4cxx/helpers/simpledateformat.h
index 5d8730ea..b2d63861 100644
--- a/src/main/include/log4cxx/helpers/simpledateformat.h
+++ b/src/main/include/log4cxx/helpers/simpledateformat.h
@@ -85,8 +85,7 @@ class LOG4CXX_EXPORT SimpleDateFormat : public DateFormat
 		~SimpleDateFormat();
 
 		virtual void format(LogString& s,
-			log4cxx_time_t tm,
-			LOG4CXX_NS::helpers::Pool& p) const;
+            log4cxx_time_t tm) const;
 
 		/**
 		 * Set time zone.
diff --git a/src/main/include/log4cxx/helpers/strftimedateformat.h b/src/main/include/log4cxx/helpers/strftimedateformat.h
index 44fd1205..4366313b 100644
--- a/src/main/include/log4cxx/helpers/strftimedateformat.h
+++ b/src/main/include/log4cxx/helpers/strftimedateformat.h
@@ -43,8 +43,7 @@ class LOG4CXX_EXPORT StrftimeDateFormat : public DateFormat
 		~StrftimeDateFormat();
 
 		virtual void format(LogString& s,
-			log4cxx_time_t tm,
-			LOG4CXX_NS::helpers::Pool& p) const;
+            log4cxx_time_t tm) const;
 
 		/**
 		*    Set time zone.
diff --git a/src/main/include/log4cxx/helpers/stringhelper.h b/src/main/include/log4cxx/helpers/stringhelper.h
index cc9edf39..d25c567e 100644
--- a/src/main/include/log4cxx/helpers/stringhelper.h
+++ b/src/main/include/log4cxx/helpers/stringhelper.h
@@ -26,7 +26,6 @@ namespace LOG4CXX_NS
 {
 namespace helpers
 {
-class Pool;
 /**
 String manipulation routines
 */
@@ -45,9 +44,9 @@ class LOG4CXX_EXPORT StringHelper
 		static int toInt(const LogString& s);
 		static int64_t toInt64(const LogString& s);
 
-		static void toString(int i, LOG4CXX_NS::helpers::Pool& pool, LogString& dst);
-		static void toString(int64_t i, LOG4CXX_NS::helpers::Pool& pool, LogString& dst);
-		static void toString(size_t i, LOG4CXX_NS::helpers::Pool& pool, LogString& dst);
+        static void toString(int i, LogString& dst);
+        static void toString(int64_t i, LogString& dst);
+        static void toString(size_t i, LogString& dst);
 
 		static void toString(bool val, LogString& dst);
 
diff --git a/src/main/include/log4cxx/helpers/systemerrwriter.h b/src/main/include/log4cxx/helpers/systemerrwriter.h
index 076291db..0bd3ba3c 100644
--- a/src/main/include/log4cxx/helpers/systemerrwriter.h
+++ b/src/main/include/log4cxx/helpers/systemerrwriter.h
@@ -40,12 +40,12 @@ class LOG4CXX_EXPORT SystemErrWriter : public Writer
 		SystemErrWriter();
 		virtual ~SystemErrWriter();
 
-		void close(Pool& p) override;
-		void flush(Pool& p) override;
-		void write(const LogString& str, Pool& p) override;
+        void close() override;
+        void flush() override;
+        void write(const LogString& str) override;
 
-		static void write(const LogString& str);
-		static void flush();
+        static void write_raw(const LogString& str);
+        static void flush_raw();
 
 	private:
 		SystemErrWriter(const SystemErrWriter&);
diff --git a/src/main/include/log4cxx/helpers/systemoutwriter.h b/src/main/include/log4cxx/helpers/systemoutwriter.h
index 039a1616..81a69579 100644
--- a/src/main/include/log4cxx/helpers/systemoutwriter.h
+++ b/src/main/include/log4cxx/helpers/systemoutwriter.h
@@ -40,12 +40,12 @@ class LOG4CXX_EXPORT SystemOutWriter : public Writer
 		SystemOutWriter();
 		~SystemOutWriter();
 
-		void close(Pool& p) override;
-		void flush(Pool& p) override;
-		void write(const LogString& str, Pool& p) override;
+        void close() override;
+        void flush() override;
+        void write(const LogString& str) override;
 
-		static void write(const LogString& str);
-		static void flush();
+        static void write_raw(const LogString& str);
+        static void flush_raw();
 	private:
 		SystemOutWriter(const SystemOutWriter&);
 		SystemOutWriter& operator=(const SystemOutWriter&);
diff --git a/src/main/include/log4cxx/helpers/writer.h b/src/main/include/log4cxx/helpers/writer.h
index a4529316..9970aab4 100644
--- a/src/main/include/log4cxx/helpers/writer.h
+++ b/src/main/include/log4cxx/helpers/writer.h
@@ -43,9 +43,9 @@ class LOG4CXX_EXPORT Writer : public Object
 		virtual ~Writer();
 
 	public:
-		virtual void close(Pool& p) = 0;
-		virtual void flush(Pool& p) = 0;
-		virtual void write(const LogString& str, Pool& p) = 0;
+        virtual void close() = 0;
+        virtual void flush() = 0;
+        virtual void write(const LogString& str) = 0;
 
 	private:
 		Writer(const Writer&);
diff --git a/src/main/include/log4cxx/log4cxx.h.in b/src/main/include/log4cxx/log4cxx.h.in
index f4d596f2..cdd9829f 100644
--- a/src/main/include/log4cxx/log4cxx.h.in
+++ b/src/main/include/log4cxx/log4cxx.h.in
@@ -106,12 +106,14 @@ __pragma( warning( pop ) )
 
 #cmakedefine LOG4CXX_ENABLE_APR
 
+#include <chrono>
+
 namespace LOG4CXX_NS {
 
 /**
- * log4cxx_time_t - holds the number of microseconds since 1970-01-01
+ * log4cxx_time_t - a point in time
  */
-typedef int64_t log4cxx_time_t;
+typedef std::chrono::time_point<std::chrono::system_clock> log4cxx_time_t;
 
 typedef int log4cxx_status_t;
 
diff --git a/src/main/include/log4cxx/net/smtpappender.h b/src/main/include/log4cxx/net/smtpappender.h
index e9059ee1..23c5bfeb 100644
--- a/src/main/include/log4cxx/net/smtpappender.h
+++ b/src/main/include/log4cxx/net/smtpappender.h
@@ -141,13 +141,13 @@ 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() override;
 
 		/**
 		Perform SMTPAppender specific appending actions, mainly adding
 		the event to a cyclic buffer and checking if the event triggers
 		an e-mail to be sent. */
-		void append(const spi::LoggingEventPtr& event, helpers::Pool& p) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 
 		void close() override;
@@ -176,7 +176,7 @@ class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
 		/**
 		Send the contents of the cyclic buffer as an e-mail message.
 		*/
-		void sendBuffer(LOG4CXX_NS::helpers::Pool& p);
+        void sendBuffer();
 
 
 		/**
diff --git a/src/main/include/log4cxx/net/socketappenderskeleton.h b/src/main/include/log4cxx/net/socketappenderskeleton.h
index ea45b0ab..fad8a8a1 100644
--- a/src/main/include/log4cxx/net/socketappenderskeleton.h
+++ b/src/main/include/log4cxx/net/socketappenderskeleton.h
@@ -56,7 +56,7 @@ class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 
 		Connects to the specified <b>RemoteHost</b> and <b>Port</b>.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		void close() override;
 
@@ -144,16 +144,16 @@ class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 	protected:
 		SocketAppenderSkeleton(std::unique_ptr<SocketAppenderSkeletonPriv> priv);
 
-		virtual void setSocket(LOG4CXX_NS::helpers::SocketPtr& socket, LOG4CXX_NS::helpers::Pool& p) = 0;
+        virtual void setSocket(LOG4CXX_NS::helpers::SocketPtr& socket) = 0;
 
-		virtual void cleanUp(LOG4CXX_NS::helpers::Pool& p) = 0;
+        virtual void cleanUp(p) = 0;
 
 		virtual int getDefaultDelay() const = 0;
 
 		virtual int getDefaultPort() const = 0;
 
 	private:
-		void connect(LOG4CXX_NS::helpers::Pool& p);
+        void connect();
 		/**
 		     The Connector will reconnect when the server becomes available
 		     again.  It does this by attempting to open a new connection every
diff --git a/src/main/include/log4cxx/net/syslogappender.h b/src/main/include/log4cxx/net/syslogappender.h
index e4c2e808..05d6f3d7 100644
--- a/src/main/include/log4cxx/net/syslogappender.h
+++ b/src/main/include/log4cxx/net/syslogappender.h
@@ -73,14 +73,14 @@ class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
 		*/
 		static int getFacility(const LogString& facilityName);
 
-		void append(const spi::LoggingEventPtr& event, helpers::Pool& p) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 		/**
 		\copybrief AppenderSkeleton::activateOptions()
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief AppenderSkeleton::setOption()
diff --git a/src/main/include/log4cxx/net/telnetappender.h b/src/main/include/log4cxx/net/telnetappender.h
index ce5985af..77f17670 100644
--- a/src/main/include/log4cxx/net/telnetappender.h
+++ b/src/main/include/log4cxx/net/telnetappender.h
@@ -89,7 +89,7 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 
 		Create the socket handler and wait for connections.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 
 		/**
@@ -157,7 +157,7 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 	protected:
 		/** Send \c event to each connected client.
 		*/
-		void append(const spi::LoggingEventPtr& event, helpers::Pool& p) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 	private:
 		//   prevent copy and assignment statements
@@ -165,7 +165,7 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 		TelnetAppender& operator=(const TelnetAppender&);
 
 		void write(helpers::ByteBuffer&);
-		void writeStatus(const helpers::SocketPtr& socket, const LogString& msg, helpers::Pool& p);
+        void writeStatus(const helpers::SocketPtr& socket, const LogString& msg);
 		void acceptConnections();
 
 		struct TelnetAppenderPriv;
diff --git a/src/main/include/log4cxx/pattern/classnamepatternconverter.h b/src/main/include/log4cxx/pattern/classnamepatternconverter.h
index cacf0a40..a8b94694 100644
--- a/src/main/include/log4cxx/pattern/classnamepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/classnamepatternconverter.h
@@ -58,8 +58,7 @@ class LOG4CXX_EXPORT ClassNamePatternConverter : public NamePatternConverter
 		using NamePatternConverter::format;
 
 		void format(const spi::LoggingEventPtr& event,
-			LogString& toAppendTo,
-			helpers::Pool& p) const override;
+            LogString& toAppendTo) const override;
 };
 
 }
diff --git a/src/main/include/log4cxx/pattern/colorendpatternconverter.h b/src/main/include/log4cxx/pattern/colorendpatternconverter.h
index 394eaf5e..15e1ca7b 100644
--- a/src/main/include/log4cxx/pattern/colorendpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/colorendpatternconverter.h
@@ -55,8 +55,7 @@ class LOG4CXX_EXPORT ColorEndPatternConverter
 		using LoggingEventPatternConverter::format;
 
 		void format(const spi::LoggingEventPtr& event,
-			LogString& toAppendTo,
-			helpers::Pool& p) const override;
+            LogString& toAppendTo) const override;
 };
 
 }
diff --git a/src/main/include/log4cxx/pattern/colorstartpatternconverter.h b/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
index 8f225768..5153400f 100644
--- a/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/colorstartpatternconverter.h
@@ -57,8 +57,7 @@ class LOG4CXX_EXPORT ColorStartPatternConverter
 		using LoggingEventPatternConverter::format;
 
 		void format(const spi::LoggingEventPtr& event,
-			LogString& toAppendTo,
-			helpers::Pool& p) const override;
+            LogString& toAppendTo) const override;
 
 		void setFatalColor(const LogString& color);
 		void setErrorColor(const LogString& color);
diff --git a/src/main/include/log4cxx/pattern/datepatternconverter.h b/src/main/include/log4cxx/pattern/datepatternconverter.h
index 371bd0a4..c1a8a0fb 100644
--- a/src/main/include/log4cxx/pattern/datepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/datepatternconverter.h
@@ -79,8 +79,7 @@ class LOG4CXX_EXPORT DatePatternConverter : public LoggingEventPatternConverter
 		 * Append to \c output a textual version of the timestamp in \c event.
 		 */
 		void format(const spi::LoggingEventPtr& event,
-			LogString& output,
-			helpers::Pool& p) const override;
+            LogString& output) const override;
 
 		/**
 		 * Append to \c output a textual version of the date or timestamp in \c obj.
@@ -88,15 +87,13 @@ class LOG4CXX_EXPORT DatePatternConverter : public LoggingEventPatternConverter
 		 * Nothing is added to \c output if \c obj does not point to a Date or spi::LoggingEvent.
 		 */
 		void format(const helpers::ObjectPtr& obj,
-			LogString& output,
-			helpers::Pool& p) const override;
+            LogString& output) const override;
 
 		/**
 		 * Append to \c toAppendTo a textual version of \c date.
 		 */
 		void format(const helpers::DatePtr& date,
-			LogString& toAppendTo,
-			helpers::Pool& p) const;
+            LogString& toAppendTo) const;
 };
 
 LOG4CXX_PTR_DEF(DatePatternConverter);
diff --git a/src/main/include/log4cxx/pattern/filelocationpatternconverter.h b/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
index b68b7bcd..2d274b87 100644
--- a/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/filelocationpatternconverter.h
@@ -55,8 +55,7 @@ class LOG4CXX_EXPORT FileLocationPatternConverter
 		using LoggingEventPatternConverter::format;
 
 		void format(const spi::LoggingEventPtr& event,
-			LogString& toAppendTo,
-			helpers::Pool& p) const override;
+            LogString& toAppendTo) const override;
 };
 
 }
diff --git a/src/main/include/log4cxx/pattern/integerpatternconverter.h b/src/main/include/log4cxx/pattern/integerpatternconverter.h
index f5c775d8..0c486b84 100644
--- a/src/main/include/log4cxx/pattern/integerpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/integerpatternconverter.h
@@ -52,8 +52,7 @@ class LOG4CXX_EXPORT IntegerPatternConverter : public PatternConverter
 			const std::vector<LogString>& options);
 
 		void format(const helpers::ObjectPtr& obj,
-			LogString& toAppendTo,
-			helpers::Pool& p) const override;
+            LogString& toAppendTo) const override;
 };
 
 LOG4CXX_PTR_DEF(IntegerPatternConverter);
diff --git a/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h b/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h
index 76bb0bd6..91c2860b 100644
--- a/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h
@@ -57,17 +57,14 @@ class LOG4CXX_EXPORT LoggingEventPatternConverter : public PatternConverter
 		/**
 		 * Formats an event into a string buffer.
 		 * @param event event to format, may not be null.
-		 * @param toAppendTo string buffer to which the formatted event will be appended.  May not be null.
-		 * @param p pool for memory allocations needing during format.
+         * @param toAppendTo string buffer to which the formatted event will be appended.  May not be null.
 		 */
 		virtual void format(
 			const spi::LoggingEventPtr& event,
-			LogString& toAppendTo,
-			helpers::Pool& p) const = 0;
+            LogString& toAppendTo) const = 0;
 
 		void format(const helpers::ObjectPtr& obj,
-			LogString& toAppendTo,
-			helpers::Pool& p) const override;
+            LogString& toAppendTo) const override;
 
 		/**
 		 * Normally pattern converters are not meant to handle Exceptions although
diff --git a/src/main/include/log4cxx/pattern/patternconverter.h b/src/main/include/log4cxx/pattern/patternconverter.h
index 9bcf8c84..160c357b 100644
--- a/src/main/include/log4cxx/pattern/patternconverter.h
+++ b/src/main/include/log4cxx/pattern/patternconverter.h
@@ -68,12 +68,10 @@ class LOG4CXX_EXPORT PatternConverter : public virtual helpers::Object
 		/**
 		 * Formats an object into a string buffer.
 		 * @param obj event to format, may not be null.
-		 * @param toAppendTo string buffer to which the formatted event will be appended.  May not be null.
-		 * @param p pool for any allocations necessary during formatting.
+         * @param toAppendTo string buffer to which the formatted event will be appended.  May not be null.
 		 */
 		virtual void format(const helpers::ObjectPtr& obj,
-			LogString& toAppendTo,
-			helpers::Pool& p) const = 0;
+            LogString& toAppendTo) const = 0;
 
 		/**
 		 * This method returns the name of the conversion pattern.
diff --git a/src/main/include/log4cxx/patternlayout.h b/src/main/include/log4cxx/patternlayout.h
index e11917bf..bf03655d 100644
--- a/src/main/include/log4cxx/patternlayout.h
+++ b/src/main/include/log4cxx/patternlayout.h
@@ -484,7 +484,7 @@ class LOG4CXX_EXPORT PatternLayout : public Layout
 
 		Calls createPatternParser
 		 */
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/private/appenderskeleton_priv.h b/src/main/include/log4cxx/private/appenderskeleton_priv.h
index cba7bec4..a7f90a58 100644
--- a/src/main/include/log4cxx/private/appenderskeleton_priv.h
+++ b/src/main/include/log4cxx/private/appenderskeleton_priv.h
@@ -68,7 +68,6 @@ struct AppenderSkeleton::AppenderSkeletonPrivate
 	*/
 	bool closed;
 
-	LOG4CXX_NS::helpers::Pool pool;
 	mutable std::recursive_mutex mutex;
 
 	bool warnedClosed = false;
diff --git a/src/main/include/log4cxx/private/writerappender_priv.h b/src/main/include/log4cxx/private/writerappender_priv.h
index c9484299..de1def48 100644
--- a/src/main/include/log4cxx/private/writerappender_priv.h
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -53,7 +53,7 @@ struct WriterAppender::WriterAppenderPriv : public AppenderSkeleton::AppenderSke
 	{
 		std::lock_guard<std::recursive_mutex> lock(mutex);
 		if (writer)
-			writer->flush(pool);
+            writer->flush();
 	}
 
 	/**
diff --git a/src/main/include/log4cxx/rolling/action.h b/src/main/include/log4cxx/rolling/action.h
index c89077f9..8ae6933f 100644
--- a/src/main/include/log4cxx/rolling/action.h
+++ b/src/main/include/log4cxx/rolling/action.h
@@ -55,9 +55,9 @@ class Action : public virtual LOG4CXX_NS::helpers::Object
 		 *
 		 * @return true if successful.
 		 */
-		virtual bool execute(LOG4CXX_NS::helpers::Pool& pool) const = 0;
+        virtual bool execute() const = 0;
 
-		void run(LOG4CXX_NS::helpers::Pool& pool);
+        void run();
 
 		void close();
 
diff --git a/src/main/include/log4cxx/rolling/filerenameaction.h b/src/main/include/log4cxx/rolling/filerenameaction.h
index e17c8d99..9ef6164b 100644
--- a/src/main/include/log4cxx/rolling/filerenameaction.h
+++ b/src/main/include/log4cxx/rolling/filerenameaction.h
@@ -49,7 +49,7 @@ class FileRenameAction : public Action
 		 *
 		 * @return true if successful.
 		 */
-		bool execute(LOG4CXX_NS::helpers::Pool& pool) const override;
+        bool execute() const override;
 };
 
 LOG4CXX_PTR_DEF(FileRenameAction);
diff --git a/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h b/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h
index 8ff908ee..5b708aaf 100644
--- a/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h
@@ -29,11 +29,6 @@ namespace LOG4CXX_NS
 
 class File;
 
-namespace helpers
-{
-class Pool;
-}
-
 
 namespace rolling
 {
@@ -105,7 +100,7 @@ class LOG4CXX_EXPORT FilterBasedTriggeringPolicy : public TriggeringPolicy
 
 		Activates all attached filters.
 		 */
-		void activateOptions(helpers::Pool&) override;
+        void activateOptions() 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..afd4405b 100644
--- a/src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h
@@ -26,11 +26,6 @@
 namespace LOG4CXX_NS
 {
 
-namespace helpers
-{
-class Pool;
-}
-
 namespace rolling
 {
 
@@ -83,7 +78,7 @@ class LOG4CXX_EXPORT FixedWindowRollingPolicy : public RollingPolicyBase
 		 */
 		enum { MAX_WINDOW_SIZE = 12 };
 
-		bool purge(int purgeStart, int maxIndex, LOG4CXX_NS::helpers::Pool& p) const;
+        bool purge(int purgeStart, int maxIndex) const;
 
 	public:
 
@@ -97,7 +92,7 @@ class LOG4CXX_EXPORT FixedWindowRollingPolicy : public RollingPolicyBase
 
 		\sa RollingPolicyBase::activateOptions()
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief RollingPolicyBase::setOption()
@@ -126,16 +121,14 @@ class LOG4CXX_EXPORT FixedWindowRollingPolicy : public RollingPolicyBase
 		 */
 		RolloverDescriptionPtr initialize(
 			const   LogString&              currentActiveFile,
-			const   bool                    append,
-			helpers::Pool& pool) override;
+            const   bool                    append) override;
 
 		/**
 		 * {@inheritDoc}
 		 */
 		RolloverDescriptionPtr rollover(
 			const   LogString&              currentActiveFile,
-			const   bool                    append,
-			helpers::Pool& pool) override;
+            const   bool                    append) override;
 
 	protected:
 		/**
diff --git a/src/main/include/log4cxx/rolling/gzcompressaction.h b/src/main/include/log4cxx/rolling/gzcompressaction.h
index 92184f5d..18b7ae0c 100644
--- a/src/main/include/log4cxx/rolling/gzcompressaction.h
+++ b/src/main/include/log4cxx/rolling/gzcompressaction.h
@@ -50,7 +50,7 @@ class GZCompressAction : public Action
 		 *
 		 * @return true if successful.
 		 */
-		bool execute(LOG4CXX_NS::helpers::Pool& pool) const override;
+        bool execute() const override;
 
 		/**
 		 * Set to true to throw an IOException on a fork failure.  By default, this
diff --git a/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h b/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h
index abdffdf0..859ed051 100644
--- a/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/manualtriggeringpolicy.h
@@ -72,7 +72,7 @@ class LOG4CXX_EXPORT ManualTriggeringPolicy : public TriggeringPolicy
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool&) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/rolling/rollingpolicy.h b/src/main/include/log4cxx/rolling/rollingpolicy.h
index 9d2dcc04..3eec13f9 100644
--- a/src/main/include/log4cxx/rolling/rollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/rollingpolicy.h
@@ -50,16 +50,14 @@ class LOG4CXX_EXPORT RollingPolicy :
 		 * Initialize the policy and return any initial actions for rolling file appender.
 		 *
 		 * @param currentActiveFile current value of RollingFileAppender.getFile().
-		 * @param append current value of RollingFileAppender.getAppend().
-		 * @param pool pool for memory allocations during call.
+         * @param append current value of RollingFileAppender.getAppend().
 		 * @return Description of the initialization, may be null to indicate
 		 * no initialization needed.
 		 * @throws SecurityException if denied access to log files.
 		 */
 		virtual RolloverDescriptionPtr initialize(
 			const   LogString&              currentActiveFile,
-			const   bool                    append,
-			LOG4CXX_NS::helpers::Pool& pool) = 0;
+            const   bool                    append) = 0;
 
 		/**
 		 * Prepare for a rollover.  This method is called prior to
@@ -68,16 +66,14 @@ class LOG4CXX_EXPORT RollingPolicy :
 		 * after close of current log file.
 		 *
 		 * @param currentActiveFile file name for current active log file.
-		 * @param append current value of the parent FileAppender.getAppend().
-		 * @param pool pool for memory allocations during call.
+         * @param append current value of the parent FileAppender.getAppend().
 		 * @return Description of pending rollover, may be null to indicate no rollover
 		 * at this time.
 		 * @throws SecurityException if denied access to log files.
 		 */
 		virtual RolloverDescriptionPtr rollover(
 			const   LogString&              currentActiveFile,
-			const   bool                    append,
-			LOG4CXX_NS::helpers::Pool& pool) = 0;
+            const   bool                    append) = 0;
 };
 
 LOG4CXX_PTR_DEF(RollingPolicy);
diff --git a/src/main/include/log4cxx/rolling/rollingpolicybase.h b/src/main/include/log4cxx/rolling/rollingpolicybase.h
index 9399286f..a5a0d0c0 100644
--- a/src/main/include/log4cxx/rolling/rollingpolicybase.h
+++ b/src/main/include/log4cxx/rolling/rollingpolicybase.h
@@ -64,7 +64,7 @@ class LOG4CXX_EXPORT RollingPolicyBase :
 
 		\sa RollingPolicy::activateOptions()
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		A map from a name to the object implementing the (date or index) formatting.
@@ -114,11 +114,10 @@ class LOG4CXX_EXPORT RollingPolicyBase :
 		 * Format file name.
 		 *
 		 * @param obj object to be evaluted in formatting, may not be null.
-		 * @param buf string buffer to which formatted file name is appended, may not be null.
-		 * @param p memory pool.
+         * @param buf string buffer to which formatted file name is appended, may not be null.
 		 */
 		void formatFileName(const helpers::ObjectPtr& obj,
-			LogString& buf, helpers::Pool& p) const;
+            LogString& buf) const;
 
 		LOG4CXX_NS::pattern::PatternConverterPtr getIntegerPatternConverter() const;
 		LOG4CXX_NS::pattern::PatternConverterPtr getDatePatternConverter() const;
diff --git a/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h b/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h
index f26effc5..4c01bf20 100644
--- a/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h
+++ b/src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h
@@ -79,7 +79,7 @@ class LOG4CXX_EXPORT SizeBasedTriggeringPolicy : public TriggeringPolicy
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool&) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/rolling/zipcompressaction.h b/src/main/include/log4cxx/rolling/zipcompressaction.h
index fd3d0a37..1cbc71a6 100644
--- a/src/main/include/log4cxx/rolling/zipcompressaction.h
+++ b/src/main/include/log4cxx/rolling/zipcompressaction.h
@@ -49,7 +49,7 @@ class ZipCompressAction : public Action
 		 *
 		 * @return true if successful.
 		 */
-		bool execute(LOG4CXX_NS::helpers::Pool& pool) const override;
+        bool execute() const override;
 
 		/**
 		 * Set to true to throw an IOException on a fork failure.  By default, this
diff --git a/src/main/include/log4cxx/spi/filter.h b/src/main/include/log4cxx/spi/filter.h
index 04163a18..59386741 100644
--- a/src/main/include/log4cxx/spi/filter.h
+++ b/src/main/include/log4cxx/spi/filter.h
@@ -107,7 +107,7 @@ class LOG4CXX_EXPORT Filter : public virtual OptionHandler
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 
 		/**
 		\copybrief spi::OptionHandler::setOption()
diff --git a/src/main/include/log4cxx/spi/optionhandler.h b/src/main/include/log4cxx/spi/optionhandler.h
index 7ae414ad..731d1996 100644
--- a/src/main/include/log4cxx/spi/optionhandler.h
+++ b/src/main/include/log4cxx/spi/optionhandler.h
@@ -49,7 +49,7 @@ class LOG4CXX_EXPORT OptionHandler : public virtual helpers::Object
 		the <code>File</code> and <b>Append</b> options both of
 		which are ambigous until the other is also set.
 		*/
-		virtual void activateOptions(helpers::Pool& p) = 0;
+        virtual void activateOptions() = 0;
 
 
 		/**
diff --git a/src/main/include/log4cxx/varia/fallbackerrorhandler.h b/src/main/include/log4cxx/varia/fallbackerrorhandler.h
index a2ac5b6b..71072bc2 100644
--- a/src/main/include/log4cxx/varia/fallbackerrorhandler.h
+++ b/src/main/include/log4cxx/varia/fallbackerrorhandler.h
@@ -65,7 +65,7 @@ class LOG4CXX_EXPORT FallbackErrorHandler :
 
 		No action is performed in this implementation.
 		*/
-		void activateOptions(helpers::Pool& p) override;
+        void activateOptions() override;
 		/**
 		\copybrief spi::OptionHandler::setOption()
 		 */
diff --git a/src/main/include/log4cxx/writerappender.h b/src/main/include/log4cxx/writerappender.h
index c4645096..bbd4d0aa 100644
--- a/src/main/include/log4cxx/writerappender.h
+++ b/src/main/include/log4cxx/writerappender.h
@@ -58,7 +58,7 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 		Derived appenders should override this method if option structure
 		requires it.
 		*/
-		void activateOptions(helpers::Pool& pool) override;
+        void activateOptions() override;
 
 		/**
 		If the <b>ImmediateFlush</b> option is set to
@@ -92,7 +92,7 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 		layout.
 
 		*/
-		void append(const spi::LoggingEventPtr& event, helpers::Pool& p) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 
 	protected:
@@ -173,18 +173,18 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 		/**
 		 Actual writing occurs here.
 		*/
-		virtual void subAppend(const spi::LoggingEventPtr& event, helpers::Pool& p);
+        virtual void subAppend(const spi::LoggingEventPtr& event);
 
 
 		/**
 		Write a footer as produced by the embedded layout's
 		Layout#appendFooter method.  */
-		virtual void writeFooter(helpers::Pool& p);
+        virtual void writeFooter();
 
 		/**
 		Write a header as produced by the embedded layout's
 		Layout#appendHeader method.  */
-		virtual void writeHeader(helpers::Pool& p);
+        virtual void writeHeader();
 
 		/**
 		 * Set the writer.  Mutex must already be held.
diff --git a/src/test/cpp/util/compare.cpp b/src/test/cpp/util/compare.cpp
index d71f5471..7e1d1b25 100644
--- a/src/test/cpp/util/compare.cpp
+++ b/src/test/cpp/util/compare.cpp
@@ -28,15 +28,13 @@ using namespace log4cxx::helpers;
 
 bool Compare::compare(const File& file1, const File& file2)
 {
-	Pool pool;
 	InputStreamPtr fileIn1 = InputStreamPtr( new FileInputStream(file1) );
 	InputStreamReaderPtr reader1 = InputStreamReaderPtr( new InputStreamReader(fileIn1) );
-	LogString in1(reader1->read(pool));
+    LogString in1(reader1->read());
 
-	Pool pool2;
 	InputStreamPtr fileIn2 = InputStreamPtr( new FileInputStream(file2) );
 	InputStreamReaderPtr reader2 = InputStreamReaderPtr( new InputStreamReader(fileIn2) );
-	LogString in2(reader2->read(pool2));
+    LogString in2(reader2->read());
 
 	LogString back1(in1);
 	LogString back2(in2);
@@ -61,7 +59,7 @@ bool Compare::compare(const File& file1, const File& file2)
 			msg += LOG4CXX_STR("] and [");
 			msg += file2.getPath();
 			msg += LOG4CXX_STR("] differ on line ");
-			StringHelper::toString(lineCounter, pool, msg);
+            StringHelper::toString(lineCounter, msg);
 			msg += LOG4CXX_EOL;
 			msg += LOG4CXX_STR("One reads:  [");
 			msg += s1;
@@ -73,8 +71,8 @@ bool Compare::compare(const File& file1, const File& file2)
 			msg += LOG4CXX_EOL;
 			emit(msg);
 
-			outputFile(file1, back1, pool);
-			outputFile(file2, back2, pool);
+            outputFile(file1, back1);
+            outputFile(file2, back2);
 
 			return false;
 		}
@@ -90,8 +88,8 @@ bool Compare::compare(const File& file1, const File& file2)
 		msg += LOG4CXX_STR("].");
 		msg += LOG4CXX_EOL;
 		emit(msg);
-		outputFile(file1, back1, pool);
-		outputFile(file2, back2, pool);
+        outputFile(file1, back1);
+        outputFile(file2, back2);
 
 		return false;
 	}
@@ -100,8 +98,7 @@ bool Compare::compare(const File& file1, const File& file2)
 }
 
 void Compare::outputFile(const File& file,
-	const LogString& contents,
-	log4cxx::helpers::Pool& pool)
+    const LogString& contents)
 {
 	int lineCounter = 0;
 	emit(LOG4CXX_STR("--------------------------------"));
@@ -118,7 +115,7 @@ void Compare::outputFile(const File& file,
 	{
 		lineCounter++;
 		LogString line;
-		StringHelper::toString(lineCounter, pool, line);
+        StringHelper::toString(lineCounter, line);
 		emit(line);
 
 		if (lineCounter < 10)
@@ -145,7 +142,7 @@ void Compare::outputFile(const File& file,
 
 void Compare::emit(const LogString& s1)
 {
-	SystemOutWriter::write(s1);
+    SystemOutWriter::write_raw(s1);
 }
 
 
diff --git a/src/test/cpp/util/compare.h b/src/test/cpp/util/compare.h
index be807c66..602c40cf 100644
--- a/src/test/cpp/util/compare.h
+++ b/src/test/cpp/util/compare.h
@@ -34,8 +34,7 @@ class Compare
 	private:
 		/// Prints file on the console.
 		static void outputFile(const File& file,
-			const LogString& contents,
-			log4cxx::helpers::Pool& pool);
+            const LogString& contents);
 
 		static void emit(const LogString& line);
 		static bool getline(LogString& buf, LogString& line);
diff --git a/src/test/cpp/vectorappender.cpp b/src/test/cpp/vectorappender.cpp
index e01dbad8..d2309d9e 100644
--- a/src/test/cpp/vectorappender.cpp
+++ b/src/test/cpp/vectorappender.cpp
@@ -23,7 +23,7 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(VectorAppender)
 
-void VectorAppender::append(const spi::LoggingEventPtr& event, Pool& /*p*/)
+void VectorAppender::append(const spi::LoggingEventPtr& event)
 {
 	if (0 < this->appendMillisecondDelay)
 		std::this_thread::sleep_for( std::chrono::milliseconds( this->appendMillisecondDelay ) );
diff --git a/src/test/cpp/vectorappender.h b/src/test/cpp/vectorappender.h
index 0d379fd4..edc936a7 100644
--- a/src/test/cpp/vectorappender.h
+++ b/src/test/cpp/vectorappender.h
@@ -43,7 +43,7 @@ class VectorAppender : public AppenderSkeleton
 		This method is called by the AppenderSkeleton#doAppend
 		method.
 		*/
-		void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p) override;
+        void append(const spi::LoggingEventPtr& event) override;
 
 		const std::vector<spi::LoggingEventPtr>& getVector() const
 		{