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 2021/11/06 00:43:05 UTC

[logging-log4cxx] branch LOGCXX-510 created (now 0f76b3b)

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

rmiddleton pushed a change to branch LOGCXX-510
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git.


      at 0f76b3b  Merge branch 'master' into LOGCXX-510

This branch includes the following new commits:

     new 948f3f1  Removed obsolete files
     new ca2ba83  Converted part of the hierarchy to be ABI stable
     new ad10550  More conversion to be ABI stable
     new 1858d23  Changed the private structs to be inner classes
     new 1e294ea  Removed TTCCLayout and DateLayout
     new 7bd9e15  Converted patternconverter hierarchy to be ABI stable
     new 7abd9c6  Converted more classes to privdata
     new b895c58  Added some preliminary notes on the big changes
     new bf86983  Made filter hierarchy ABI stable
     new 5610a6f  Made locale ABI-stable
     new 34c5fe1  Made Logger ABI stable
     new 09b132b  Made hierarchy ABI stable
     new 0aaa197  made LoggingEvent ABI stable and removed some serialization tests
     new df8d963  Fix infinite recursion and crash
     new 3e0331b  Actually return from function
     new 67b3cdf  made sure that the rolling file appender casts properly
     new 9c696a9  Made socket tests work and removed obsolete socket test
     new 26b8ffd  Fix test case
     new 494955f  Updated ABI dump
     new 0f76b3b  Merge branch 'master' into LOGCXX-510

The 20 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[logging-log4cxx] 10/20: Made locale ABI-stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5610a6f65e1c0c9f61c072669dfb0cc2698a51b4
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 17:38:24 2021 -0400

    Made locale ABI-stable
---
 src/main/cpp/locale.cpp                   | 33 +++++++++++++++++++++++++------
 src/main/include/log4cxx/helpers/locale.h |  6 +++---
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/src/main/cpp/locale.cpp b/src/main/cpp/locale.cpp
index f75ef8a..2de98c5 100644
--- a/src/main/cpp/locale.cpp
+++ b/src/main/cpp/locale.cpp
@@ -20,36 +20,57 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct Locale::LocalePrivate {
+	LocalePrivate(const LogString& language1)
+		: language(language1)
+	{
+	}
+
+	LocalePrivate(const LogString& language1, const LogString& country1)
+		: language(language1), country(country1)
+	{
+	}
+
+	LocalePrivate(const LogString& language1, const LogString& country1,
+		const LogString& variant1)
+		: language(language1), country(country1), variant(variant1)
+	{
+	}
+
+	const LogString language;
+	const LogString country;
+	const LogString variant;
+};
 
 Locale::Locale(const LogString& language1)
-	: language(language1)
+	: m_priv(std::make_unique<LocalePrivate>(language1))
 {
 }
 
 Locale::Locale(const LogString& language1, const LogString& country1)
-	: language(language1), country(country1)
+	: m_priv(std::make_unique<LocalePrivate>(language1, country1))
 {
 }
 
 Locale::Locale(const LogString& language1, const LogString& country1,
 	const LogString& variant1)
-	: language(language1), country(country1), variant(variant1)
+	: m_priv(std::make_unique<LocalePrivate>(language1, country1, variant1))
 {
 }
 
 
 const LogString& Locale::getLanguage() const
 {
-	return language;
+	return m_priv->language;
 }
 
 const LogString& Locale::getCountry() const
 {
-	return country;
+	return m_priv->country;
 }
 
 const LogString& Locale::getVariant() const
 {
-	return variant;
+	return m_priv->variant;
 }
 
diff --git a/src/main/include/log4cxx/helpers/locale.h b/src/main/include/log4cxx/helpers/locale.h
index b53235f..46adbd1 100644
--- a/src/main/include/log4cxx/helpers/locale.h
+++ b/src/main/include/log4cxx/helpers/locale.h
@@ -19,6 +19,7 @@
 #define _LOG4CXX_HELPERS_LOCALE_H
 
 #include <log4cxx/logstring.h>
+#include <memory>
 
 #if defined(_MSC_VER)
 	#pragma warning ( push )
@@ -44,9 +45,8 @@ class LOG4CXX_EXPORT Locale
 	protected:
 		Locale(const Locale&);
 		Locale& operator=(const Locale&);
-		const LogString language;
-		const LogString country;
-		const LogString variant;
+		struct LocalePrivate;
+		std::unique_ptr<LocalePrivate> m_priv;
 }; // class Locale
 }  // namespace helpers
 } // namespace log4cxx

[logging-log4cxx] 16/20: made sure that the rolling file appender casts properly

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 67b3cdfd60b74461216f61ed9a29a33146e734e4
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 19:22:38 2021 -0400

    made sure that the rolling file appender casts properly
---
 src/main/include/log4cxx/rolling/rollingfileappender.h |  9 +++++----
 src/test/cpp/helpers/casttestcase.cpp                  | 11 ++++++++++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/main/include/log4cxx/rolling/rollingfileappender.h b/src/main/include/log4cxx/rolling/rollingfileappender.h
index 4cb4240..c683b3f 100644
--- a/src/main/include/log4cxx/rolling/rollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/rollingfileappender.h
@@ -78,10 +78,11 @@ namespace rolling
  * */
 class LOG4CXX_EXPORT RollingFileAppender : public FileAppender
 {
-		DECLARE_LOG4CXX_OBJECT(RollingFileAppender)
-		BEGIN_LOG4CXX_CAST_MAP()
-		LOG4CXX_CAST_ENTRY(RollingFileAppender)
-		END_LOG4CXX_CAST_MAP()
+	DECLARE_LOG4CXX_OBJECT(RollingFileAppender)
+	BEGIN_LOG4CXX_CAST_MAP()
+	LOG4CXX_CAST_ENTRY(RollingFileAppender)
+	LOG4CXX_CAST_ENTRY_CHAIN(FileAppender)
+	END_LOG4CXX_CAST_MAP()
 		protected:
 			struct RollingFileAppenderPriv;
 
diff --git a/src/test/cpp/helpers/casttestcase.cpp b/src/test/cpp/helpers/casttestcase.cpp
index e7d8f53..8c66782 100644
--- a/src/test/cpp/helpers/casttestcase.cpp
+++ b/src/test/cpp/helpers/casttestcase.cpp
@@ -18,6 +18,7 @@
 #include "../logunit.h"
 #include <log4cxx/helpers/bytearrayoutputstream.h>
 #include <log4cxx/helpers/fileoutputstream.h>
+#include <log4cxx/rolling/rollingfileappender.h>
 #include <iostream>
 
 using namespace log4cxx;
@@ -33,7 +34,7 @@ LOGUNIT_CLASS(CastTestCase)
 	LOGUNIT_TEST_SUITE( CastTestCase );
 	LOGUNIT_TEST(testGoodCast);
 	LOGUNIT_TEST(testBadCast);
-
+	LOGUNIT_TEST(testRollingFileAppender);
 	LOGUNIT_TEST_SUITE_END();
 
 public:
@@ -59,6 +60,14 @@ public:
 		LOGUNIT_ASSERT(!fos);
 	}
 
+	void testRollingFileAppender(){
+		rolling::RollingFileAppenderPtr rolling = rolling::RollingFileAppenderPtr(new rolling::RollingFileAppender());
+
+		AppenderPtr appender = log4cxx::cast<Appender>(rolling);
+
+		LOGUNIT_ASSERT(appender);
+	}
+
 };
 
 LOGUNIT_TEST_SUITE_REGISTRATION(CastTestCase);

[logging-log4cxx] 13/20: made LoggingEvent ABI stable and removed some serialization tests

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0aaa197eb1d3f69660692b5b9f26145ee87c0d8f
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 18:26:45 2021 -0400

    made LoggingEvent ABI stable and removed some serialization tests
---
 src/main/cpp/hierarchy.cpp                         | 163 +++++++------
 src/main/cpp/loggingevent.cpp                      | 270 ++++++++++-----------
 src/main/cpp/sockethubappender.cpp                 |   2 +-
 src/main/include/log4cxx/spi/loggingevent.h        |  94 +------
 src/test/cpp/CMakeLists.txt                        |   1 -
 src/test/cpp/spi/CMakeLists.txt                    |   2 -
 src/test/cpp/spi/loggingeventtest.cpp              | 126 ----------
 src/test/cpp/util/CMakeLists.txt                   |   1 -
 src/test/cpp/util/serializationtesthelper.cpp      |  88 -------
 src/test/cpp/util/serializationtesthelper.h        |  44 ----
 .../resources/witness/serialization/exception.bin  | Bin 1843 -> 0 bytes
 src/test/resources/witness/serialization/info.bin  | Bin 60 -> 0 bytes
 .../resources/witness/serialization/location.bin   | Bin 465 -> 0 bytes
 src/test/resources/witness/serialization/mdc.bin   | Bin 508 -> 0 bytes
 src/test/resources/witness/serialization/ndc.bin   | Bin 409 -> 0 bytes
 .../resources/witness/serialization/simple.bin     | Bin 399 -> 0 bytes
 16 files changed, 238 insertions(+), 553 deletions(-)

diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index 89c3a8d..4be5f49 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -45,21 +45,48 @@ using namespace log4cxx;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+
+typedef std::map<LogString, LoggerPtr> LoggerMap;
+typedef std::map<LogString, ProvisionNode> ProvisionNodeMap;
+
+struct Hierarchy::HierarchyPrivate {
+	HierarchyPrivate(){
+		loggers = std::make_unique<LoggerMap>();
+		provisionNodes = std::make_unique<ProvisionNodeMap>();
+		root = std::make_shared<RootLogger>(pool, Level::getDebug());
+		defaultFactory = std::make_shared<DefaultLoggerFactory>();
+		emittedNoAppenderWarning = false;
+		configured = false;
+		thresholdInt = Level::ALL_INT;
+		threshold = Level::getAll();
+		emittedNoResourceBundleWarning = false;
+	}
+
+	log4cxx::helpers::Pool pool;
+	mutable std::mutex mutex;
+	bool configured;
+
+	spi::LoggerFactoryPtr defaultFactory;
+	spi::HierarchyEventListenerList listeners;
+
+	std::unique_ptr<LoggerMap> loggers;
+
+	std::unique_ptr<ProvisionNodeMap> provisionNodes;
+
+	LoggerPtr root;
+
+	int thresholdInt;
+	LevelPtr threshold;
+
+	bool emittedNoAppenderWarning;
+	bool emittedNoResourceBundleWarning;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(Hierarchy)
 
 Hierarchy::Hierarchy() :
-	pool(),
-	loggers(new LoggerMap()),
-	provisionNodes(new ProvisionNodeMap())
+	m_priv(std::make_unique<HierarchyPrivate>())
 {
-	std::unique_lock<std::mutex> lock(mutex);
-	root = LoggerPtr(new RootLogger(pool, Level::getDebug()));
-	defaultFactory = LoggerFactoryPtr(new DefaultLoggerFactory());
-	emittedNoAppenderWarning = false;
-	configured = false;
-	thresholdInt = Level::ALL_INT;
-	threshold = Level::getAll();
-	emittedNoResourceBundleWarning = false;
 }
 
 Hierarchy::~Hierarchy()
@@ -74,31 +101,31 @@ Hierarchy::~Hierarchy()
 
 void Hierarchy::addHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener)
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
-	if (std::find(listeners.begin(), listeners.end(), listener) != listeners.end())
+	if (std::find(m_priv->listeners.begin(), m_priv->listeners.end(), listener) != m_priv->listeners.end())
 	{
 		LogLog::warn(LOG4CXX_STR("Ignoring attempt to add an existent listener."));
 	}
 	else
 	{
-		listeners.push_back(listener);
+		m_priv->listeners.push_back(listener);
 	}
 }
 
 void Hierarchy::clear()
 {
-	std::unique_lock<std::mutex> lock(mutex);
-	loggers->clear();
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
+	m_priv->loggers->clear();
 }
 
 void Hierarchy::emitNoAppenderWarning(const Logger* logger)
 {
 	bool emitWarning = false;
 	{
-		std::unique_lock<std::mutex> lock(mutex);
-		emitWarning = !emittedNoAppenderWarning;
-		emittedNoAppenderWarning = true;
+		std::unique_lock<std::mutex> lock(m_priv->mutex);
+		emitWarning = !m_priv->emittedNoAppenderWarning;
+		m_priv->emittedNoAppenderWarning = true;
 	}
 
 	// No appender in hierarchy, warn user only once.
@@ -113,12 +140,12 @@ void Hierarchy::emitNoAppenderWarning(const Logger* logger)
 
 LoggerPtr Hierarchy::exists(const LogString& name)
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
 	LoggerPtr logger;
-	LoggerMap::iterator it = loggers->find(name);
+	LoggerMap::iterator it = m_priv->loggers->find(name);
 
-	if (it != loggers->end())
+	if (it != m_priv->loggers->end())
 	{
 		logger = it->second;
 	}
@@ -131,7 +158,7 @@ void Hierarchy::setThreshold(const LevelPtr& l)
 {
 	if (l != 0)
 	{
-		std::unique_lock<std::mutex> lock(mutex);
+		std::unique_lock<std::mutex> lock(m_priv->mutex);
 		setThresholdInternal(l);
 	}
 }
@@ -153,12 +180,12 @@ void Hierarchy::setThreshold(const LogString& levelStr)
 
 void Hierarchy::setThresholdInternal(const LevelPtr& l)
 {
-	thresholdInt = l->toInt();
-	threshold = l;
+	m_priv->thresholdInt = l->toInt();
+	m_priv->threshold = l;
 
-	if (thresholdInt != Level::ALL_INT)
+	if (m_priv->thresholdInt != Level::ALL_INT)
 	{
-		configured = true;
+		m_priv->configured = true;
 	}
 }
 
@@ -167,8 +194,8 @@ void Hierarchy::fireAddAppenderEvent(const Logger* logger, const Appender* appen
 	setConfigured(true);
 	HierarchyEventListenerList clonedList;
 	{
-		std::unique_lock<std::mutex> lock(mutex);
-		clonedList = listeners;
+		std::unique_lock<std::mutex> lock(m_priv->mutex);
+		clonedList = m_priv->listeners;
 	}
 
 	HierarchyEventListenerList::iterator it, itEnd = clonedList.end();
@@ -186,8 +213,8 @@ void Hierarchy::fireRemoveAppenderEvent(const Logger* logger, const Appender* ap
 {
 	HierarchyEventListenerList clonedList;
 	{
-		std::unique_lock<std::mutex> lock(mutex);
-		clonedList = listeners;
+		std::unique_lock<std::mutex> lock(m_priv->mutex);
+		clonedList = m_priv->listeners;
 	}
 	HierarchyEventListenerList::iterator it, itEnd = clonedList.end();
 	HierarchyEventListenerPtr listener;
@@ -201,37 +228,37 @@ void Hierarchy::fireRemoveAppenderEvent(const Logger* logger, const Appender* ap
 
 const LevelPtr& Hierarchy::getThreshold() const
 {
-	return threshold;
+	return m_priv->threshold;
 }
 
 LoggerPtr Hierarchy::getLogger(const LogString& name)
 {
-	return getLogger(name, defaultFactory);
+	return getLogger(name, m_priv->defaultFactory);
 }
 
 LoggerPtr Hierarchy::getLogger(const LogString& name,
 	const spi::LoggerFactoryPtr& factory)
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
-	LoggerMap::iterator it = loggers->find(name);
+	LoggerMap::iterator it = m_priv->loggers->find(name);
 
-	if (it != loggers->end())
+	if (it != m_priv->loggers->end())
 	{
 		return it->second;
 	}
 	else
 	{
-		LoggerPtr logger(factory->makeNewLoggerInstance(pool, name));
+		LoggerPtr logger(factory->makeNewLoggerInstance(m_priv->pool, name));
 		logger->setHierarchy(shared_from_this());
-		loggers->insert(LoggerMap::value_type(name, logger));
+		m_priv->loggers->insert(LoggerMap::value_type(name, logger));
 
-		ProvisionNodeMap::iterator it2 = provisionNodes->find(name);
+		ProvisionNodeMap::iterator it2 = m_priv->provisionNodes->find(name);
 
-		if (it2 != provisionNodes->end())
+		if (it2 != m_priv->provisionNodes->end())
 		{
 			updateChildren(it2->second, logger);
-			provisionNodes->erase(it2);
+			m_priv->provisionNodes->erase(it2);
 		}
 
 		updateParents(logger);
@@ -242,12 +269,12 @@ LoggerPtr Hierarchy::getLogger(const LogString& name,
 
 LoggerList Hierarchy::getCurrentLoggers() const
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
 	LoggerList v;
-	LoggerMap::const_iterator it, itEnd = loggers->end();
+	LoggerMap::const_iterator it, itEnd = m_priv->loggers->end();
 
-	for (it = loggers->begin(); it != itEnd; it++)
+	for (it = m_priv->loggers->begin(); it != itEnd; it++)
 	{
 		v.push_back(it->second);
 	}
@@ -258,15 +285,15 @@ LoggerList Hierarchy::getCurrentLoggers() const
 
 LoggerPtr Hierarchy::getRootLogger() const
 {
-	return root;
+	return m_priv->root;
 }
 
 bool Hierarchy::isDisabled(int level) const
 {
 	bool currentlyConfigured;
 	{
-		std::unique_lock<std::mutex> lock(mutex);
-		currentlyConfigured = configured;
+		std::unique_lock<std::mutex> lock(m_priv->mutex);
+		currentlyConfigured = m_priv->configured;
 	}
 
 	if (!currentlyConfigured)
@@ -276,23 +303,23 @@ bool Hierarchy::isDisabled(int level) const
 			nonconstThis);
 	}
 
-	return thresholdInt > level;
+	return m_priv->thresholdInt > level;
 }
 
 
 void Hierarchy::resetConfiguration()
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
 	getRootLogger()->setLevel(Level::getDebug());
-	root->setResourceBundle(0);
+	m_priv->root->setResourceBundle(0);
 	setThresholdInternal(Level::getAll());
 
 	shutdownInternal();
 
-	LoggerMap::const_iterator it, itEnd = loggers->end();
+	LoggerMap::const_iterator it, itEnd = m_priv->loggers->end();
 
-	for (it = loggers->begin(); it != itEnd; it++)
+	for (it = m_priv->loggers->begin(); it != itEnd; it++)
 	{
 		it->second->setLevel(0);
 		it->second->setAdditivity(true);
@@ -304,23 +331,23 @@ void Hierarchy::resetConfiguration()
 
 void Hierarchy::shutdown()
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
 	shutdownInternal();
 }
 
 void Hierarchy::shutdownInternal()
 {
-	configured = false;
+	m_priv->configured = false;
 
 	LoggerPtr root1 = getRootLogger();
 
 	// begin by closing nested appenders
 	root1->closeNestedAppenders();
 
-	LoggerMap::iterator it, itEnd = loggers->end();
+	LoggerMap::iterator it, itEnd = m_priv->loggers->end();
 
-	for (it = loggers->begin(); it != itEnd; it++)
+	for (it = m_priv->loggers->begin(); it != itEnd; it++)
 	{
 		LoggerPtr logger = it->second;
 		logger->closeNestedAppenders();
@@ -329,7 +356,7 @@ void Hierarchy::shutdownInternal()
 	// then, remove all appenders
 	root1->removeAllAppenders();
 
-	for (it = loggers->begin(); it != itEnd; it++)
+	for (it = m_priv->loggers->begin(); it != itEnd; it++)
 	{
 		LoggerPtr logger = it->second;
 		logger->removeAllAppenders();
@@ -350,9 +377,9 @@ void Hierarchy::updateParents(LoggerPtr logger)
 	{
 		LogString substr = name.substr(0, i);
 
-		LoggerMap::iterator it = loggers->find(substr);
+		LoggerMap::iterator it = m_priv->loggers->find(substr);
 
-		if (it != loggers->end())
+		if (it != m_priv->loggers->end())
 		{
 			parentFound = true;
 			logger->setParent( it->second );
@@ -360,16 +387,16 @@ void Hierarchy::updateParents(LoggerPtr logger)
 		}
 		else
 		{
-			ProvisionNodeMap::iterator it2 = provisionNodes->find(substr);
+			ProvisionNodeMap::iterator it2 = m_priv->provisionNodes->find(substr);
 
-			if (it2 != provisionNodes->end())
+			if (it2 != m_priv->provisionNodes->end())
 			{
 				it2->second.push_back(logger);
 			}
 			else
 			{
 				ProvisionNode node(1, logger);
-				provisionNodes->insert(
+				m_priv->provisionNodes->insert(
 					ProvisionNodeMap::value_type(substr, node));
 			}
 		}
@@ -378,7 +405,7 @@ void Hierarchy::updateParents(LoggerPtr logger)
 	// If we could not find any existing parents, then link with root.
 	if (!parentFound)
 	{
-		logger->setParent( root );
+		logger->setParent( m_priv->root );
 	}
 }
 
@@ -403,13 +430,13 @@ void Hierarchy::updateChildren(ProvisionNode& pn, LoggerPtr logger)
 
 void Hierarchy::setConfigured(bool newValue)
 {
-	std::unique_lock<std::mutex> lock(mutex);
-	configured = newValue;
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
+	m_priv->configured = newValue;
 }
 
 bool Hierarchy::isConfigured()
 {
-	return configured;
+	return m_priv->configured;
 }
 
 HierarchyPtr Hierarchy::create(){
@@ -422,7 +449,7 @@ void Hierarchy::configureRoot(){
 	// This should really be done in the constructor, but in order to fix
 	// LOGCXX-322 we need to turn the repositroy into a weak_ptr, and we
 	// can't use weak_from_this() in the constructor.
-	if( !root->getLoggerRepository().lock() ){
-		root->setHierarchy(shared_from_this());
+	if( !m_priv->root->getLoggerRepository().lock() ){
+		m_priv->root->setHierarchy(shared_from_this());
 	}
 }
diff --git a/src/main/cpp/loggingevent.cpp b/src/main/cpp/loggingevent.cpp
index 98056d5..bcec1b1 100644
--- a/src/main/cpp/loggingevent.cpp
+++ b/src/main/cpp/loggingevent.cpp
@@ -42,6 +42,90 @@ using namespace log4cxx;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+struct LoggingEvent::LoggingEventPrivate{
+	LoggingEventPrivate() :
+		ndc(0),
+		mdcCopy(0),
+		properties(0),
+		ndcLookupRequired(true),
+		mdcCopyLookupRequired(true),
+		timeStamp(0),
+		locationInfo()
+	{
+	}
+
+	LoggingEventPrivate(
+		const LogString& logger1, const LevelPtr& level1,
+		const LogString& message1, const LocationInfo& locationInfo1) :
+		logger(logger1),
+		level(level1),
+		ndc(0),
+		mdcCopy(0),
+		properties(0),
+		ndcLookupRequired(true),
+		mdcCopyLookupRequired(true),
+		message(message1),
+		timeStamp(apr_time_now()),
+		locationInfo(locationInfo1),
+		threadName(getCurrentThreadName()){}
+
+	~LoggingEventPrivate(){
+		delete ndc;
+		delete mdcCopy;
+		delete properties;
+	}
+
+	/**
+	* The logger of the logging event.
+	**/
+	LogString logger;
+
+	/** level of logging event. */
+	LevelPtr level;
+
+	/** The nested diagnostic context (NDC) of logging event. */
+	mutable LogString* ndc;
+
+	/** The mapped diagnostic context (MDC) of logging event. */
+	mutable MDC::Map* mdcCopy;
+
+	/**
+	* A map of String keys and String values.
+	*/
+	std::map<LogString, LogString>* properties;
+
+	/** Have we tried to do an NDC lookup? If we did, there is no need
+	*  to do it again.  Note that its value is always false when
+	*  serialized. Thus, a receiving SocketNode will never use it's own
+	*  (incorrect) NDC. See also writeObject method.
+	*/
+	mutable bool ndcLookupRequired;
+
+	/**
+	* Have we tried to do an MDC lookup? If we did, there is no need to do it
+	* again.  Note that its value is always false when serialized. See also
+	* the getMDC and getMDCCopy methods.
+	*/
+	mutable bool mdcCopyLookupRequired;
+
+	/** The application supplied message of logging event. */
+	LogString message;
+
+
+	/** The number of microseconds elapsed from 01.01.1970 until logging event
+	 was created. */
+	log4cxx_time_t timeStamp;
+
+	/** The is the location where this log statement was written. */
+	const log4cxx::spi::LocationInfo locationInfo;
+
+
+	/** The identifier of thread in which this logging event
+	was generated.
+	*/
+	const LogString threadName;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(LoggingEvent)
 
 
@@ -54,56 +138,37 @@ log4cxx_time_t LoggingEvent::getStartTime()
 }
 
 LoggingEvent::LoggingEvent() :
-	ndc(0),
-	mdcCopy(0),
-	properties(0),
-	ndcLookupRequired(true),
-	mdcCopyLookupRequired(true),
-	timeStamp(0),
-	locationInfo()
+	m_priv(std::make_unique<LoggingEventPrivate>())
 {
 }
 
 LoggingEvent::LoggingEvent(
 	const LogString& logger1, const LevelPtr& level1,
 	const LogString& message1, const LocationInfo& locationInfo1) :
-	logger(logger1),
-	level(level1),
-	ndc(0),
-	mdcCopy(0),
-	properties(0),
-	ndcLookupRequired(true),
-	mdcCopyLookupRequired(true),
-	message(message1),
-	timeStamp(apr_time_now()),
-	locationInfo(locationInfo1),
-	threadName(getCurrentThreadName())
+	m_priv(std::make_unique<LoggingEventPrivate>(logger1, level1, message1, locationInfo1))
 {
 }
 
 LoggingEvent::~LoggingEvent()
 {
-	delete ndc;
-	delete mdcCopy;
-	delete properties;
 }
 
 bool LoggingEvent::getNDC(LogString& dest) const
 {
-	if (ndcLookupRequired)
+	if (m_priv->ndcLookupRequired)
 	{
-		ndcLookupRequired = false;
+		m_priv->ndcLookupRequired = false;
 		LogString val;
 
 		if (NDC::get(val))
 		{
-			ndc = new LogString(val);
+			m_priv->ndc = new LogString(val);
 		}
 	}
 
-	if (ndc)
+	if (m_priv->ndc)
 	{
-		dest.append(*ndc);
+		dest.append(*m_priv->ndc);
 		return true;
 	}
 
@@ -114,11 +179,11 @@ bool LoggingEvent::getMDC(const LogString& key, LogString& dest) const
 {
 	// Note the mdcCopy is used if it exists. Otherwise we use the MDC
 	// that is associated with the thread.
-	if (mdcCopy != 0 && !mdcCopy->empty())
+	if (m_priv->mdcCopy != 0 && !m_priv->mdcCopy->empty())
 	{
-		MDC::Map::const_iterator it = mdcCopy->find(key);
+		MDC::Map::const_iterator it = m_priv->mdcCopy->find(key);
 
-		if (it != mdcCopy->end())
+		if (it != m_priv->mdcCopy->end())
 		{
 			if (!it->second.empty())
 			{
@@ -136,11 +201,11 @@ LoggingEvent::KeySet LoggingEvent::getMDCKeySet() const
 {
 	LoggingEvent::KeySet set;
 
-	if (mdcCopy != 0 && !mdcCopy->empty())
+	if (m_priv->mdcCopy != 0 && !m_priv->mdcCopy->empty())
 	{
 		MDC::Map::const_iterator it;
 
-		for (it = mdcCopy->begin(); it != mdcCopy->end(); it++)
+		for (it = m_priv->mdcCopy->begin(); it != m_priv->mdcCopy->end(); it++)
 		{
 			set.push_back(it->first);
 
@@ -166,33 +231,33 @@ LoggingEvent::KeySet LoggingEvent::getMDCKeySet() const
 
 void LoggingEvent::getMDCCopy() const
 {
-	if (mdcCopyLookupRequired)
+	if (m_priv->mdcCopyLookupRequired)
 	{
-		mdcCopyLookupRequired = false;
+		m_priv->mdcCopyLookupRequired = false;
 		// the clone call is required for asynchronous logging.
 		ThreadSpecificData* data = ThreadSpecificData::getCurrentData();
 
 		if (data != 0)
 		{
-			mdcCopy = new MDC::Map(data->getMap());
+			m_priv->mdcCopy = new MDC::Map(data->getMap());
 		}
 		else
 		{
-			mdcCopy = new MDC::Map();
+			m_priv->mdcCopy = new MDC::Map();
 		}
 	}
 }
 
 bool LoggingEvent::getProperty(const LogString& key, LogString& dest) const
 {
-	if (properties == 0)
+	if (m_priv->properties == 0)
 	{
 		return false;
 	}
 
-	std::map<LogString, LogString>::const_iterator  it = properties->find(key);
+	std::map<LogString, LogString>::const_iterator  it = m_priv->properties->find(key);
 
-	if (it != properties->end())
+	if (it != m_priv->properties->end())
 	{
 		dest.append(it->second);
 		return true;
@@ -205,11 +270,11 @@ LoggingEvent::KeySet LoggingEvent::getPropertyKeySet() const
 {
 	LoggingEvent::KeySet set;
 
-	if (properties != 0)
+	if (m_priv->properties != 0)
 	{
 		std::map<LogString, LogString>::const_iterator it;
 
-		for (it = properties->begin(); it != properties->end(); it++)
+		for (it = m_priv->properties->begin(); it != m_priv->properties->end(); it++)
 		{
 			set.push_back(it->first);
 		}
@@ -250,115 +315,46 @@ const LogString LoggingEvent::getCurrentThreadName()
 
 void LoggingEvent::setProperty(const LogString& key, const LogString& value)
 {
-	if (properties == 0)
+	if (m_priv->properties == 0)
 	{
-		properties = new std::map<LogString, LogString>;
+		m_priv->properties = new std::map<LogString, LogString>;
 	}
 
-	(*properties)[key] = value;
+	(*m_priv->properties)[key] = value;
+}
+
+const LevelPtr& LoggingEvent::getLevel() const
+{
+	return m_priv->level;
 }
 
+const LogString& LoggingEvent::getLoggerName() const
+{
+	return m_priv->logger;
+}
 
+const LogString& LoggingEvent::getMessage() const
+{
+	return m_priv->message;
+}
 
-void LoggingEvent::writeProlog(ObjectOutputStream& os, Pool& p)
+const LogString& LoggingEvent::getRenderedMessage() const
 {
-	unsigned char classDesc[] =
-	{
-		0x72, 0x00, 0x21,
-		0x6F, 0x72, 0x67, 0x2E, 0x61, 0x70, 0x61, 0x63,
-		0x68, 0x65, 0x2E, 0x6C, 0x6F, 0x67, 0x34, 0x6A,
-		0x2E, 0x73, 0x70, 0x69, 0x2E, 0x4C, 0x6F, 0x67,
-		0x67, 0x69, 0x6E, 0x67, 0x45, 0x76, 0x65, 0x6E,
-		0x74, 0xF3, 0xF2, 0xB9, 0x23, 0x74, 0x0B, 0xB5,
-		0x3F, 0x03, 0x00, 0x0A, 0x5A, 0x00, 0x15, 0x6D,
-		0x64, 0x63, 0x43, 0x6F, 0x70, 0x79, 0x4C, 0x6F,
-		0x6F, 0x6B, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75,
-		0x69, 0x72, 0x65, 0x64, 0x5A, 0x00, 0x11, 0x6E,
-		0x64, 0x63, 0x4C, 0x6F, 0x6F, 0x6B, 0x75, 0x70,
-		0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
-		0x4A, 0x00, 0x09, 0x74, 0x69, 0x6D, 0x65, 0x53,
-		0x74, 0x61, 0x6D, 0x70, 0x4C, 0x00, 0x0C, 0x63,
-		0x61, 0x74, 0x65, 0x67, 0x6F, 0x72, 0x79, 0x4E,
-		0x61, 0x6D, 0x65, 0x74, 0x00, 0x12, 0x4C, 0x6A,
-		0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67,
-		0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
-		0x4C, 0x00, 0x0C, 0x6C, 0x6F, 0x63, 0x61, 0x74,
-		0x69, 0x6F, 0x6E, 0x49, 0x6E, 0x66, 0x6F, 0x74,
-		0x00, 0x23, 0x4C, 0x6F, 0x72, 0x67, 0x2F, 0x61,
-		0x70, 0x61, 0x63, 0x68, 0x65, 0x2F, 0x6C, 0x6F,
-		0x67, 0x34, 0x6A, 0x2F, 0x73, 0x70, 0x69, 0x2F,
-		0x4C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E,
-		0x49, 0x6E, 0x66, 0x6F, 0x3B, 0x4C, 0x00, 0x07,
-		0x6D, 0x64, 0x63, 0x43, 0x6F, 0x70, 0x79, 0x74,
-		0x00, 0x15, 0x4C, 0x6A, 0x61, 0x76, 0x61, 0x2F,
-		0x75, 0x74, 0x69, 0x6C, 0x2F, 0x48, 0x61, 0x73,
-		0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x3B, 0x4C,
-		0x00, 0x03, 0x6E, 0x64, 0x63,
-		0x74, 0x00, 0x12, 0x4C, 0x6A,
-		0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67,
-		0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
-		0x4C, 0x00, 0x0F, 0x72, 0x65, 0x6E,
-		0x64, 0x65, 0x72, 0x65, 0x64, 0x4D, 0x65, 0x73,
-		0x73, 0x61, 0x67, 0x65,
-		0x74, 0x00, 0x12, 0x4C, 0x6A,
-		0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67,
-		0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
-		0x4C, 0x00, 0x0A, 0x74, 0x68, 0x72, 0x65,
-		0x61, 0x64, 0x4E, 0x61, 0x6D, 0x65,
-		0x74, 0x00, 0x12, 0x4C, 0x6A,
-		0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67,
-		0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
-		0x4C, 0x00, 0x0D, 0x74, 0x68,
-		0x72, 0x6F, 0x77, 0x61, 0x62, 0x6C, 0x65, 0x49,
-		0x6E, 0x66, 0x6F, 0x74, 0x00, 0x2B, 0x4C, 0x6F,
-		0x72, 0x67, 0x2F, 0x61, 0x70, 0x61, 0x63, 0x68,
-		0x65, 0x2F, 0x6C, 0x6F, 0x67, 0x34, 0x6A, 0x2F,
-		0x73, 0x70, 0x69, 0x2F, 0x54, 0x68, 0x72, 0x6F,
-		0x77, 0x61, 0x62, 0x6C, 0x65, 0x49, 0x6E, 0x66,
-		0x6F, 0x72, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E,
-		0x3B, 0x78, 0x70
-	};
-
-	os.writeProlog("org.apache.log4j.spi.LoggingEvent",
-		8, (char*) classDesc, sizeof(classDesc), p);
+	return m_priv->message;
 }
 
-void LoggingEvent::write(helpers::ObjectOutputStream& os, Pool& p) const
+const LogString& LoggingEvent::getThreadName() const
 {
-	writeProlog(os, p);
-	// mdc and ndc lookup required should always be false
-	char lookupsRequired[] = { 0, 0 };
-	os.writeBytes(lookupsRequired, sizeof(lookupsRequired), p);
-	os.writeLong(timeStamp / 1000, p);
-	os.writeObject(logger, p);
-	locationInfo.write(os, p);
-
-	if (mdcCopy == 0 || mdcCopy->size() == 0)
-	{
-		os.writeNull(p);
-	}
-	else
-	{
-		os.writeObject(*mdcCopy, p);
-	}
+	return m_priv->threadName;
+}
 
-	if (ndc == 0)
-	{
-		os.writeNull(p);
-	}
-	else
-	{
-		os.writeObject(*ndc, p);
-	}
+log4cxx_time_t LoggingEvent::getTimeStamp() const
+{
+	return m_priv->timeStamp;
+}
 
-	os.writeObject(message, p);
-	os.writeObject(threadName, p);
-	//  throwable
-	os.writeNull(p);
-	os.writeByte(ObjectOutputStream::TC_BLOCKDATA, p);
-	os.writeByte(0x04, p);
-	os.writeInt(level->toInt(), p);
-	os.writeNull(p);
-	os.writeByte(ObjectOutputStream::TC_ENDBLOCKDATA, p);
+const log4cxx::spi::LocationInfo& LoggingEvent::getLocationInformation() const
+{
+	return m_priv->locationInfo;
 }
 
diff --git a/src/main/cpp/sockethubappender.cpp b/src/main/cpp/sockethubappender.cpp
index 2352504..2508dce 100644
--- a/src/main/cpp/sockethubappender.cpp
+++ b/src/main/cpp/sockethubappender.cpp
@@ -179,7 +179,7 @@ void SocketHubAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 		try
 		{
-			event->write(**it, p);
+//			event->write(**it, p);
 			(*it)->flush(p);
 			it++;
 		}
diff --git a/src/main/include/log4cxx/spi/loggingevent.h b/src/main/include/log4cxx/spi/loggingevent.h
index 6e40103..635c188 100644
--- a/src/main/include/log4cxx/spi/loggingevent.h
+++ b/src/main/include/log4cxx/spi/loggingevent.h
@@ -83,28 +83,16 @@ class LOG4CXX_EXPORT LoggingEvent :
 		~LoggingEvent();
 
 		/** Return the level of this event. */
-		inline const LevelPtr& getLevel() const
-		{
-			return level;
-		}
+		const LevelPtr& getLevel() const;
 
 		/**  Return the name of the logger. */
-		inline const LogString& getLoggerName() const
-		{
-			return logger;
-		}
+		const LogString& getLoggerName() const;
 
 		/** Return the message for this logging event. */
-		inline const LogString& getMessage() const
-		{
-			return message;
-		}
+		const LogString& getMessage() const;
 
 		/** Return the message for this logging event. */
-		inline const LogString& getRenderedMessage() const
-		{
-			return message;
-		}
+		const LogString& getRenderedMessage() const;
 
 		/**Returns the time when the application started,
 		in microseconds elapsed since 01.01.1970.
@@ -112,23 +100,14 @@ class LOG4CXX_EXPORT LoggingEvent :
 		static log4cxx_time_t getStartTime();
 
 		/** Return the threadName of this event. */
-		inline const LogString& getThreadName() const
-		{
-			return threadName;
-		}
+		const LogString& getThreadName() const;
 
 		/** The number of microseconds elapsed from 01.01.1970 until logging event
 		 was created. */
-		inline log4cxx_time_t getTimeStamp() const
-		{
-			return timeStamp;
-		}
+		log4cxx_time_t getTimeStamp() const;
 
 		/* Return the file where this log statement was written. */
-		inline const log4cxx::spi::LocationInfo& getLocationInformation() const
-		{
-			return locationInfo;
-		}
+		const log4cxx::spi::LocationInfo& getLocationInformation() const;
 
 		/**
 		* This method appends the NDC for this event to passed string. It will return the
@@ -142,12 +121,6 @@ class LOG4CXX_EXPORT LoggingEvent :
 		bool getNDC(LogString& dest) const;
 
 		/**
-		 *  Writes the content of the LoggingEvent
-		 *  in a format compatible with log4j's serialized form.
-		 */
-		void write(helpers::ObjectOutputStream& os, helpers::Pool& p) const;
-
-		/**
 		* Appends the the context corresponding to the <code>key</code> parameter.
 		* If there is a local MDC copy, possibly because we are in a logging
 		* server or running inside AsyncAppender, then we search for the key in
@@ -201,55 +174,8 @@ class LOG4CXX_EXPORT LoggingEvent :
 		void setProperty(const LogString& key, const LogString& value);
 
 	private:
-		/**
-		* The logger of the logging event.
-		**/
-		LogString logger;
-
-		/** level of logging event. */
-		LevelPtr level;
-
-		/** The nested diagnostic context (NDC) of logging event. */
-		mutable LogString* ndc;
-
-		/** The mapped diagnostic context (MDC) of logging event. */
-		mutable MDC::Map* mdcCopy;
-
-		/**
-		* A map of String keys and String values.
-		*/
-		std::map<LogString, LogString>* properties;
-
-		/** Have we tried to do an NDC lookup? If we did, there is no need
-		*  to do it again.  Note that its value is always false when
-		*  serialized. Thus, a receiving SocketNode will never use it's own
-		*  (incorrect) NDC. See also writeObject method.
-		*/
-		mutable bool ndcLookupRequired;
-
-		/**
-		* Have we tried to do an MDC lookup? If we did, there is no need to do it
-		* again.  Note that its value is always false when serialized. See also
-		* the getMDC and getMDCCopy methods.
-		*/
-		mutable bool mdcCopyLookupRequired;
-
-		/** The application supplied message of logging event. */
-		LogString message;
-
-
-		/** The number of microseconds elapsed from 01.01.1970 until logging event
-		 was created. */
-		log4cxx_time_t timeStamp;
-
-		/** The is the location where this log statement was written. */
-		const log4cxx::spi::LocationInfo locationInfo;
-
-
-		/** The identifier of thread in which this logging event
-		was generated.
-		*/
-		const LogString threadName;
+		struct LoggingEventPrivate;
+		std::unique_ptr<LoggingEventPrivate> m_priv;
 
 		//
 		//   prevent copy and assignment
@@ -258,8 +184,6 @@ class LOG4CXX_EXPORT LoggingEvent :
 		LoggingEvent& operator=(const LoggingEvent&);
 		static const LogString getCurrentThreadName();
 
-		static void writeProlog(log4cxx::helpers::ObjectOutputStream& os, log4cxx::helpers::Pool& p);
-
 };
 
 LOG4CXX_PTR_DEF(LoggingEvent);
diff --git a/src/test/cpp/CMakeLists.txt b/src/test/cpp/CMakeLists.txt
index 29413d9..71f95be 100644
--- a/src/test/cpp/CMakeLists.txt
+++ b/src/test/cpp/CMakeLists.txt
@@ -57,7 +57,6 @@ if(WIN32)
 endif()
 add_subdirectory(pattern)
 add_subdirectory(rolling)
-add_subdirectory(spi)
 add_subdirectory(varia)
 add_subdirectory(xml)
 
diff --git a/src/test/cpp/spi/CMakeLists.txt b/src/test/cpp/spi/CMakeLists.txt
deleted file mode 100644
index 380269f..0000000
--- a/src/test/cpp/spi/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-add_executable(spitestcase loggingeventtest.cpp)
-set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} spitestcase PARENT_SCOPE)
diff --git a/src/test/cpp/spi/loggingeventtest.cpp b/src/test/cpp/spi/loggingeventtest.cpp
deleted file mode 100644
index 8e5b7ae..0000000
--- a/src/test/cpp/spi/loggingeventtest.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <log4cxx/spi/loggingevent.h>
-#include "../util/serializationtesthelper.h"
-#include <log4cxx/logmanager.h>
-#include <log4cxx/ndc.h>
-#include <log4cxx/mdc.h>
-#include "../logunit.h"
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::util;
-using namespace log4cxx::spi;
-using namespace std;
-
-
-/**
-   Unit tests for LoggingEvent
- */
-LOGUNIT_CLASS(LoggingEventTest)
-{
-	LOGUNIT_TEST_SUITE(LoggingEventTest);
-	LOGUNIT_TEST(testSerializationSimple);
-	LOGUNIT_TEST(testSerializationWithLocation);
-	LOGUNIT_TEST(testSerializationNDC);
-	LOGUNIT_TEST(testSerializationMDC);
-	LOGUNIT_TEST_SUITE_END();
-
-public:
-	void setUp()
-	{
-		NDC::clear();
-		MDC::clear();
-	}
-
-	void tearDown()
-	{
-		LogManager::shutdown();
-	}
-
-
-
-
-	/**
-	 * Serialize a simple logging event and check it against
-	 * a witness.
-	 * @throws Exception if exception during test.
-	 */
-	void testSerializationSimple()
-	{
-		LoggingEventPtr event = LoggingEventPtr(
-				new LoggingEvent(
-					LOG4CXX_STR("root"), Level::getInfo(), LOG4CXX_STR("Hello, world."), LocationInfo::getLocationUnavailable()));
-
-		LOGUNIT_ASSERT_EQUAL(true, SerializationTestHelper::compare(
-				"witness/serialization/simple.bin", event, 237));
-	}
-
-
-	/**
-	 * Serialize a logging event with an exception and check it against
-	 * a witness.
-	 * @throws Exception if exception during test.
-	 *
-	 */
-	void testSerializationWithLocation()
-	{
-		LoggingEventPtr event = LoggingEventPtr(
-				new LoggingEvent(
-					LOG4CXX_STR("root"), Level::getInfo(), LOG4CXX_STR("Hello, world."), LOG4CXX_LOCATION));
-
-		LOGUNIT_ASSERT_EQUAL(true, SerializationTestHelper::compare(
-				"witness/serialization/location.bin", event, 237));
-	}
-
-	/**
-	 * Serialize a logging event with ndc.
-	 * @throws Exception if exception during test.
-	 *
-	 */
-	void testSerializationNDC()
-	{
-		NDC::push("ndc test");
-
-		LoggingEventPtr event = LoggingEventPtr(
-				new LoggingEvent(
-					LOG4CXX_STR("root"), Level::getInfo(), LOG4CXX_STR("Hello, world."), LocationInfo::getLocationUnavailable()));
-
-		LOGUNIT_ASSERT_EQUAL(true, SerializationTestHelper::compare(
-				"witness/serialization/ndc.bin", event, 237));
-	}
-
-	/**
-	 * Serialize a logging event with mdc.
-	 * @throws Exception if exception during test.
-	 *
-	 */
-	void testSerializationMDC()
-	{
-		MDC::put("mdckey", "mdcvalue");
-
-		LoggingEventPtr event = LoggingEventPtr(
-				new LoggingEvent(
-					LOG4CXX_STR("root"), Level::getInfo(), LOG4CXX_STR("Hello, world."), LocationInfo::getLocationUnavailable()));
-
-		LOGUNIT_ASSERT_EQUAL(true, SerializationTestHelper::compare(
-				"witness/serialization/mdc.bin", event, 237));
-	}
-
-};
-
-LOGUNIT_TEST_SUITE_REGISTRATION(LoggingEventTest);
diff --git a/src/test/cpp/util/CMakeLists.txt b/src/test/cpp/util/CMakeLists.txt
index c818ab8..35cd3eb 100644
--- a/src/test/cpp/util/CMakeLists.txt
+++ b/src/test/cpp/util/CMakeLists.txt
@@ -1,6 +1,5 @@
 # Components required by all tests
 add_library(testingUtilities STATIC
-    serializationtesthelper.cpp
     absolutedateandtimefilter.cpp
     absolutetimefilter.cpp
     binarycompare.cpp
diff --git a/src/test/cpp/util/serializationtesthelper.cpp b/src/test/cpp/util/serializationtesthelper.cpp
deleted file mode 100644
index 903ee60..0000000
--- a/src/test/cpp/util/serializationtesthelper.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "serializationtesthelper.h"
-#include <log4cxx/helpers/bytearrayoutputstream.h>
-#include <log4cxx/helpers/objectoutputstream.h>
-#include <log4cxx/helpers/fileinputstream.h>
-#include <log4cxx/helpers/bytebuffer.h>
-#include <log4cxx/file.h>
-#include "apr_pools.h"
-
-using namespace log4cxx;
-using namespace log4cxx::util;
-using namespace log4cxx::helpers;
-using namespace log4cxx::spi;
-
-
-
-bool SerializationTestHelper::compare(
-	const char* witness, const LoggingEventPtr& event, size_t endCompare)
-{
-	ByteArrayOutputStreamPtr memOut = ByteArrayOutputStreamPtr( new ByteArrayOutputStream() );
-	Pool p;
-	ObjectOutputStream objOut(memOut, p);
-	event->write(objOut, p);
-	objOut.close(p);
-	return compare(witness, memOut->toByteArray(), endCompare, p);
-}
-
-/**
- * Asserts the serialized form of an object.
- * @param witness file name of expected serialization.
- * @param actual byte array of actual serialization.
- * @param skip positions to skip comparison.
- * @param endCompare position to stop comparison.
- * @throws IOException thrown on IO or serialization exception.
- */
-bool SerializationTestHelper::compare(
-	const char* witness, const std::vector<unsigned char>& actual,
-	size_t endCompare, Pool& p)
-{
-	File witnessFile(witness);
-
-	char* expected = p.pstralloc(actual.size());
-	FileInputStreamPtr is(new FileInputStream(witnessFile));
-	ByteBuffer readBuffer(expected, actual.size());
-	int bytesRead = is->read(readBuffer);
-	is->close();
-
-	if (bytesRead < endCompare)
-	{
-		puts("Witness file is shorter than expected");
-		return false;
-	}
-
-	size_t endScan = actual.size();
-
-	if (endScan > endCompare)
-	{
-		endScan = endCompare;
-	}
-
-	for (size_t i = 0; i < endScan; i++)
-	{
-		if (((unsigned char) expected[i]) != actual[i])
-		{
-			printf("Difference at offset %d, expected %x, actual %x\n", i, expected[i], actual[i]);
-			return false;
-		}
-	}
-
-	return true;
-
-}
diff --git a/src/test/cpp/util/serializationtesthelper.h b/src/test/cpp/util/serializationtesthelper.h
deleted file mode 100644
index 5d1cdcd..0000000
--- a/src/test/cpp/util/serializationtesthelper.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_TESTS_UTIL_SERIALIZATIONTESTHELPER_H
-#define _LOG4CXX_TESTS_UTIL_SERIALIZATIONTESTHELPER_H
-
-#include <log4cxx/spi/loggingevent.h>
-
-namespace log4cxx
-{
-namespace util
-{
-class SerializationTestHelper
-{
-	public:
-		static bool compare(const char* filename,
-			const log4cxx::spi::LoggingEventPtr& event,
-			size_t stopCompare);
-		static bool compare(const char* filename,
-			const std::vector<unsigned char>& array,
-			size_t stopCompare, log4cxx::helpers::Pool& p);
-	private:
-		SerializationTestHelper();
-		SerializationTestHelper(const SerializationTestHelper&);
-		SerializationTestHelper& operator=(SerializationTestHelper&);
-};
-}
-}
-
-#endif
diff --git a/src/test/resources/witness/serialization/exception.bin b/src/test/resources/witness/serialization/exception.bin
deleted file mode 100644
index 87b0c1d..0000000
Binary files a/src/test/resources/witness/serialization/exception.bin and /dev/null differ
diff --git a/src/test/resources/witness/serialization/info.bin b/src/test/resources/witness/serialization/info.bin
deleted file mode 100644
index f887f39..0000000
Binary files a/src/test/resources/witness/serialization/info.bin and /dev/null differ
diff --git a/src/test/resources/witness/serialization/location.bin b/src/test/resources/witness/serialization/location.bin
deleted file mode 100644
index c798850..0000000
Binary files a/src/test/resources/witness/serialization/location.bin and /dev/null differ
diff --git a/src/test/resources/witness/serialization/mdc.bin b/src/test/resources/witness/serialization/mdc.bin
deleted file mode 100644
index 42e994e..0000000
Binary files a/src/test/resources/witness/serialization/mdc.bin and /dev/null differ
diff --git a/src/test/resources/witness/serialization/ndc.bin b/src/test/resources/witness/serialization/ndc.bin
deleted file mode 100644
index 7f43455..0000000
Binary files a/src/test/resources/witness/serialization/ndc.bin and /dev/null differ
diff --git a/src/test/resources/witness/serialization/simple.bin b/src/test/resources/witness/serialization/simple.bin
deleted file mode 100644
index c31f3cf..0000000
Binary files a/src/test/resources/witness/serialization/simple.bin and /dev/null differ

[logging-log4cxx] 04/20: Changed the private structs to be inner classes

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1858d23e897c87373fb217849ae3d4943f554c90
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Mon Sep 27 21:51:23 2021 -0400

    Changed the private structs to be inner classes
---
 src/main/cpp/appenderskeleton.cpp                        |  6 +++---
 src/main/cpp/asyncappender.cpp                           |  3 ++-
 src/main/cpp/consoleappender.cpp                         |  2 +-
 src/main/cpp/fileappender.cpp                            | 12 ++++++------
 src/main/cpp/odbcappender.cpp                            |  4 ++--
 src/main/cpp/rollingfileappender.cpp                     |  2 +-
 src/main/cpp/smtpappender.cpp                            |  6 +++---
 src/main/cpp/socketappenderskeleton.cpp                  |  2 +-
 src/main/cpp/sockethubappender.cpp                       |  2 +-
 src/main/cpp/syslogappender.cpp                          |  8 ++++----
 src/main/cpp/telnetappender.cpp                          |  2 +-
 src/main/cpp/writerappender.cpp                          | 10 +++++-----
 src/main/cpp/xmlsocketappender.cpp                       |  2 +-
 src/main/include/log4cxx/appenderskeleton.h              |  9 +++------
 src/main/include/log4cxx/asyncappender.h                 |  3 +++
 src/main/include/log4cxx/consoleappender.h               |  3 +++
 src/main/include/log4cxx/db/odbcappender.h               |  3 +++
 src/main/include/log4cxx/fileappender.h                  |  8 ++++----
 src/main/include/log4cxx/net/smtpappender.h              |  1 +
 src/main/include/log4cxx/net/socketappenderskeleton.h    |  3 +++
 src/main/include/log4cxx/net/sockethubappender.h         |  2 ++
 src/main/include/log4cxx/net/syslogappender.h            |  1 +
 src/main/include/log4cxx/net/telnetappender.h            |  2 ++
 src/main/include/log4cxx/net/xmlsocketappender.h         |  2 ++
 src/main/include/log4cxx/private/appenderskeleton_priv.h |  4 +---
 src/main/include/log4cxx/private/fileappender_priv.h     |  5 ++---
 src/main/include/log4cxx/private/odbcappender_priv.h     |  9 +++++++--
 src/main/include/log4cxx/private/syslogappender_priv.h   |  4 ++--
 src/main/include/log4cxx/private/writerappender_priv.h   |  5 ++---
 src/main/include/log4cxx/rolling/rollingfileappender.h   |  2 ++
 src/main/include/log4cxx/writerappender.h                |  8 +++-----
 31 files changed, 77 insertions(+), 58 deletions(-)

diff --git a/src/main/cpp/appenderskeleton.cpp b/src/main/cpp/appenderskeleton.cpp
index 2c433d8..d709cfe 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -30,20 +30,20 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(AppenderSkeleton)
 
-AppenderSkeleton::AppenderSkeleton( std::unique_ptr<priv::AppenderSkeletonPrivate> priv )
+AppenderSkeleton::AppenderSkeleton( std::unique_ptr<AppenderSkeletonPrivate> priv )
 	:	m_priv(std::move(priv))
 {
 
 }
 
 AppenderSkeleton::AppenderSkeleton()
-	:   m_priv(std::make_unique<priv::AppenderSkeletonPrivate>())
+	:   m_priv(std::make_unique<AppenderSkeletonPrivate>())
 {
 
 }
 
 AppenderSkeleton::AppenderSkeleton(const LayoutPtr& layout1)
-	:	m_priv(std::make_unique<priv::AppenderSkeletonPrivate>())
+	:	m_priv(std::make_unique<AppenderSkeletonPrivate>())
 {
 
 }
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index f878038..71b29a1 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -88,8 +88,9 @@ class DiscardSummary
 
 typedef std::map<LogString, DiscardSummary> DiscardMap;
 
-struct AsyncAppenderPriv : public priv::AppenderSkeletonPrivate {
+struct AsyncAppender::AsyncAppenderPriv : public AppenderSkeleton::AppenderSkeletonPrivate {
 	AsyncAppenderPriv()	:
+		AppenderSkeletonPrivate(),
 		buffer(),
 		bufferSize(DEFAULT_BUFFER_SIZE),
 		appenders(std::make_shared<AppenderAttachableImpl>(pool)),
diff --git a/src/main/cpp/consoleappender.cpp b/src/main/cpp/consoleappender.cpp
index c77c409..026627d 100644
--- a/src/main/cpp/consoleappender.cpp
+++ b/src/main/cpp/consoleappender.cpp
@@ -27,7 +27,7 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
-struct ConsoleAppenderPriv : public priv::WriterAppenderPriv{
+struct ConsoleAppender::ConsoleAppenderPriv : public WriterAppender::WriterAppenderPriv{
 	ConsoleAppenderPriv(LogString target) :
 		WriterAppenderPriv(),
 		target(target){}
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index 29ed49c..ed53c5d 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -35,10 +35,10 @@ using namespace log4cxx::spi;
 
 IMPLEMENT_LOG4CXX_OBJECT(FileAppender)
 
-#define _priv static_cast<priv::FileAppenderPriv*>(m_priv.get())
+#define _priv static_cast<FileAppenderPriv*>(m_priv.get())
 
 FileAppender::FileAppender() :
-	WriterAppender (std::make_unique<priv::FileAppenderPriv>())
+	WriterAppender (std::make_unique<FileAppenderPriv>())
 {
 	_priv->fileAppend = true;
 	_priv->bufferedIO = false;
@@ -47,7 +47,7 @@ FileAppender::FileAppender() :
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1,
 	bool append1, bool bufferedIO1, int bufferSize1)
-	: WriterAppender(std::make_unique<priv::FileAppenderPriv>(layout1))
+	: WriterAppender(std::make_unique<FileAppenderPriv>(layout1))
 {
 	_priv->fileAppend = append1;
 	_priv->fileName = fileName1;
@@ -59,7 +59,7 @@ FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1,
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1,
 	bool append1)
-	: WriterAppender(std::make_unique<priv::FileAppenderPriv>(layout1))
+	: WriterAppender(std::make_unique<FileAppenderPriv>(layout1))
 {
 	_priv->fileAppend = append1;
 	_priv->fileName = fileName1;
@@ -70,7 +70,7 @@ FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1,
 }
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1)
-	: WriterAppender(std::make_unique<priv::FileAppenderPriv>(layout1))
+	: WriterAppender(std::make_unique<FileAppenderPriv>(layout1))
 {
 	_priv->fileAppend = true;
 	_priv->fileName = fileName1;
@@ -80,7 +80,7 @@ FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1)
 	activateOptions(p);
 }
 
-FileAppender::FileAppender(std::unique_ptr<priv::FileAppenderPriv> priv) :
+FileAppender::FileAppender(std::unique_ptr<FileAppenderPriv> priv) :
 	WriterAppender (std::move(priv)){
 
 }
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index fb1632c..1e79f1a 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -91,10 +91,10 @@ const char* SQLException::formatMessage(short fHandleType,
 
 IMPLEMENT_LOG4CXX_OBJECT(ODBCAppender)
 
-#define _priv static_cast<priv::ODBCAppenderPriv*>(m_priv.get())
+#define _priv static_cast<ODBCAppenderPriv*>(m_priv.get())
 
 ODBCAppender::ODBCAppender()
-	: AppenderSkeleton (std::make_unique<priv::ODBCAppenderPriv>())
+	: AppenderSkeleton (std::make_unique<ODBCAppenderPriv>())
 {
 }
 
diff --git a/src/main/cpp/rollingfileappender.cpp b/src/main/cpp/rollingfileappender.cpp
index fe0cfa1..31a2460 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -48,7 +48,7 @@ using namespace log4cxx::rolling;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
-struct RollingFileAppenderPriv : public priv::FileAppenderPriv{
+struct RollingFileAppender::RollingFileAppenderPriv : public FileAppenderPriv{
 	RollingFileAppenderPriv() :
 		FileAppenderPriv(),
 		fileLength(0){}
diff --git a/src/main/cpp/smtpappender.cpp b/src/main/cpp/smtpappender.cpp
index 41b6153..7aee2b3 100644
--- a/src/main/cpp/smtpappender.cpp
+++ b/src/main/cpp/smtpappender.cpp
@@ -377,9 +377,9 @@ class LOG4CXX_EXPORT DefaultEvaluator :
 IMPLEMENT_LOG4CXX_OBJECT(DefaultEvaluator)
 IMPLEMENT_LOG4CXX_OBJECT(SMTPAppender)
 
-struct SMTPPriv : public priv::AppenderSkeletonPrivate {
+struct SMTPAppender::SMTPPriv : public AppenderSkeletonPrivate {
 	SMTPPriv() :
-		priv::AppenderSkeletonPrivate(),
+		AppenderSkeletonPrivate(),
 		smtpPort(25),
 		bufferSize(512),
 		locationInfo(false),
@@ -387,7 +387,7 @@ struct SMTPPriv : public priv::AppenderSkeletonPrivate {
 		evaluator(new DefaultEvaluator()){}
 
 	SMTPPriv(spi::TriggeringEventEvaluatorPtr evaluator) :
-		priv::AppenderSkeletonPrivate(),
+		AppenderSkeletonPrivate(),
 		smtpPort(25),
 		bufferSize(512),
 		locationInfo(false),
diff --git a/src/main/cpp/socketappenderskeleton.cpp b/src/main/cpp/socketappenderskeleton.cpp
index c1d6beb..e2702b2 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -34,7 +34,7 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::net;
 
-struct SocketAppenderSkeletonPriv : public priv::AppenderSkeletonPrivate {
+struct SocketAppenderSkeleton::SocketAppenderSkeletonPriv : public AppenderSkeletonPrivate {
 	SocketAppenderSkeletonPriv(int defaultPort, int reconnectionDelay) :
 		AppenderSkeletonPrivate(),
 		remoteHost(),
diff --git a/src/main/cpp/sockethubappender.cpp b/src/main/cpp/sockethubappender.cpp
index 15ec6d1..2352504 100644
--- a/src/main/cpp/sockethubappender.cpp
+++ b/src/main/cpp/sockethubappender.cpp
@@ -43,7 +43,7 @@ IMPLEMENT_LOG4CXX_OBJECT(SocketHubAppender)
 
 int SocketHubAppender::DEFAULT_PORT = 4560;
 
-struct SocketHubAppenderPriv : public priv::AppenderSkeletonPrivate{
+struct SocketHubAppender::SocketHubAppenderPriv : public AppenderSkeletonPrivate{
 	SocketHubAppenderPriv(int port) :
 		AppenderSkeletonPrivate(),
 		port(port),
diff --git a/src/main/cpp/syslogappender.cpp b/src/main/cpp/syslogappender.cpp
index 527d855..9e8f398 100644
--- a/src/main/cpp/syslogappender.cpp
+++ b/src/main/cpp/syslogappender.cpp
@@ -37,10 +37,10 @@ using namespace log4cxx::net;
 
 IMPLEMENT_LOG4CXX_OBJECT(SyslogAppender)
 
-#define _priv static_cast<priv::SyslogAppenderPriv*>(m_priv.get())
+#define _priv static_cast<SyslogAppenderPriv*>(m_priv.get())
 
 SyslogAppender::SyslogAppender()
-	: AppenderSkeleton (std::make_unique<priv::SyslogAppenderPriv>())
+	: AppenderSkeleton (std::make_unique<SyslogAppenderPriv>())
 {
 	this->initSyslogFacilityStr();
 
@@ -48,14 +48,14 @@ SyslogAppender::SyslogAppender()
 
 SyslogAppender::SyslogAppender(const LayoutPtr& layout1,
 	int syslogFacility1)
-	: AppenderSkeleton (std::make_unique<priv::SyslogAppenderPriv>(layout1, syslogFacility1))
+	: AppenderSkeleton (std::make_unique<SyslogAppenderPriv>(layout1, syslogFacility1))
 {
 	this->initSyslogFacilityStr();
 }
 
 SyslogAppender::SyslogAppender(const LayoutPtr& layout1,
 	const LogString& syslogHost1, int syslogFacility1)
-	: AppenderSkeleton (std::make_unique<priv::SyslogAppenderPriv>(layout1, syslogHost1, syslogFacility1))
+	: AppenderSkeleton (std::make_unique<SyslogAppenderPriv>(layout1, syslogHost1, syslogFacility1))
 {
 	this->initSyslogFacilityStr();
 	setSyslogHost(syslogHost1);
diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp
index 8071937..a3a4b9d 100644
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@ -34,7 +34,7 @@ using namespace log4cxx::net;
 
 IMPLEMENT_LOG4CXX_OBJECT(TelnetAppender)
 
-struct TelnetAppenderPriv : public priv::AppenderSkeletonPrivate{
+struct TelnetAppender::TelnetAppenderPriv : public AppenderSkeletonPrivate{
 	TelnetAppenderPriv( int port, int maxConnections ) : AppenderSkeletonPrivate(),
 		port(port),
 		connections(maxConnections),
diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp
index bbd4842..52ffaf3 100644
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@ -27,29 +27,29 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
-#define _priv static_cast<priv::WriterAppenderPriv*>(m_priv.get())
+#define _priv static_cast<WriterAppenderPriv*>(m_priv.get())
 
 IMPLEMENT_LOG4CXX_OBJECT(WriterAppender)
 
 WriterAppender::WriterAppender() :
-	AppenderSkeleton (std::make_unique<priv::WriterAppenderPriv>())
+	AppenderSkeleton (std::make_unique<WriterAppenderPriv>())
 {
 }
 
 WriterAppender::WriterAppender(const LayoutPtr& layout1,
 	log4cxx::helpers::WriterPtr& writer1)
-	: AppenderSkeleton (std::make_unique<priv::WriterAppenderPriv>(layout1, writer1))
+	: AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout1, writer1))
 {
 	Pool p;
 	activateOptions(p);
 }
 
 WriterAppender::WriterAppender(const LayoutPtr& layout1)
-	: AppenderSkeleton (std::make_unique<priv::WriterAppenderPriv>(layout1))
+	: AppenderSkeleton (std::make_unique<WriterAppenderPriv>(layout1))
 {
 }
 
-WriterAppender::WriterAppender(std::unique_ptr<priv::WriterAppenderPriv> priv)
+WriterAppender::WriterAppender(std::unique_ptr<WriterAppenderPriv> priv)
 	: AppenderSkeleton (std::move(priv)){
 
 }
diff --git a/src/main/cpp/xmlsocketappender.cpp b/src/main/cpp/xmlsocketappender.cpp
index 1b34573..16cb0bd 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -35,7 +35,7 @@ using namespace log4cxx::xml;
 
 IMPLEMENT_LOG4CXX_OBJECT(XMLSocketAppender)
 
-struct XMLSocketAppenderPriv : public priv::AppenderSkeletonPrivate {
+struct XMLSocketAppender::XMLSocketAppenderPriv : public AppenderSkeletonPrivate {
 	XMLSocketAppenderPriv() : AppenderSkeletonPrivate(){}
 
 	log4cxx::helpers::WriterPtr writer;
diff --git a/src/main/include/log4cxx/appenderskeleton.h b/src/main/include/log4cxx/appenderskeleton.h
index 1076335..bb7c783 100644
--- a/src/main/include/log4cxx/appenderskeleton.h
+++ b/src/main/include/log4cxx/appenderskeleton.h
@@ -34,10 +34,6 @@
 
 namespace log4cxx
 {
-namespace priv
-{
-struct AppenderSkeletonPrivate;
-}
 
 /**
 *  Implementation base class for all appenders.
@@ -50,7 +46,8 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 	public virtual helpers::Object
 {
 	protected:
-		AppenderSkeleton( std::unique_ptr<priv::AppenderSkeletonPrivate> priv );
+		struct AppenderSkeletonPrivate;
+		AppenderSkeleton( std::unique_ptr<AppenderSkeletonPrivate> priv );
 
 		/**
 		Subclasses of <code>AppenderSkeleton</code> should implement this
@@ -177,7 +174,7 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		void setThreshold(const LevelPtr& threshold);
 
 protected:
-		std::unique_ptr<priv::AppenderSkeletonPrivate> m_priv;
+		std::unique_ptr<AppenderSkeletonPrivate> m_priv;
 
 }; // class AppenderSkeleton
 }  // namespace log4cxx
diff --git a/src/main/include/log4cxx/asyncappender.h b/src/main/include/log4cxx/asyncappender.h
index 1f767b2..c427244 100644
--- a/src/main/include/log4cxx/asyncappender.h
+++ b/src/main/include/log4cxx/asyncappender.h
@@ -57,6 +57,9 @@ class LOG4CXX_EXPORT AsyncAppender :
 	public virtual spi::AppenderAttachable,
 	public virtual AppenderSkeleton
 {
+protected:
+	struct AsyncAppenderPriv;
+
 	public:
 		DECLARE_LOG4CXX_OBJECT(AsyncAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
diff --git a/src/main/include/log4cxx/consoleappender.h b/src/main/include/log4cxx/consoleappender.h
index 31bfb17..2cb4f91 100644
--- a/src/main/include/log4cxx/consoleappender.h
+++ b/src/main/include/log4cxx/consoleappender.h
@@ -35,6 +35,9 @@ namespace log4cxx
 */
 class LOG4CXX_EXPORT ConsoleAppender : public WriterAppender
 {
+private:
+	struct ConsoleAppenderPriv;
+
 	public:
 		DECLARE_LOG4CXX_OBJECT(ConsoleAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
diff --git a/src/main/include/log4cxx/db/odbcappender.h b/src/main/include/log4cxx/db/odbcappender.h
index b16baaa..67e46eb 100644
--- a/src/main/include/log4cxx/db/odbcappender.h
+++ b/src/main/include/log4cxx/db/odbcappender.h
@@ -227,6 +227,9 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 #endif
 		static void encode(unsigned short** dest, const LogString& src,
 			log4cxx::helpers::Pool& p);
+
+protected:
+		struct ODBCAppenderPriv;
 }; // class ODBCAppender
 LOG4CXX_PTR_DEF(ODBCAppender);
 
diff --git a/src/main/include/log4cxx/fileappender.h b/src/main/include/log4cxx/fileappender.h
index bca07da..39c6d9d 100644
--- a/src/main/include/log4cxx/fileappender.h
+++ b/src/main/include/log4cxx/fileappender.h
@@ -35,9 +35,6 @@ namespace helpers
 {
 class Pool;
 }
-namespace priv{
-struct FileAppenderPriv;
-}
 
 /**
 *  FileAppender appends log events to a file.
@@ -48,6 +45,9 @@ struct FileAppenderPriv;
 */
 class LOG4CXX_EXPORT FileAppender : public WriterAppender
 {
+protected:
+	struct FileAppenderPriv;
+
 	public:
 		DECLARE_LOG4CXX_OBJECT(FileAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -209,7 +209,7 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
 		FileAppender(const FileAppender&);
 		FileAppender& operator=(const FileAppender&);
 protected:
-		FileAppender(std::unique_ptr<priv::FileAppenderPriv> priv);
+		FileAppender(std::unique_ptr<FileAppenderPriv> priv);
 
 }; // class FileAppender
 LOG4CXX_PTR_DEF(FileAppender);
diff --git a/src/main/include/log4cxx/net/smtpappender.h b/src/main/include/log4cxx/net/smtpappender.h
index 593950d..0838f44 100644
--- a/src/main/include/log4cxx/net/smtpappender.h
+++ b/src/main/include/log4cxx/net/smtpappender.h
@@ -45,6 +45,7 @@ delivering useful application context.
 class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
 {
 	private:
+		struct SMTPPriv;
 		SMTPAppender(const SMTPAppender&);
 		SMTPAppender& operator=(const SMTPAppender&);
 		static bool asciiCheck(const LogString& value, const LogString& label);
diff --git a/src/main/include/log4cxx/net/socketappenderskeleton.h b/src/main/include/log4cxx/net/socketappenderskeleton.h
index b4158f4..77fccd9 100644
--- a/src/main/include/log4cxx/net/socketappenderskeleton.h
+++ b/src/main/include/log4cxx/net/socketappenderskeleton.h
@@ -40,6 +40,9 @@ namespace net
  */
 class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 {
+protected:
+	struct SocketAppenderSkeletonPriv;
+
 	public:
 		SocketAppenderSkeleton(int defaultPort, int reconnectionDelay);
 		~SocketAppenderSkeleton();
diff --git a/src/main/include/log4cxx/net/sockethubappender.h b/src/main/include/log4cxx/net/sockethubappender.h
index 33be85a..023eae7 100644
--- a/src/main/include/log4cxx/net/sockethubappender.h
+++ b/src/main/include/log4cxx/net/sockethubappender.h
@@ -179,6 +179,8 @@ class LOG4CXX_EXPORT SocketHubAppender : public AppenderSkeleton
 
 		void monitor();
 
+		struct SocketHubAppenderPriv;
+
 }; // class SocketHubAppender
 LOG4CXX_PTR_DEF(SocketHubAppender);
 }  // namespace net
diff --git a/src/main/include/log4cxx/net/syslogappender.h b/src/main/include/log4cxx/net/syslogappender.h
index 87bee2d..e401fab 100644
--- a/src/main/include/log4cxx/net/syslogappender.h
+++ b/src/main/include/log4cxx/net/syslogappender.h
@@ -144,6 +144,7 @@ class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
 		void initSyslogFacilityStr();
 
 	private:
+		struct SyslogAppenderPriv;
 		SyslogAppender(const SyslogAppender&);
 		SyslogAppender& operator=(const SyslogAppender&);
 }; // class SyslogAppender
diff --git a/src/main/include/log4cxx/net/telnetappender.h b/src/main/include/log4cxx/net/telnetappender.h
index e25d19d..e996755 100644
--- a/src/main/include/log4cxx/net/telnetappender.h
+++ b/src/main/include/log4cxx/net/telnetappender.h
@@ -137,6 +137,8 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 		void write(log4cxx::helpers::ByteBuffer&);
 		void writeStatus(const log4cxx::helpers::SocketPtr& socket, const LogString& msg, log4cxx::helpers::Pool& p);
 		void acceptConnections();
+
+		struct TelnetAppenderPriv;
 }; // class TelnetAppender
 
 LOG4CXX_PTR_DEF(TelnetAppender);
diff --git a/src/main/include/log4cxx/net/xmlsocketappender.h b/src/main/include/log4cxx/net/xmlsocketappender.h
index 2ce7be2..dad19f7 100644
--- a/src/main/include/log4cxx/net/xmlsocketappender.h
+++ b/src/main/include/log4cxx/net/xmlsocketappender.h
@@ -138,6 +138,8 @@ class LOG4CXX_EXPORT XMLSocketAppender : public SocketAppenderSkeleton
 		//  prevent copy and assignment statements
 		XMLSocketAppender(const XMLSocketAppender&);
 		XMLSocketAppender& operator=(const XMLSocketAppender&);
+
+		struct XMLSocketAppenderPriv;
 }; // class XMLSocketAppender
 
 LOG4CXX_PTR_DEF(XMLSocketAppender);
diff --git a/src/main/include/log4cxx/private/appenderskeleton_priv.h b/src/main/include/log4cxx/private/appenderskeleton_priv.h
index af81db2..0ee66ae 100644
--- a/src/main/include/log4cxx/private/appenderskeleton_priv.h
+++ b/src/main/include/log4cxx/private/appenderskeleton_priv.h
@@ -23,9 +23,8 @@
 #include <memory>
 
 namespace log4cxx {
-namespace priv{
 
-struct AppenderSkeletonPrivate {
+struct AppenderSkeleton::AppenderSkeletonPrivate {
     AppenderSkeletonPrivate() :
         threshold(Level::getAll()),
         errorHandler(std::make_shared<log4cxx::helpers::OnlyOnceErrorHandler>()),
@@ -70,6 +69,5 @@ struct AppenderSkeletonPrivate {
 };
 
 }
-}
 
 #endif /* _LOG4CXX_APPENDERSKELETON_PRIV */
diff --git a/src/main/include/log4cxx/private/fileappender_priv.h b/src/main/include/log4cxx/private/fileappender_priv.h
index fe9cf2d..ac0a742 100644
--- a/src/main/include/log4cxx/private/fileappender_priv.h
+++ b/src/main/include/log4cxx/private/fileappender_priv.h
@@ -19,11 +19,11 @@
 #define _LOG4CXX_FILEAPPENDER_PRIV_H
 
 #include <log4cxx/private/writerappender_priv.h>
+#include <log4cxx/fileappender.h>
 
 namespace log4cxx{
-namespace priv{
 
-struct FileAppenderPriv : public WriterAppenderPriv {
+struct FileAppender::FileAppenderPriv : public WriterAppender::WriterAppenderPriv {
     FileAppenderPriv() : WriterAppenderPriv(){}
 
     FileAppenderPriv(LayoutPtr layout) : WriterAppenderPriv(layout){}
@@ -51,6 +51,5 @@ struct FileAppenderPriv : public WriterAppenderPriv {
 };
 
 }
-}
 
 #endif
diff --git a/src/main/include/log4cxx/private/odbcappender_priv.h b/src/main/include/log4cxx/private/odbcappender_priv.h
index e6c5a85..547fdc0 100644
--- a/src/main/include/log4cxx/private/odbcappender_priv.h
+++ b/src/main/include/log4cxx/private/odbcappender_priv.h
@@ -15,15 +15,18 @@
  * limitations under the License.
  */
 
+#ifndef LOG4CXX_ODBCAPPENDER_PRIV
+#define LOG4CXX_ODBCAPPENDER_PRIV
+
 #include <log4cxx/db/odbcappender.h>
 #include "appenderskeleton_priv.h"
 
 #include <list>
 
 namespace log4cxx{
-namespace priv{
+namespace db{
 
-struct ODBCAppenderPriv : public AppenderSkeletonPrivate {
+struct ODBCAppender::ODBCAppenderPriv : public AppenderSkeleton::AppenderSkeletonPrivate {
     ODBCAppenderPriv() :
         AppenderSkeletonPrivate(),
         connection(nullptr),
@@ -80,3 +83,5 @@ struct ODBCAppenderPriv : public AppenderSkeletonPrivate {
 
 }
 }
+
+#endif /* LOG4CXX_ODBCAPPENDER_PRIV */
diff --git a/src/main/include/log4cxx/private/syslogappender_priv.h b/src/main/include/log4cxx/private/syslogappender_priv.h
index 2e4519b..4253bbf 100644
--- a/src/main/include/log4cxx/private/syslogappender_priv.h
+++ b/src/main/include/log4cxx/private/syslogappender_priv.h
@@ -50,9 +50,9 @@
 #endif
 
 namespace log4cxx{
-namespace priv{
+namespace net{
 
-struct SyslogAppenderPriv : public AppenderSkeletonPrivate{
+struct SyslogAppender::SyslogAppenderPriv : public AppenderSkeleton::AppenderSkeletonPrivate{
     SyslogAppenderPriv() :
         AppenderSkeletonPrivate(),
         syslogFacility(LOG_USER),
diff --git a/src/main/include/log4cxx/private/writerappender_priv.h b/src/main/include/log4cxx/private/writerappender_priv.h
index 9ff3100..e748253 100644
--- a/src/main/include/log4cxx/private/writerappender_priv.h
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -16,6 +16,7 @@
  */
 
 #include <log4cxx/helpers/writer.h>
+#include <log4cxx/writerappender.h>
 #include <atomic>
 
 #include "appenderskeleton_priv.h"
@@ -24,9 +25,8 @@
 #define _LOG4CXX_WRITERAPPENDER_PRIV_H
 
 namespace log4cxx{
-namespace priv{
 
-struct WriterAppenderPriv : public priv::AppenderSkeletonPrivate {
+struct WriterAppender::WriterAppenderPriv : public AppenderSkeleton::AppenderSkeletonPrivate {
         WriterAppenderPriv() :
 	        AppenderSkeletonPrivate(),
 	        immediateFlush(true){}
@@ -72,6 +72,5 @@ struct WriterAppenderPriv : public priv::AppenderSkeletonPrivate {
 };
 
 }
-}
 
 #endif /* _LOG4CXX_WRITERAPPENDER_PRIV_H */
diff --git a/src/main/include/log4cxx/rolling/rollingfileappender.h b/src/main/include/log4cxx/rolling/rollingfileappender.h
index db95090..4cb4240 100644
--- a/src/main/include/log4cxx/rolling/rollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/rollingfileappender.h
@@ -82,6 +82,8 @@ class LOG4CXX_EXPORT RollingFileAppender : public FileAppender
 		BEGIN_LOG4CXX_CAST_MAP()
 		LOG4CXX_CAST_ENTRY(RollingFileAppender)
 		END_LOG4CXX_CAST_MAP()
+		protected:
+			struct RollingFileAppenderPriv;
 
 	public:
 		RollingFileAppender();
diff --git a/src/main/include/log4cxx/writerappender.h b/src/main/include/log4cxx/writerappender.h
index 8dc9e62..f8d68a4 100644
--- a/src/main/include/log4cxx/writerappender.h
+++ b/src/main/include/log4cxx/writerappender.h
@@ -36,15 +36,13 @@ namespace helpers
 class Transcoder;
 }
 
-namespace priv{
-struct WriterAppenderPriv;
-}
-
 /**
 WriterAppender appends log events to a standard output stream
 */
 class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 {
+protected:
+	struct WriterAppenderPriv;
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(WriterAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -59,7 +57,7 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 		WriterAppender(const LayoutPtr& layout,
 			log4cxx::helpers::WriterPtr& writer);
 		WriterAppender(const LayoutPtr& layout);
-		WriterAppender(std::unique_ptr<priv::WriterAppenderPriv> priv);
+		WriterAppender(std::unique_ptr<WriterAppenderPriv> priv);
 
 	public:
 		~WriterAppender();

[logging-log4cxx] 11/20: Made Logger ABI stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 34c5fe153030fc92a80733a3657e99ae8eb5b573
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 17:55:07 2021 -0400

    Made Logger ABI stable
---
 src/main/cpp/hierarchy.cpp                |  10 +-
 src/main/cpp/locale.cpp                   |   1 +
 src/main/cpp/logger.cpp                   | 174 ++++++++++++++++++++----------
 src/main/cpp/rootlogger.cpp               |   5 +-
 src/main/include/log4cxx/helpers/locale.h |   1 +
 src/main/include/log4cxx/logger.h         |  58 ++--------
 src/test/cpp/customlogger/xlogger.cpp     |   8 +-
 7 files changed, 137 insertions(+), 120 deletions(-)

diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index c70d39d..89c3a8d 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -355,7 +355,7 @@ void Hierarchy::updateParents(LoggerPtr logger)
 		if (it != loggers->end())
 		{
 			parentFound = true;
-			logger->parent = it->second;
+			logger->setParent( it->second );
 			break; // no need to update the ancestors of the closest ancestor
 		}
 		else
@@ -378,7 +378,7 @@ void Hierarchy::updateParents(LoggerPtr logger)
 	// If we could not find any existing parents, then link with root.
 	if (!parentFound)
 	{
-		logger->parent = root;
+		logger->setParent( root );
 	}
 }
 
@@ -393,10 +393,10 @@ void Hierarchy::updateChildren(ProvisionNode& pn, LoggerPtr logger)
 
 		// Unless this child already points to a correct (lower) parent,
 		// make cat.parent point to l.parent and l.parent to cat.
-		if (!StringHelper::startsWith(l->parent->name, logger->name))
+		if (!StringHelper::startsWith(l->getParent()->getName(), logger->getName()))
 		{
-			logger->parent = l->parent;
-			l->parent = logger;
+			logger->setParent( l->getParent() );
+			l->setParent( logger );
 		}
 	}
 }
diff --git a/src/main/cpp/locale.cpp b/src/main/cpp/locale.cpp
index 2de98c5..6e1393f 100644
--- a/src/main/cpp/locale.cpp
+++ b/src/main/cpp/locale.cpp
@@ -58,6 +58,7 @@ Locale::Locale(const LogString& language1, const LogString& country1,
 {
 }
 
+Locale::~Locale(){}
 
 const LogString& Locale::getLanguage() const
 {
diff --git a/src/main/cpp/logger.cpp b/src/main/cpp/logger.cpp
index 840d969..7120a67 100644
--- a/src/main/cpp/logger.cpp
+++ b/src/main/cpp/logger.cpp
@@ -39,14 +39,67 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+struct Logger::LoggerPrivate{
+	LoggerPrivate(Pool& p, const LogString& name1):
+		pool(&p),
+		name(name1),
+		level(),
+		parent(),
+		resourceBundle(),
+		repository(),
+		aai(new AppenderAttachableImpl(*pool)),
+		additive(true){}
+
+	/**
+	 *   Reference to memory pool.
+	 */
+	helpers::Pool* pool;
+
+	/**
+	The name of this logger.
+	*/
+	LogString name;
+
+	/**
+	The assigned level of this logger.  The
+	<code>level</code> variable need not be assigned a value in
+	which case it is inherited form the hierarchy.  */
+	LevelPtr level;
+
+	/**
+	The parent of this logger. All loggers have at least one
+	ancestor which is the root logger. */
+	LoggerPtr parent;
+
+	/** The resourceBundle for localized messages.
+
+	@see setResourceBundle, getResourceBundle
+	*/
+	helpers::ResourceBundlePtr resourceBundle;
+
+
+	// Loggers need to know what Hierarchy they are in
+	log4cxx::spi::LoggerRepositoryWeakPtr repository;
+
+	helpers::AppenderAttachableImplPtr aai;
+
+	/** Additivity is set to true by default, that is children inherit
+			the appenders of their ancestors by default. If this variable is
+			set to <code>false</code> then the appenders found in the
+			ancestors of this logger are not used. However, the children
+			of this logger will inherit its appenders, unless the children
+			have their additivity flag set to <code>false</code> too. See
+			the user manual for more details. */
+	bool additive;
+
+	mutable shared_mutex mutex;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(Logger)
 
 Logger::Logger(Pool& p, const LogString& name1)
-	: pool(&p), name(), level(), parent(), resourceBundle(),
-	  repository(), aai(new AppenderAttachableImpl(*pool))
+	: m_priv(std::make_unique<LoggerPrivate>(p, name1))
 {
-	name = name1;
-	additive = true;
 }
 
 Logger::~Logger()
@@ -57,8 +110,8 @@ void Logger::addAppender(const AppenderPtr newAppender)
 {
 	log4cxx::spi::LoggerRepositoryPtr rep;
 
-	aai->addAppender(newAppender);
-	rep = repository.lock();
+	m_priv->aai->addAppender(newAppender);
+	rep = m_priv->repository.lock();
 
 	if (rep)
 	{
@@ -68,19 +121,19 @@ void Logger::addAppender(const AppenderPtr newAppender)
 
 void Logger::reconfigure( const std::vector<AppenderPtr>& appenders, bool additive1 )
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
 
-	additive = additive1;
+	m_priv->additive = additive1;
 
-	aai->removeAllAppenders();
+	m_priv->aai->removeAllAppenders();
 
 	for ( std::vector<AppenderPtr>::const_iterator it = appenders.cbegin();
 		it != appenders.cend();
 		it++ )
 	{
-		aai->addAppender( *it );
+		m_priv->aai->addAppender( *it );
 
-		if (log4cxx::spi::LoggerRepositoryPtr rep = repository.lock())
+		if (log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock())
 		{
 			rep->fireAddAppenderEvent(this, it->get());
 		}
@@ -93,17 +146,17 @@ void Logger::callAppenders(const spi::LoggingEventPtr& event, Pool& p) const
 
 	for (const Logger* logger = this;
 		logger != 0;
-		logger = logger->parent.get())
+		logger = logger->m_priv->parent.get())
 	{
-		writes += logger->aai->appendLoopOnAppenders(event, p);
+		writes += logger->m_priv->aai->appendLoopOnAppenders(event, p);
 
-		if (!logger->additive)
+		if (!logger->m_priv->additive)
 		{
 			break;
 		}
 	}
 
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (writes == 0 && rep)
 	{
 		rep->emitNoAppenderWarning(const_cast<Logger*>(this));
@@ -126,7 +179,7 @@ void Logger::forcedLog(const LevelPtr& level1, const std::string& message,
 {
 	Pool p;
 	LOG4CXX_DECODE_CHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg, location));
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
 	callAppenders(event, p);
 }
 
@@ -135,7 +188,7 @@ void Logger::forcedLog(const LevelPtr& level1, const std::string& message) const
 {
 	Pool p;
 	LOG4CXX_DECODE_CHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg,
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
 			LocationInfo::getLocationUnavailable()));
 	callAppenders(event, p);
 }
@@ -144,54 +197,54 @@ void Logger::forcedLogLS(const LevelPtr& level1, const LogString& message,
 	const LocationInfo& location) const
 {
 	Pool p;
-	LoggingEventPtr event(new LoggingEvent(name, level1, message, location));
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, message, location));
 	callAppenders(event, p);
 }
 
 
 bool Logger::getAdditivity() const
 {
-	return additive;
+	return m_priv->additive;
 }
 
 AppenderList Logger::getAllAppenders() const
 {
-	return aai->getAllAppenders();
+	return m_priv->aai->getAllAppenders();
 }
 
 AppenderPtr Logger::getAppender(const LogString& name1) const
 {
-	return aai->getAppender(name1);
+	return m_priv->aai->getAppender(name1);
 }
 
 const LevelPtr Logger::getEffectiveLevel() const
 {
-	for (const Logger* l = this; l != 0; l = l->parent.get())
+	for (const Logger* l = this; l != 0; l = l->m_priv->parent.get())
 	{
-		if (l->level != 0)
+		if (l->m_priv->level != 0)
 		{
-			return l->level;
+			return l->m_priv->level;
 		}
 	}
 
 	throw NullPointerException(LOG4CXX_STR("No level specified for logger or ancestors."));
 #if LOG4CXX_RETURN_AFTER_THROW
-	return this->level;
+	return m_priv->level;
 #endif
 }
 
 LoggerRepositoryWeakPtr Logger::getLoggerRepository() const
 {
-	return repository;
+	return m_priv->repository;
 }
 
 ResourceBundlePtr Logger::getResourceBundle() const
 {
-	for (const Logger* l = this; l != 0; l = l->parent.get())
+	for (const Logger* l = this; l != 0; l = l->m_priv->parent.get())
 	{
-		if (l->resourceBundle != 0)
+		if (l->m_priv->resourceBundle != 0)
 		{
-			return l->resourceBundle;
+			return l->m_priv->resourceBundle;
 		}
 	}
 
@@ -229,23 +282,22 @@ LogString Logger::getResourceBundleString(const LogString& key) const
 
 LoggerPtr Logger::getParent() const
 {
-	return parent;
+	return m_priv->parent;
 }
 
 LevelPtr Logger::getLevel() const
 {
-	return level;
+	return m_priv->level;
 }
 
-
 bool Logger::isAttached(const AppenderPtr appender) const
 {
-	return aai->isAttached(appender);
+	return m_priv->aai->isAttached(appender);
 }
 
 bool Logger::isTraceEnabled() const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(Level::TRACE_INT))
 	{
 		return false;
@@ -256,7 +308,7 @@ bool Logger::isTraceEnabled() const
 
 bool Logger::isDebugEnabled() const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(Level::DEBUG_INT))
 	{
 		return false;
@@ -267,7 +319,7 @@ bool Logger::isDebugEnabled() const
 
 bool Logger::isEnabledFor(const LevelPtr& level1) const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(level1->toInt()))
 	{
 		return false;
@@ -279,7 +331,7 @@ bool Logger::isEnabledFor(const LevelPtr& level1) const
 
 bool Logger::isInfoEnabled() const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(Level::INFO_INT))
 	{
 		return false;
@@ -290,7 +342,7 @@ bool Logger::isInfoEnabled() const
 
 bool Logger::isErrorEnabled() const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(Level::ERROR_INT))
 	{
 		return false;
@@ -301,7 +353,7 @@ bool Logger::isErrorEnabled() const
 
 bool Logger::isWarnEnabled() const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(Level::WARN_INT))
 	{
 		return false;
@@ -312,7 +364,7 @@ bool Logger::isWarnEnabled() const
 
 bool Logger::isFatalEnabled() const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(Level::FATAL_INT))
 	{
 		return false;
@@ -349,7 +401,7 @@ bool Logger::isFatalEnabled() const
 void Logger::l7dlog(const LevelPtr& level1, const LogString& key,
 	const LocationInfo& location, const std::vector<LogString>& params) const
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = m_priv->repository.lock();
 	if (!rep || rep->isDisabled(level1->toInt()))
 	{
 		return;
@@ -427,35 +479,42 @@ void Logger::l7dlog(const LevelPtr& level1, const std::string& key,
 
 void Logger::removeAllAppenders()
 {
-	aai->removeAllAppenders();
+	m_priv->aai->removeAllAppenders();
 }
 
 void Logger::removeAppender(const AppenderPtr appender)
 {
-	aai->removeAppender(appender);
+	m_priv->aai->removeAppender(appender);
 }
 
 void Logger::removeAppender(const LogString& name1)
 {
-	aai->removeAppender(name1);
+	m_priv->aai->removeAppender(name1);
 }
 
 void Logger::setAdditivity(bool additive1)
 {
-	this->additive = additive1;
+	m_priv->additive = additive1;
 }
 
 void Logger::setHierarchy(spi::LoggerRepositoryWeakPtr repository1)
 {
-	this->repository = repository1;
+	m_priv->repository = repository1;
+}
+
+void Logger::setParent(LoggerPtr parentLogger){
+	m_priv->parent = parentLogger;
 }
 
 void Logger::setLevel(const LevelPtr level1)
 {
-	this->level = level1;
+	m_priv->level = level1;
 }
 
-
+const LogString& Logger::getName() const
+{
+	return m_priv->name;
+}
 
 LoggerPtr Logger::getLogger(const std::string& name)
 {
@@ -468,7 +527,10 @@ LoggerPtr Logger::getLogger(const char* const name)
 	return LogManager::getLogger(name);
 }
 
-
+void Logger::setResourceBundle(const helpers::ResourceBundlePtr& bundle)
+{
+	m_priv->resourceBundle = bundle;
+}
 
 LoggerPtr Logger::getRootLogger()
 {
@@ -483,7 +545,7 @@ LoggerPtr Logger::getLoggerLS(const LogString& name,
 
 void Logger::getName(std::string& rv) const
 {
-	Transcoder::encode(name, rv);
+	Transcoder::encode(m_priv->name, rv);
 }
 
 
@@ -626,7 +688,7 @@ void Logger::forcedLog(const LevelPtr& level1, const std::wstring& message,
 {
 	Pool p;
 	LOG4CXX_DECODE_WCHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg, location));
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
 	callAppenders(event, p);
 }
 
@@ -634,14 +696,14 @@ void Logger::forcedLog(const LevelPtr& level1, const std::wstring& message) cons
 {
 	Pool p;
 	LOG4CXX_DECODE_WCHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg,
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
 			LocationInfo::getLocationUnavailable()));
 	callAppenders(event, p);
 }
 
 void Logger::getName(std::wstring& rv) const
 {
-	Transcoder::encode(name, rv);
+	Transcoder::encode(m_priv->name, rv);
 }
 
 LoggerPtr Logger::getLogger(const std::wstring& name)
@@ -777,7 +839,7 @@ void Logger::forcedLog(const LevelPtr& level1, const std::basic_string<UniChar>&
 {
 	Pool p;
 	LOG4CXX_DECODE_UNICHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg, location));
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg, location));
 	callAppenders(event, p);
 }
 
@@ -785,7 +847,7 @@ void Logger::forcedLog(const LevelPtr& level1, const std::basic_string<UniChar>&
 {
 	Pool p;
 	LOG4CXX_DECODE_UNICHAR(msg, message);
-	LoggingEventPtr event(new LoggingEvent(name, level1, msg,
+	LoggingEventPtr event(new LoggingEvent(m_priv->name, level1, msg,
 			LocationInfo::getLocationUnavailable()));
 	callAppenders(event, p);
 }
@@ -794,7 +856,7 @@ void Logger::forcedLog(const LevelPtr& level1, const std::basic_string<UniChar>&
 #if LOG4CXX_UNICHAR_API
 void Logger::getName(std::basic_string<UniChar>& rv) const
 {
-	Transcoder::encode(name, rv);
+	Transcoder::encode(m_priv->name, rv);
 }
 
 LoggerPtr Logger::getLogger(const std::basic_string<UniChar>& name)
diff --git a/src/main/cpp/rootlogger.cpp b/src/main/cpp/rootlogger.cpp
index 9f3357a..c51c4ac 100644
--- a/src/main/cpp/rootlogger.cpp
+++ b/src/main/cpp/rootlogger.cpp
@@ -32,7 +32,7 @@ RootLogger::RootLogger(Pool& pool, const LevelPtr level1) :
 
 const LevelPtr RootLogger::getEffectiveLevel() const
 {
-	return level;
+	return getLevel();
 }
 
 void RootLogger::setLevel(const LevelPtr level1)
@@ -43,8 +43,7 @@ void RootLogger::setLevel(const LevelPtr level1)
 	}
 	else
 	{
-
-		this->level = level1;
+		setLevel(level1);
 	}
 }
 
diff --git a/src/main/include/log4cxx/helpers/locale.h b/src/main/include/log4cxx/helpers/locale.h
index 46adbd1..9dfd55d 100644
--- a/src/main/include/log4cxx/helpers/locale.h
+++ b/src/main/include/log4cxx/helpers/locale.h
@@ -37,6 +37,7 @@ class LOG4CXX_EXPORT Locale
 		Locale(const LogString& language, const LogString& country);
 		Locale(const LogString& language, const LogString& country,
 			const LogString& variant);
+		~Locale();
 
 		const LogString& getLanguage() const;
 		const LogString& getCountry() const;
diff --git a/src/main/include/log4cxx/logger.h b/src/main/include/log4cxx/logger.h
index 796256b..b81c8fc 100644
--- a/src/main/include/log4cxx/logger.h
+++ b/src/main/include/log4cxx/logger.h
@@ -72,48 +72,8 @@ class LOG4CXX_EXPORT Logger :
 		END_LOG4CXX_CAST_MAP()
 
 	private:
-		/**
-		 *   Reference to memory pool.
-		 */
-		helpers::Pool* pool;
-
-	protected:
-		/**
-		The name of this logger.
-		*/
-		LogString name;
-
-		/**
-		The assigned level of this logger.  The
-		<code>level</code> variable need not be assigned a value in
-		which case it is inherited form the hierarchy.  */
-		LevelPtr level;
-
-		/**
-		The parent of this logger. All loggers have at least one
-		ancestor which is the root logger. */
-		LoggerPtr parent;
-
-		/** The resourceBundle for localized messages.
-
-		@see setResourceBundle, getResourceBundle
-		*/
-		helpers::ResourceBundlePtr resourceBundle;
-
-
-		// Loggers need to know what Hierarchy they are in
-		log4cxx::spi::LoggerRepositoryWeakPtr repository;
-
-		helpers::AppenderAttachableImplPtr aai;
-
-		/** Additivity is set to true by default, that is children inherit
-		        the appenders of their ancestors by default. If this variable is
-		        set to <code>false</code> then the appenders found in the
-		        ancestors of this logger are not used. However, the children
-		        of this logger will inherit its appenders, unless the children
-		        have their additivity flag set to <code>false</code> too. See
-		        the user manual for more details. */
-		bool additive;
+		struct LoggerPrivate;
+		std::unique_ptr<LoggerPrivate> m_priv;
 
 	protected:
 		friend class DefaultLoggerFactory;
@@ -630,10 +590,8 @@ class LOG4CXX_EXPORT Logger :
 		* Get the logger name.
 		* @return logger name as LogString.
 		*/
-		const LogString& getName() const
-		{
-			return name;
-		}
+		const LogString& getName() const;
+
 		/**
 		* Get logger name in current encoding.
 		* @param name buffer to which name is appended.
@@ -1465,6 +1423,7 @@ class LOG4CXX_EXPORT Logger :
 		/**
 		Only the Hierarchy class can set the hierarchy of a logger.*/
 		void setHierarchy(spi::LoggerRepositoryWeakPtr repository);
+		void setParent(LoggerPtr parentLogger);
 
 	public:
 		/**
@@ -1478,10 +1437,7 @@ class LOG4CXX_EXPORT Logger :
 		/**
 		Set the resource bundle to be used with localized logging methods.
 		*/
-		inline void setResourceBundle(const helpers::ResourceBundlePtr& bundle)
-		{
-			resourceBundle = bundle;
-		}
+		void setResourceBundle(const helpers::ResourceBundlePtr& bundle);
 
 #if LOG4CXX_WCHAR_T_API
 		/**
@@ -1726,8 +1682,6 @@ class LOG4CXX_EXPORT Logger :
 		//  prevent copy and assignment
 		Logger(const Logger&);
 		Logger& operator=(const Logger&);
-		mutable shared_mutex mutex;
-		friend class log4cxx::helpers::synchronized;
 };
 LOG4CXX_LIST_DEF(LoggerList, LoggerPtr);
 
diff --git a/src/test/cpp/customlogger/xlogger.cpp b/src/test/cpp/customlogger/xlogger.cpp
index 7efb8d3..fa7102d 100644
--- a/src/test/cpp/customlogger/xlogger.cpp
+++ b/src/test/cpp/customlogger/xlogger.cpp
@@ -32,7 +32,7 @@ XFactoryPtr XLogger::factory = XFactoryPtr(new XFactory());
 
 void XLogger::lethal(const LogString& message, const LocationInfo& locationInfo)
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = getLoggerRepository().lock();
 	if (rep->isDisabled(XLevel::LETHAL_INT))
 	{
 		return;
@@ -46,7 +46,7 @@ void XLogger::lethal(const LogString& message, const LocationInfo& locationInfo)
 
 void XLogger::lethal(const LogString& message)
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = getLoggerRepository().lock();
 	if (rep->isDisabled(XLevel::LETHAL_INT))
 	{
 		return;
@@ -70,7 +70,7 @@ LoggerPtr XLogger::getLogger(const helpers::Class& clazz)
 
 void XLogger::trace(const LogString& message, const LocationInfo& locationInfo)
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = getLoggerRepository().lock();
 	if (rep->isDisabled(XLevel::TRACE_INT))
 	{
 		return;
@@ -84,7 +84,7 @@ void XLogger::trace(const LogString& message, const LocationInfo& locationInfo)
 
 void XLogger::trace(const LogString& message)
 {
-	log4cxx::spi::LoggerRepositoryPtr rep = repository.lock();
+	log4cxx::spi::LoggerRepositoryPtr rep = getLoggerRepository().lock();
 	if (rep->isDisabled(XLevel::TRACE_INT))
 	{
 		return;

[logging-log4cxx] 06/20: Converted patternconverter hierarchy to be ABI stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7bd9e15951d09d0182bc3192db85076fceb0e003
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Wed Nov 3 22:07:05 2021 -0400

    Converted patternconverter hierarchy to be ABI stable
---
 src/main/cpp/datepatternconverter.cpp              | 23 +++++++--
 src/main/cpp/literalpatternconverter.cpp           | 23 +++++++--
 src/main/cpp/loggingeventpatternconverter.cpp      |  6 +++
 src/main/cpp/namepatternconverter.cpp              | 20 ++++++--
 src/main/cpp/patternconverter.cpp                  | 15 ++++--
 src/main/cpp/propertiespatternconverter.cpp        | 22 +++++++--
 .../cpp/throwableinformationpatternconverter.cpp   | 21 +++++++--
 .../include/log4cxx/pattern/datepatternconverter.h |  6 +--
 .../log4cxx/pattern/integerpatternconverter.h      |  1 -
 .../log4cxx/pattern/literalpatternconverter.h      |  5 +-
 .../log4cxx/pattern/loggingeventpatternconverter.h |  2 +
 .../include/log4cxx/pattern/namepatternconverter.h |  5 +-
 .../include/log4cxx/pattern/patternconverter.h     | 20 ++++----
 .../log4cxx/pattern/propertiespatternconverter.h   |  5 +-
 .../pattern/throwableinformationpatternconverter.h |  5 +-
 .../log4cxx/private/patternconverter_priv.h}       | 54 ++++++++++------------
 16 files changed, 148 insertions(+), 85 deletions(-)

diff --git a/src/main/cpp/datepatternconverter.cpp b/src/main/cpp/datepatternconverter.cpp
index a0c7fb7..282db76 100644
--- a/src/main/cpp/datepatternconverter.cpp
+++ b/src/main/cpp/datepatternconverter.cpp
@@ -31,21 +31,36 @@
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/loglog.h>
 #include <log4cxx/helpers/date.h>
+#include <log4cxx/private/patternconverter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::pattern;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+struct DatePatternConverter::DatePatternConverterPrivate : public PatternConverterPrivate{
+	DatePatternConverterPrivate( const LogString& name, const LogString& style, DateFormatPtr _df ):
+		PatternConverterPrivate(name,style),
+		df(_df){}
+	/**
+	 * Date format.
+	 */
+	log4cxx::helpers::DateFormatPtr df;
+};
+
+#define priv static_cast<DatePatternConverterPrivate*>(m_priv.get())
+
 IMPLEMENT_LOG4CXX_OBJECT(DatePatternConverter)
 
 DatePatternConverter::DatePatternConverter(
 	const std::vector<LogString>& options) :
-	LoggingEventPatternConverter(LOG4CXX_STR("Class Name"),
-		LOG4CXX_STR("class name")), df(getDateFormat(options))
+	LoggingEventPatternConverter (std::make_unique<DatePatternConverterPrivate>(LOG4CXX_STR("Class Name"),
+		LOG4CXX_STR("class name"), getDateFormat(options)))
 {
 }
 
+DatePatternConverter::~DatePatternConverter(){}
+
 DateFormatPtr DatePatternConverter::getDateFormat(const OptionsList& options)
 {
 	DateFormatPtr df;
@@ -129,7 +144,7 @@ void DatePatternConverter::format(
 	LogString& toAppendTo,
 	Pool& p) const
 {
-	df->format(toAppendTo, event->getTimeStamp(), p);
+	priv->df->format(toAppendTo, event->getTimeStamp(), p);
 }
 
 /**
@@ -167,5 +182,5 @@ void DatePatternConverter::format(
 	LogString& toAppendTo,
 	Pool& p) const
 {
-	df->format(toAppendTo, date->getTime(), p);
+	priv->df->format(toAppendTo, date->getTime(), p);
 }
diff --git a/src/main/cpp/literalpatternconverter.cpp b/src/main/cpp/literalpatternconverter.cpp
index c526b72..afb7ff5 100644
--- a/src/main/cpp/literalpatternconverter.cpp
+++ b/src/main/cpp/literalpatternconverter.cpp
@@ -22,18 +22,31 @@
 #include <log4cxx/pattern/literalpatternconverter.h>
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/spi/location/locationinfo.h>
-
+#include <log4cxx/private/patternconverter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::pattern;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<LiteralPatternConverterPrivate*>(m_priv.get())
+
+struct LiteralPatternConverter::LiteralPatternConverterPrivate : public PatternConverterPrivate {
+	LiteralPatternConverterPrivate( const LogString& name, const LogString& style, const LogString& literal1 ) :
+		PatternConverterPrivate( name, style ),
+		literal(literal1){}
+
+	/**
+	 * String literal.
+	 */
+	const LogString literal;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(LiteralPatternConverter)
 
 LiteralPatternConverter::LiteralPatternConverter(const LogString& literal1) :
-	LoggingEventPatternConverter(LOG4CXX_STR("Literal"), LOG4CXX_STR("literal")),
-	literal(literal1)
+	LoggingEventPatternConverter(std::make_unique<LiteralPatternConverterPrivate>
+								 (LOG4CXX_STR("Literal"), LOG4CXX_STR("literal"),literal1))
 {
 }
 
@@ -55,7 +68,7 @@ void LiteralPatternConverter::format(
 	LogString& toAppendTo,
 	Pool& /* p */) const
 {
-	toAppendTo.append(literal);
+	toAppendTo.append(priv->literal);
 }
 
 void LiteralPatternConverter::format(
@@ -63,6 +76,6 @@ void LiteralPatternConverter::format(
 	LogString& toAppendTo,
 	Pool& /* p */)  const
 {
-	toAppendTo.append(literal);
+	toAppendTo.append(priv->literal);
 }
 
diff --git a/src/main/cpp/loggingeventpatternconverter.cpp b/src/main/cpp/loggingeventpatternconverter.cpp
index 512fa43..dd23340 100644
--- a/src/main/cpp/loggingeventpatternconverter.cpp
+++ b/src/main/cpp/loggingeventpatternconverter.cpp
@@ -21,6 +21,7 @@
 #include <log4cxx/logstring.h>
 #include <log4cxx/pattern/loggingeventpatternconverter.h>
 #include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/private/patternconverter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::pattern;
@@ -36,6 +37,11 @@ LoggingEventPatternConverter::LoggingEventPatternConverter(
 {
 }
 
+LoggingEventPatternConverter::LoggingEventPatternConverter(std::unique_ptr<PatternConverterPrivate> priv) :
+	PatternConverter (std::move(priv)){
+
+}
+
 void LoggingEventPatternConverter::format(const ObjectPtr& obj,
 	LogString& output,
 	log4cxx::helpers::Pool& p) const
diff --git a/src/main/cpp/namepatternconverter.cpp b/src/main/cpp/namepatternconverter.cpp
index 08ef1f2..f5c6d0e 100644
--- a/src/main/cpp/namepatternconverter.cpp
+++ b/src/main/cpp/namepatternconverter.cpp
@@ -23,19 +23,33 @@
 #include <log4cxx/pattern/namepatternconverter.h>
 #include <log4cxx/pattern/nameabbreviator.h>
 #include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/private/patternconverter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::pattern;
 using namespace log4cxx::spi;
 
+#define priv static_cast<NamePatternConverterPrivate*>(m_priv.get())
+
+struct NamePatternConverter::NamePatternConverterPrivate : public PatternConverterPrivate {
+	NamePatternConverterPrivate( const LogString& name, const LogString& style, const NameAbbreviatorPtr abbrev ) :
+		PatternConverterPrivate( name, style ),
+	  abbreviator(abbrev){}
+
+	/**
+	 * Abbreviator.
+	 */
+	const NameAbbreviatorPtr abbreviator;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(NamePatternConverter)
 
 NamePatternConverter::NamePatternConverter(
 	const LogString& name1,
 	const LogString& style1,
 	const std::vector<LogString>& options) :
-	LoggingEventPatternConverter(name1, style1),
-	abbreviator(getAbbreviator(options))
+	LoggingEventPatternConverter(std::make_unique<NamePatternConverterPrivate>(name1, style1,
+	getAbbreviator(options)))
 {
 }
 
@@ -57,5 +71,5 @@ NameAbbreviatorPtr NamePatternConverter::getAbbreviator(
  */
 void NamePatternConverter::abbreviate(int nameStart, LogString& buf) const
 {
-	abbreviator->abbreviate(nameStart, buf);
+	priv->abbreviator->abbreviate(nameStart, buf);
 }
diff --git a/src/main/cpp/patternconverter.cpp b/src/main/cpp/patternconverter.cpp
index d0add75..304ef85 100644
--- a/src/main/cpp/patternconverter.cpp
+++ b/src/main/cpp/patternconverter.cpp
@@ -21,6 +21,7 @@
 #include <log4cxx/logstring.h>
 #include <log4cxx/pattern/patternconverter.h>
 #include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/private/patternconverter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::pattern;
@@ -28,23 +29,29 @@ using namespace log4cxx::pattern;
 IMPLEMENT_LOG4CXX_OBJECT(PatternConverter)
 
 PatternConverter::PatternConverter(
-	const LogString& name1, const LogString& style1) :
-	name(name1), style(style1)
+	std::unique_ptr<PatternConverterPrivate> priv) :
+	m_priv(std::move(priv))
 {
 }
 
+PatternConverter::PatternConverter(const LogString& name,
+				 const LogString& style) :
+	m_priv(std::make_unique<PatternConverterPrivate>(name,style)){
+
+}
+
 PatternConverter::~PatternConverter()
 {
 }
 
 LogString PatternConverter::getName() const
 {
-	return name;
+	return m_priv->name;
 }
 
 LogString PatternConverter::getStyleClass(const log4cxx::helpers::ObjectPtr& /* e */) const
 {
-	return style;
+	return m_priv->style;
 }
 
 void PatternConverter::append(LogString& toAppendTo, const std::string& src)
diff --git a/src/main/cpp/propertiespatternconverter.cpp b/src/main/cpp/propertiespatternconverter.cpp
index b307bc7..412548b 100644
--- a/src/main/cpp/propertiespatternconverter.cpp
+++ b/src/main/cpp/propertiespatternconverter.cpp
@@ -23,6 +23,7 @@
 #include <log4cxx/pattern/propertiespatternconverter.h>
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/spi/location/locationinfo.h>
+#include <log4cxx/private/patternconverter_priv.h>
 
 #include <iterator>
 
@@ -31,12 +32,25 @@ using namespace log4cxx::pattern;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<PropertiesPatternConverterPrivate*>(m_priv.get())
+
+struct PropertiesPatternConverter::PropertiesPatternConverterPrivate : public PatternConverterPrivate {
+	PropertiesPatternConverterPrivate( const LogString& name, const LogString& style, const LogString& propertyName ) :
+		PatternConverterPrivate( name, style ),
+		option(propertyName){}
+
+	/**
+	 * Name of property to output.
+	 */
+	const LogString option;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(PropertiesPatternConverter)
 
 PropertiesPatternConverter::PropertiesPatternConverter(const LogString& name1,
 	const LogString& propertyName) :
-	LoggingEventPatternConverter(name1, LOG4CXX_STR("property")),
-	option(propertyName)
+	LoggingEventPatternConverter(
+		std::make_unique<PropertiesPatternConverterPrivate>(name1, LOG4CXX_STR("property"),propertyName))
 {
 }
 
@@ -63,7 +77,7 @@ void PropertiesPatternConverter::format(
 	LogString& toAppendTo,
 	Pool& /* p */) const
 {
-	if (option.length() == 0)
+	if (priv->option.length() == 0)
 	{
 		toAppendTo.append(1, (logchar) 0x7B /* '{' */);
 
@@ -85,7 +99,7 @@ void PropertiesPatternConverter::format(
 	}
 	else
 	{
-		event->getMDC(option, toAppendTo);
+		event->getMDC(priv->option, toAppendTo);
 	}
 }
 
diff --git a/src/main/cpp/throwableinformationpatternconverter.cpp b/src/main/cpp/throwableinformationpatternconverter.cpp
index 5f1f68f..4b80bb7 100644
--- a/src/main/cpp/throwableinformationpatternconverter.cpp
+++ b/src/main/cpp/throwableinformationpatternconverter.cpp
@@ -25,18 +25,33 @@
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/spi/location/locationinfo.h>
 #include <log4cxx/helpers/stringhelper.h>
+#include <log4cxx/private/patternconverter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::pattern;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+struct ThrowableInformationPatternConverter::ThrowableInformationPatternConverterPrivate :
+		public PatternConverterPrivate {
+	ThrowableInformationPatternConverterPrivate( const LogString& name, const LogString& style, bool shortReport ) :
+		PatternConverterPrivate( name, style ),
+		shortReport(shortReport){}
+
+	/**
+	 * If "short", only first line of throwable report will be formatted.
+	 */
+	const bool shortReport;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(ThrowableInformationPatternConverter)
 
 ThrowableInformationPatternConverter::ThrowableInformationPatternConverter(bool shortReport1) :
-	LoggingEventPatternConverter(LOG4CXX_STR("Throwable"),
-		LOG4CXX_STR("throwable")),
-	shortReport(shortReport1)
+	LoggingEventPatternConverter(
+		std::make_unique<ThrowableInformationPatternConverterPrivate>(
+			LOG4CXX_STR("Throwable"),
+		LOG4CXX_STR("throwable"),
+	shortReport1))
 {
 }
 
diff --git a/src/main/include/log4cxx/pattern/datepatternconverter.h b/src/main/include/log4cxx/pattern/datepatternconverter.h
index cffc698..3e123ce 100644
--- a/src/main/include/log4cxx/pattern/datepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/datepatternconverter.h
@@ -37,10 +37,7 @@ namespace pattern
  */
 class LOG4CXX_EXPORT DatePatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * Date format.
-		 */
-		log4cxx::helpers::DateFormatPtr df;
+		struct DatePatternConverterPrivate;
 
 		/**
 		 * Private constructor.
@@ -62,6 +59,7 @@ class LOG4CXX_EXPORT DatePatternConverter : public LoggingEventPatternConverter
 		LOG4CXX_CAST_ENTRY_CHAIN(LoggingEventPatternConverter)
 		END_LOG4CXX_CAST_MAP()
 
+		~DatePatternConverter();
 
 		static PatternConverterPtr newInstance(
 			const std::vector<LogString>& options);
diff --git a/src/main/include/log4cxx/pattern/integerpatternconverter.h b/src/main/include/log4cxx/pattern/integerpatternconverter.h
index e86fcc5..8149bcf 100644
--- a/src/main/include/log4cxx/pattern/integerpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/integerpatternconverter.h
@@ -34,7 +34,6 @@ namespace pattern
  */
 class LOG4CXX_EXPORT IntegerPatternConverter : public PatternConverter
 {
-
 		/**
 		 * Private constructor.
 		 */
diff --git a/src/main/include/log4cxx/pattern/literalpatternconverter.h b/src/main/include/log4cxx/pattern/literalpatternconverter.h
index 4c5e435..aa2f35c 100644
--- a/src/main/include/log4cxx/pattern/literalpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/literalpatternconverter.h
@@ -39,10 +39,7 @@ namespace pattern
  */
 class LOG4CXX_EXPORT LiteralPatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * String literal.
-		 */
-		const LogString literal;
+	struct LiteralPatternConverterPrivate;
 
 		/**
 		 * Create a new instance.
diff --git a/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h b/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h
index ace6542..667c78d 100644
--- a/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/loggingeventpatternconverter.h
@@ -45,6 +45,8 @@ class LOG4CXX_EXPORT LoggingEventPatternConverter : public PatternConverter
 		LoggingEventPatternConverter(
 			const LogString& name, const LogString& style);
 
+		LoggingEventPatternConverter(std::unique_ptr<PatternConverterPrivate> priv);
+
 	public:
 		DECLARE_LOG4CXX_PATTERN(LoggingEventPatternConverter)
 		BEGIN_LOG4CXX_CAST_MAP()
diff --git a/src/main/include/log4cxx/pattern/namepatternconverter.h b/src/main/include/log4cxx/pattern/namepatternconverter.h
index fbc49fc..b38381e 100644
--- a/src/main/include/log4cxx/pattern/namepatternconverter.h
+++ b/src/main/include/log4cxx/pattern/namepatternconverter.h
@@ -35,10 +35,7 @@ namespace pattern
  */
 class LOG4CXX_EXPORT NamePatternConverter : public LoggingEventPatternConverter
 {
-		/**
-		 * Abbreviator.
-		 */
-		const NameAbbreviatorPtr abbreviator;
+	struct NamePatternConverterPrivate;
 
 	public:
 		DECLARE_LOG4CXX_PATTERN(NamePatternConverter)
diff --git a/src/main/include/log4cxx/pattern/patternconverter.h b/src/main/include/log4cxx/pattern/patternconverter.h
index bebca41..a5e17b7 100644
--- a/src/main/include/log4cxx/pattern/patternconverter.h
+++ b/src/main/include/log4cxx/pattern/patternconverter.h
@@ -49,26 +49,24 @@ typedef std::vector<LogString> OptionsList;
  */
 class LOG4CXX_EXPORT PatternConverter : public virtual log4cxx::helpers::Object
 {
+	protected:
+		struct PatternConverterPrivate;
+		std::unique_ptr<PatternConverterPrivate> m_priv;
 
 		/**
-		 * Converter name.
-		 */
-		const LogString name;
-
-		/**
-		 * Converter style name.
+		 * Use this constructor when you have a subclass that has its own private data
+		 * @param priv
 		 */
-		const LogString style;
-
+		PatternConverter(std::unique_ptr<PatternConverterPrivate> priv);
 
-	protected:
 		/**
-		 * Create a new pattern converter.
+		 * Create a new pattern converter.  Use this constructor when you have a subclass
+		 * that does not have any private data.
 		 * @param name name for pattern converter.
 		 * @param style CSS style for formatted output.
 		 */
 		PatternConverter(const LogString& name,
-			const LogString& style);
+						 const LogString& style);
 
 		virtual ~PatternConverter();
 
diff --git a/src/main/include/log4cxx/pattern/propertiespatternconverter.h b/src/main/include/log4cxx/pattern/propertiespatternconverter.h
index 26bf915..2416f28 100644
--- a/src/main/include/log4cxx/pattern/propertiespatternconverter.h
+++ b/src/main/include/log4cxx/pattern/propertiespatternconverter.h
@@ -39,10 +39,7 @@ namespace pattern
 class LOG4CXX_EXPORT PropertiesPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * Name of property to output.
-		 */
-		const LogString option;
+	struct PropertiesPatternConverterPrivate;
 
 		/**
 		 * Private constructor.
diff --git a/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h b/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
index 8599382..f8ad5ad 100644
--- a/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
+++ b/src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h
@@ -37,10 +37,7 @@ namespace pattern
 class LOG4CXX_EXPORT ThrowableInformationPatternConverter
 	: public LoggingEventPatternConverter
 {
-		/**
-		 * If "short", only first line of throwable report will be formatted.
-		 */
-		const bool shortReport;
+	struct ThrowableInformationPatternConverterPrivate;
 
 		/**
 		 * Private constructor.
diff --git a/src/main/cpp/patternconverter.cpp b/src/main/include/log4cxx/private/patternconverter_priv.h
similarity index 54%
copy from src/main/cpp/patternconverter.cpp
copy to src/main/include/log4cxx/private/patternconverter_priv.h
index d0add75..b01197b 100644
--- a/src/main/cpp/patternconverter.cpp
+++ b/src/main/include/log4cxx/private/patternconverter_priv.h
@@ -14,42 +14,36 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#if defined(_MSC_VER)
-	#pragma warning ( disable: 4231 4251 4275 4786 )
-#endif
-
-#include <log4cxx/logstring.h>
+#ifndef LOG4CXX_PATTERNCONVERTER_PRIVATE_H
+#define LOG4CXX_PATTERNCONVERTER_PRIVATE_H
 #include <log4cxx/pattern/patternconverter.h>
-#include <log4cxx/helpers/transcoder.h>
-
-using namespace log4cxx;
-using namespace log4cxx::pattern;
-
-IMPLEMENT_LOG4CXX_OBJECT(PatternConverter)
 
-PatternConverter::PatternConverter(
-	const LogString& name1, const LogString& style1) :
-	name(name1), style(style1)
+namespace log4cxx
 {
-}
-
-PatternConverter::~PatternConverter()
+namespace pattern
 {
-}
 
-LogString PatternConverter::getName() const
-{
-	return name;
-}
+/**
+ * Create a new pattern converter.
+ * @param name name for pattern converter.
+ * @param style CSS style for formatted output.
+ */
+struct PatternConverter::PatternConverterPrivate {
+    PatternConverterPrivate( const LogString& _name, const LogString& _style ) :
+        name(_name),
+        style(_style){}
+
+    /**
+     * Converter name.
+     */
+    const LogString name;
+    /**
+     * Converter style name.
+     */
+    const LogString style;
+};
 
-LogString PatternConverter::getStyleClass(const log4cxx::helpers::ObjectPtr& /* e */) const
-{
-	return style;
 }
-
-void PatternConverter::append(LogString& toAppendTo, const std::string& src)
-{
-	LOG4CXX_DECODE_CHAR(decoded, src);
-	toAppendTo.append(decoded);
 }
 
+#endif /* LOG4CXX_PATTERNCONVERTER_PRIVATE_H */

[logging-log4cxx] 19/20: Updated ABI dump

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 494955fa7fe25244daa100dcc42853378fb35e9d
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 20:31:37 2021 -0400

    Updated ABI dump
---
 src/main/abi-symbols/abi.dump | 177728 +++++++++++++++++++++------------------
 1 file changed, 96289 insertions(+), 81439 deletions(-)

diff --git a/src/main/abi-symbols/abi.dump b/src/main/abi-symbols/abi.dump
index a095095..c7c92ef 100644
--- a/src/main/abi-symbols/abi.dump
+++ b/src/main/abi-symbols/abi.dump
@@ -2,10 +2,11 @@ $VAR1 = {
           'ABI_DUMPER_VERSION' => '1.2',
           'ABI_DUMP_VERSION' => '3.5',
           'Arch' => 'x86_64',
-          'Compiler' => 'GNU C++17 8.3.0 -mtune=generic -march=x86-64 -g -Og -std=gnu++17 -fPIC',
+          'Compiler' => 'GNU C++17 8.3.0 -mtune=generic -march=x86-64 -g -std=c++17 -fPIC',
           'Headers' => {
                          'absolutetimedateformat.h' => 1,
                          'action.h' => 1,
+                         'action_priv.h' => 1,
                          'aligned_buffer.h' => 1,
                          'alloc_traits.h' => 1,
                          'allocator.h' => 1,
@@ -14,6 +15,7 @@ $VAR1 = {
                          'appenderattachable.h' => 1,
                          'appenderattachableimpl.h' => 1,
                          'appenderskeleton.h' => 1,
+                         'appenderskeleton_priv.h' => 1,
                          'apr.h' => 1,
                          'apr_file_io.h' => 1,
                          'apr_mmap.h' => 1,
@@ -47,12 +49,10 @@ $VAR1 = {
                          'configurator.h' => 1,
                          'consoleappender.h' => 1,
                          'cyclicbuffer.h' => 1,
-                         'dailyrollingfileappender.h' => 1,
                          'datagrampacket.h' => 1,
                          'datagramsocket.h' => 1,
                          'date.h' => 1,
                          'dateformat.h' => 1,
-                         'datelayout.h' => 1,
                          'datepatternconverter.h' => 1,
                          'datetimedateformat.h' => 1,
                          'defaultconfigurator.h' => 1,
@@ -65,6 +65,7 @@ $VAR1 = {
                          'fallbackerrorhandler.h' => 1,
                          'file.h' => 1,
                          'fileappender.h' => 1,
+                         'fileappender_priv.h' => 1,
                          'filedatepatternconverter.h' => 1,
                          'fileinputstream.h' => 1,
                          'filelocationpatternconverter.h' => 1,
@@ -72,10 +73,12 @@ $VAR1 = {
                          'filerenameaction.h' => 1,
                          'filewatchdog.h' => 1,
                          'filter.h' => 1,
+                         'filter_priv.h' => 1,
                          'filterbasedtriggeringpolicy.h' => 1,
                          'fixedwindowrollingpolicy.h' => 1,
                          'formattinginfo.h' => 1,
                          'fulllocationpatternconverter.h' => 1,
+                         'functional' => 1,
                          'gthr-default.h' => 1,
                          'gzcompressaction.h' => 1,
                          'hierarchy.h' => 1,
@@ -127,12 +130,14 @@ $VAR1 = {
                          'object.h' => 1,
                          'objectoutputstream.h' => 1,
                          'odbcappender.h' => 1,
+                         'odbcappender_priv.h' => 1,
                          'onlyonceerrorhandler.h' => 1,
                          'optionconverter.h' => 1,
                          'optionhandler.h' => 1,
                          'outputstream.h' => 1,
                          'outputstreamwriter.h' => 1,
                          'patternconverter.h' => 1,
+                         'patternconverter_priv.h' => 1,
                          'patternlayout.h' => 1,
                          'patternparser.h' => 1,
                          'pool.h' => 1,
@@ -146,12 +151,12 @@ $VAR1 = {
                          'pthreadtypes.h' => 1,
                          'ptr_traits.h' => 1,
                          'reader.h' => 1,
+                         'refwrap.h' => 1,
                          'relativetimedateformat.h' => 1,
                          'relativetimepatternconverter.h' => 1,
                          'repositoryselector.h' => 1,
                          'resourcebundle.h' => 1,
                          'rollingfileappender.h' => 1,
-                         'rollingfileappenderskeleton.h' => 1,
                          'rollingpolicy.h' => 1,
                          'rollingpolicybase.h' => 1,
                          'rolloverdescription.h' => 1,
@@ -165,10 +170,11 @@ $VAR1 = {
                          'sizebasedtriggeringpolicy.h' => 1,
                          'smtpappender.h' => 1,
                          'socket.h' => 1,
-                         'socketappender.h' => 1,
                          'socketappenderskeleton.h' => 1,
+                         'socketappenderskeleton_priv.h' => 1,
                          'sockethubappender.h' => 1,
                          'socketoutputstream.h' => 1,
+                         'std_function.h' => 1,
                          'std_mutex.h' => 1,
                          'stddef.h' => 1,
                          'stl_deque.h' => 1,
@@ -188,6 +194,7 @@ $VAR1 = {
                          'stringtokenizer.h' => 1,
                          'struct_tm.h' => 1,
                          'syslogappender.h' => 1,
+                         'syslogappender_priv.h' => 1,
                          'syslogwriter.h' => 1,
                          'system.h' => 1,
                          'systemerrwriter.h' => 1,
@@ -198,6 +205,7 @@ $VAR1 = {
                          'threadlocal.h' => 1,
                          'threadpatternconverter.h' => 1,
                          'threadspecificdata.h' => 1,
+                         'threadutility.h' => 1,
                          'throwableinformationpatternconverter.h' => 1,
                          'timebasedrollingpolicy.h' => 1,
                          'timezone.h' => 1,
@@ -205,20 +213,22 @@ $VAR1 = {
                          'transform.h' => 1,
                          'triggeringeventevaluator.h' => 1,
                          'triggeringpolicy.h' => 1,
-                         'ttcclayout.h' => 1,
                          'tuple' => 1,
                          'type_traits' => 1,
                          'unique_ptr.h' => 1,
                          'writer.h' => 1,
                          'writerappender.h' => 1,
+                         'writerappender_priv.h' => 1,
                          'xml.h' => 1,
                          'xmllayout.h' => 1,
                          'xmlsocketappender.h' => 1,
                          'zipcompressaction.h' => 1
                        },
           'Language' => 'C++',
-          'LibraryName' => 'liblog4cxx.so.11.0.0',
-          'LibraryVersion' => '11',
+          'LibraryName' => 'liblog4cxx.so.12.0.0',
+          'LibraryVersion' => '12',
+          'MissedOffsets' => '1',
+          'MissedRegs' => '1',
           'NameSpaces' => {
                             '__gnu_cxx' => 1,
                             '__gnu_cxx::__ops' => 1,
@@ -244,12 +254,14 @@ $VAR1 = {
                             'std::chrono::_V2' => 1
                           },
           'Needed' => {
+                        'ld-linux-x86-64.so.2' => 1,
                         'libapr-1.so.0' => 1,
                         'libaprutil-1.so.0' => 1,
                         'libc.so.6' => 1,
                         'libexpat.so.1' => 1,
                         'libgcc_s.so.1' => 1,
                         'libm.so.6' => 1,
+                        'libodbc.so.2' => 1,
                         'libstdc++.so.6' => 1
                       },
           'Sources' => {
@@ -273,12 +285,10 @@ $VAR1 = {
                          'configurator.cpp' => 1,
                          'consoleappender.cpp' => 1,
                          'cyclicbuffer.cpp' => 1,
-                         'dailyrollingfileappender.cpp' => 1,
                          'datagrampacket.cpp' => 1,
                          'datagramsocket.cpp' => 1,
                          'date.cpp' => 1,
                          'dateformat.cpp' => 1,
-                         'datelayout.cpp' => 1,
                          'datepatternconverter.cpp' => 1,
                          'defaultconfigurator.cpp' => 1,
                          'defaultloggerfactory.cpp' => 1,
@@ -338,7 +348,6 @@ $VAR1 = {
                          'ndc.cpp' => 1,
                          'ndcpatternconverter.cpp' => 1,
                          'objectoutputstream.cpp' => 1,
-                         'obsoleterollingfileappender.cpp' => 1,
                          'odbcappender.cpp' => 1,
                          'onlyonceerrorhandler.cpp' => 1,
                          'optionconverter.cpp' => 1,
@@ -368,7 +377,6 @@ $VAR1 = {
                          'sizebasedtriggeringpolicy.cpp' => 1,
                          'smtpappender.cpp' => 1,
                          'socket.cpp' => 1,
-                         'socketappender.cpp' => 1,
                          'socketappenderskeleton.cpp' => 1,
                          'sockethubappender.cpp' => 1,
                          'socketoutputstream.cpp' => 1,
@@ -385,13 +393,13 @@ $VAR1 = {
                          'threadlocal.cpp' => 1,
                          'threadpatternconverter.cpp' => 1,
                          'threadspecificdata.cpp' => 1,
+                         'threadutility.cpp' => 1,
                          'throwableinformationpatternconverter.cpp' => 1,
                          'timebasedrollingpolicy.cpp' => 1,
                          'timezone.cpp' => 1,
                          'transcoder.cpp' => 1,
                          'transform.cpp' => 1,
                          'triggeringpolicy.cpp' => 1,
-                         'ttcclayout.cpp' => 1,
                          'writer.cpp' => 1,
                          'writerappender.cpp' => 1,
                          'xmllayout.cpp' => 1,
@@ -399,27746 +407,14637 @@ $VAR1 = {
                          'zipcompressaction.cpp' => 1
                        },
           'SymbolInfo' => {
-                            '10100011' => {
-                                            'Class' => '10100002',
-                                            'Header' => 'sizebasedtriggeringpolicy.h',
-                                            'Line' => '75',
-                                            'MnglName' => '_ZN7log4cxx7rolling25SizeBasedTriggeringPolicy14setMaxFileSizeEm',
+                            '10048859' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '36',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper4trimERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '13829889'
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '56900',
+                                            'ShortName' => 'trim',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '86',
+                                            'Static' => 1
+                                          },
+                            '10048886' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper10startsWithERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'l',
-                                                                  'type' => '41980'
+                                                                  'name' => 'prefix',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '44686',
+                                            'ShortName' => 'startsWith',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '99',
+                                            'Static' => 1
+                                          },
+                            '10048918' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '38',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper8endsWithERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'suffix',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '44686',
+                                            'ShortName' => 'endsWith',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '109',
+                                            'Static' => 1
+                                          },
+                            '10048950' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '39',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper16equalsIgnoreCaseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKcSB_',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's1',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'upper',
+                                                                  'type' => '1169903'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'lower',
+                                                                  'type' => '1169903'
+                                                                }
+                                                       },
+                                            'Return' => '44686',
+                                            'ShortName' => 'equalsIgnoreCase',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '42',
+                                            'Static' => 1
+                                          },
+                            '10048987' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '41',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper16equalsIgnoreCaseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S9_',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's1',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'upper',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'lower',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '44686',
+                                            'ShortName' => 'equalsIgnoreCase',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '57',
+                                            'Static' => 1
+                                          },
+                            '10049024' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '45',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper5toIntERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '44633',
+                                            'ShortName' => 'toInt',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '120',
+                                            'Static' => 1
+                                          },
+                            '10049051' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '46',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper7toInt64ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '451219',
+                                            'ShortName' => 'toInt64',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '127',
+                                            'Static' => 1
+                                          },
+                            '10049078' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper8toStringEiRNS0_4PoolERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'n',
+                                                                  'type' => '44633'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'pool',
+                                                                  'type' => '57780'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 's',
+                                                                  'type' => '453811'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
                                             'Return' => '1',
-                                            'ShortName' => 'setMaxFileSize',
-                                            'Source' => 'sizebasedtriggeringpolicy.cpp',
-                                            'SourceLine' => '46'
+                                            'ShortName' => 'toString',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '134',
+                                            'Static' => 1
                                           },
-                            '10100278' => {
-                                            'Data' => 1,
-                                            'Line' => '67',
-                                            'MnglName' => '_ZN7log4cxx7classes39ObsoleteRollingFileAppenderRegistrationE',
-                                            'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'ObsoleteRollingFileAppenderRegistration',
-                                            'Source' => 'obsoleterollingfileappender.cpp'
+                            '10049111' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper8toStringExRNS0_4PoolERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'n',
+                                                                  'type' => '451219'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'pool',
+                                                                  'type' => '57780'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'dst',
+                                                                  'type' => '453811'
+                                                                }
+                                                       },
+                                            'Return' => '1',
+                                            'ShortName' => 'toString',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '153',
+                                            'Static' => 1
+                                          },
+                            '10049144' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '50',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper8toStringEmRNS0_4PoolERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'n',
+                                                                  'type' => '44828'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'pool',
+                                                                  'type' => '57780'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 's',
+                                                                  'type' => '453811'
+                                                                }
+                                                       },
+                                            'Return' => '1',
+                                            'ShortName' => 'toString',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '179',
+                                            'Static' => 1
+                                          },
+                            '10049177' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '52',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper8toStringEbRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'val',
+                                                                  'type' => '44686'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'dst',
+                                                                  'type' => '453811'
+                                                                }
+                                                       },
+                                            'Return' => '1',
+                                            'ShortName' => 'toString',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '140',
+                                            'Static' => 1
+                                          },
+                            '10049205' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '54',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper11toLowerCaseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '56900',
+                                            'ShortName' => 'toLowerCase',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '78',
+                                            'Static' => 1
+                                          },
+                            '10049232' => {
+                                            'Class' => '10048849',
+                                            'Header' => 'stringhelper.h',
+                                            'Line' => '56',
+                                            'MnglName' => '_ZN7log4cxx7helpers12StringHelper6formatERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorIS7_SaIS7_EE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'pattern',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'params',
+                                                                  'type' => '1464452'
+                                                                }
+                                                       },
+                                            'Return' => '56900',
+                                            'ShortName' => 'format',
+                                            'Source' => 'stringhelper.cpp',
+                                            'SourceLine' => '184',
+                                            'Static' => 1
                                           },
-                            '10100393' => {
-                                            'Class' => '10100296',
+                            '10123366' => {
+                                            'Class' => '10123205',
                                             'Const' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZNK7log4cxx19RollingFileAppender8getClassEv',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104556'
+                                                                  'type' => '10125331'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '49',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '41',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '10100432' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender14getStaticClassEv',
-                                            'Return' => '55278',
+                            '10123405' => {
+                                            'Class' => '10123205',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter14getStaticClassEv',
+                                            'Return' => '57815',
                                             'ShortName' => 'getStaticClass',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '53',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '41',
                                             'Static' => 1
                                           },
-                            '10100450' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender13registerClassEv',
-                                            'Return' => '55284',
+                            '10123423' => {
+                                            'Class' => '10123205',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '58',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '41',
                                             'Static' => 1
                                           },
-                            '10100468' => {
-                                            'Class' => '10100296',
+                            '10123441' => {
+                                            'Class' => '10123205',
                                             'Const' => 1,
-                                            'Header' => 'rollingfileappender.h',
+                                            'Header' => 'stringmatchfilter.h',
                                             'InLine' => 2,
-                                            'Line' => '45',
-                                            'MnglName' => '_ZNK7log4cxx19RollingFileAppender4castERKNS_7helpers5ClassE',
+                                            'Line' => '61',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter4castERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104556'
+                                                                  'type' => '10125331'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '10100512' => {
-                                            'Class' => '10100296',
+                            '10123485' => {
+                                            'Class' => '10123205',
                                             'Const' => 1,
-                                            'Header' => 'rollingfileappender.h',
+                                            'Header' => 'stringmatchfilter.h',
                                             'InLine' => 2,
-                                            'Line' => '48',
-                                            'MnglName' => '_ZNK7log4cxx19RollingFileAppender10instanceofERKNS_7helpers5ClassE',
+                                            'Line' => '64',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter10instanceofERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104556'
+                                                                  'type' => '10125331'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10100735' => {
-                                            'Class' => '10100296',
-                                            'Const' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZNK7log4cxx19RollingFileAppender17getMaxBackupIndexEv',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10104556'
-                                                                }
-                                                       },
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'Return' => '41771',
-                                            'ShortName' => 'getMaxBackupIndex',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '132'
-                                          },
-                            '10100766' => {
-                                            'Class' => '10100296',
-                                            'Const' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZNK7log4cxx19RollingFileAppender18getMaximumFileSizeEv',
+                            '10123608' => {
+                                            'Class' => '10123205',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104556'
+                                                                  'type' => '10125303'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'option',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'value',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'Return' => '41784',
-                                            'ShortName' => 'getMaximumFileSize',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '137'
+                                            'Return' => '1',
+                                            'ShortName' => 'setOption',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '50',
+                                            'Virt' => 1,
+                                            'VirtPos' => '6'
                                           },
-                            '10100797' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender17setMaxBackupIndexEi',
+                            '10123653' => {
+                                            'Class' => '10123205',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter16setStringToMatchERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10125303'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'maxBackups',
-                                                                  'type' => '41771'
+                                                                  'name' => 'stringToMatch1',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
                                             'Return' => '1',
-                                            'ShortName' => 'setMaxBackupIndex',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '142'
+                                            'ShortName' => 'setStringToMatch',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '95'
                                           },
-                            '10100829' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender14setMaxFileSizeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                            '10123685' => {
+                                            'Class' => '10123205',
+                                            'Const' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter16getStringToMatchB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'value',
-                                                                  'type' => '207559'
+                                                                  'type' => '10125331'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'setMaxFileSize',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '152'
+                                            'Return' => '212489',
+                                            'ShortName' => 'getStringToMatch',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '100'
                                           },
-                            '10100861' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender18setMaximumFileSizeEi',
+                            '10123716' => {
+                                            'Class' => '10123205',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter16setAcceptOnMatchEb',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10125303'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'maxFileSize1',
-                                                                  'type' => '41771'
+                                                                  'name' => 'acceptOnMatch1',
+                                                                  'type' => '44686'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
                                             'Return' => '1',
-                                            'ShortName' => 'setMaximumFileSize',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '147'
+                                            'ShortName' => 'setAcceptOnMatch',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '105'
                                           },
-                            '10100893' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_',
+                            '10123748' => {
+                                            'Class' => '10123205',
+                                            'Const' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter16getAcceptOnMatchEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'option',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'value',
-                                                                  'type' => '207559'
+                                                                  'type' => '10125331'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'setOption',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '107',
-                                            'Virt' => 1,
-                                            'VirtPos' => '6'
+                                            'Return' => '44686',
+                                            'ShortName' => 'getAcceptOnMatch',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '110'
                                           },
-                            '10100938' => {
-                                            'Class' => '10100296',
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppender15activateOptionsERNS_7helpers4PoolE',
+                            '10123779' => {
+                                            'Class' => '10123205',
+                                            'Const' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter6decideERKSt10shared_ptrINS_3spi12LoggingEventEE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10125331'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'event',
+                                                                  'type' => '129521'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'activateOptions',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '157',
+                                            'Return' => '127275',
+                                            'ShortName' => 'decide',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '66',
                                             'Virt' => 1,
-                                            'VirtPos' => '5'
+                                            'VirtPos' => '7'
                                           },
-                            '10101110' => {
-                                            'Class' => '10100998',
+                            '10123943' => {
+                                            'Class' => '10123823',
                                             'Const' => 1,
+                                            'Header' => 'stringmatchfilter.h',
                                             'InLine' => 2,
-                                            'Line' => '38',
-                                            'MnglName' => '_ZNK7log4cxx24ClassRollingFileAppender7getNameB5cxx11Ev',
+                                            'Line' => '60',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilter7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104596'
+                                                                  'type' => '10125365'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10101149' => {
-                                            'Class' => '10100998',
+                            '10123982' => {
+                                            'Class' => '10123823',
                                             'Const' => 1,
+                                            'Header' => 'stringmatchfilter.h',
                                             'InLine' => 2,
-                                            'Line' => '42',
-                                            'MnglName' => '_ZNK7log4cxx24ClassRollingFileAppender11newInstanceEv',
+                                            'Line' => '60',
+                                            'MnglName' => '_ZNK7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilter11newInstanceEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104596'
+                                                                  'type' => '10125365'
                                                                 }
                                                        },
-                                            'Return' => '136302',
+                                            'Return' => '10125297',
                                             'ShortName' => 'newInstance',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
                                             'Virt' => 1,
-                                            'VirtPos' => '2'
+                                            'VirtPos' => '4'
+                                          },
+                            '10124040' => {
+                                            'Data' => 1,
+                                            'Line' => '41',
+                                            'MnglName' => '_ZN7log4cxx7classes29StringMatchFilterRegistrationE',
+                                            'NameSpace' => 'log4cxx::classes',
+                                            'Return' => '57821',
+                                            'ShortName' => 'StringMatchFilterRegistration',
+                                            'Source' => 'stringmatchfilter.cpp'
                                           },
-                            '10105663' => {
+                            '10131677' => {
                                             'Artificial' => 1,
-                                            'Class' => '10100998',
+                                            'Class' => '10123223',
                                             'Destructor' => 1,
                                             'InLine' => 1,
-                                            'Line' => '34',
-                                            'MnglName' => '_ZN7log4cxx24ClassRollingFileAppenderD0Ev',
+                                            'Line' => '32',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter24StringMatchFilterPrivateD2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10124714'
+                                                                }
+                                                       },
+                                            'ShortName' => 'StringMatchFilterPrivate',
+                                            'Source' => 'stringmatchfilter.cpp'
+                                          },
+                            '10135056' => {
+                                            'Class' => '10123205',
+                                            'Destructor' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilterD0Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10125303'
+                                                                }
+                                                       },
+                                            'ShortName' => 'StringMatchFilter',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '48',
+                                            'Virt' => 1
+                                          },
+                            '10135100' => {
+                                            'Class' => '10123205',
+                                            'Destructor' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104573'
+                                                                  'type' => '10125303'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClassRollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
+                                            'ShortName' => 'StringMatchFilter',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '48',
                                             'Virt' => 1
                                           },
-                            '10105664' => {
-                                            'Artificial' => 1,
-                                            'Class' => '10100998',
+                            '10135144' => {
+                                            'Class' => '10123205',
                                             'Destructor' => 1,
-                                            'InLine' => 1,
-                                            'Line' => '34',
-                                            'MnglName' => '_ZN7log4cxx24ClassRollingFileAppenderD1Ev',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104573'
+                                                                  'type' => '10125303'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClassRollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
+                                            'ShortName' => 'StringMatchFilter',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '48',
                                             'Virt' => 1
                                           },
-                            '10105805' => {
+                            '10135238' => {
+                                            'Class' => '10123205',
+                                            'Constructor' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilterC1Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10125303'
+                                                                }
+                                                       },
+                                            'ShortName' => 'StringMatchFilter',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '43'
+                                          },
+                            '10135282' => {
+                                            'Class' => '10123205',
+                                            'Constructor' => 1,
+                                            'Header' => 'stringmatchfilter.h',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilterC2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10125303'
+                                                                }
+                                                       },
+                                            'ShortName' => 'StringMatchFilter',
+                                            'Source' => 'stringmatchfilter.cpp',
+                                            'SourceLine' => '43'
+                                          },
+                            '10135692' => {
                                             'Artificial' => 1,
-                                            'Class' => '10100998',
-                                            'Destructor' => 1,
+                                            'Class' => '10123223',
+                                            'Constructor' => 1,
                                             'InLine' => 1,
-                                            'Line' => '34',
-                                            'MnglName' => '_ZN7log4cxx24ClassRollingFileAppenderD2Ev',
+                                            'Line' => '33',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter24StringMatchFilterPrivateC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104573'
+                                                                  'type' => '10124714'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClassRollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'Virt' => 1
+                                            'ShortName' => 'StringMatchFilterPrivate',
+                                            'Source' => 'stringmatchfilter.cpp'
+                                          },
+                            '10135693' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10123223',
+                                            'Constructor' => 1,
+                                            'InLine' => 1,
+                                            'Line' => '33',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter24StringMatchFilterPrivateC1Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10124714'
+                                                                }
+                                                       },
+                                            'ShortName' => 'StringMatchFilterPrivate',
+                                            'Source' => 'stringmatchfilter.cpp'
                                           },
-                            '10130041' => {
-                                            'Class' => '10100296',
+                            '10136366' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10123823',
                                             'Destructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderD0Ev',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'InLine' => 1,
+                                            'Line' => '60',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10125348'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '102',
+                                            'ShortName' => 'ClazzStringMatchFilter',
                                             'Virt' => 1
                                           },
-                            '10130141' => {
-                                            'Class' => '10100296',
+                            '10136367' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10123823',
                                             'Destructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderD1Ev',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'InLine' => 1,
+                                            'Line' => '60',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10125348'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '102',
+                                            'ShortName' => 'ClazzStringMatchFilter',
                                             'Virt' => 1
                                           },
-                            '10131798' => {
-                                            'Class' => '10100296',
+                            '10136410' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10123823',
                                             'Destructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderD2Ev',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'InLine' => 1,
+                                            'Line' => '60',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10125348'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '102',
+                                            'ShortName' => 'ClazzStringMatchFilter',
                                             'Virt' => 1
                                           },
-                            '10133359' => {
-                                            'Class' => '10100296',
+                            '10136478' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10123823',
                                             'Constructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderC1ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'InLine' => 1,
+                                            'Line' => '60',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'newLayout',
-                                                                  'type' => '325984'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'filename',
-                                                                  'type' => '207559'
+                                                                  'type' => '10125348'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '92'
+                                            'ShortName' => 'ClazzStringMatchFilter'
                                           },
-                            '10134894' => {
-                                            'Class' => '10100296',
+                            '10136479' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10123823',
                                             'Constructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderC2ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Header' => 'stringmatchfilter.h',
+                                            'InLine' => 1,
+                                            'Line' => '60',
+                                            'MnglName' => '_ZN7log4cxx6filter17StringMatchFilter22ClazzStringMatchFilterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'newLayout',
-                                                                  'type' => '325984'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'filename',
-                                                                  'type' => '207559'
+                                                                  'type' => '10125348'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '92'
+                                            'ShortName' => 'ClazzStringMatchFilter'
                                           },
-                            '10136338' => {
-                                            'Class' => '10100296',
-                                            'Constructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderC1ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb',
+                            '10194082' => {
+                                            'Class' => '8178508',
+                                            'Destructor' => 1,
+                                            'Header' => 'stringtokenizer.h',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7helpers15StringTokenizerD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'newLayout',
-                                                                  'type' => '325984'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'filename',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'append',
-                                                                  'type' => '41824'
+                                                                  'type' => '10188755'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '79'
+                                            'ShortName' => 'StringTokenizer',
+                                            'Source' => 'stringtokenizer.cpp',
+                                            'SourceLine' => '34'
                                           },
-                            '10137919' => {
-                                            'Class' => '10100296',
+                            '10194178' => {
+                                            'Class' => '8178508',
                                             'Constructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderC2ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb',
+                                            'Header' => 'stringtokenizer.h',
+                                            'Line' => '36',
+                                            'MnglName' => '_ZN7log4cxx7helpers15StringTokenizerC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'newLayout',
-                                                                  'type' => '325984'
+                                                                  'type' => '10188755'
                                                                 },
-                                                         '3' => {
-                                                                  'name' => 'filename',
-                                                                  'type' => '207559'
+                                                         '1' => {
+                                                                  'name' => 'str',
+                                                                  'type' => '212489'
                                                                 },
-                                                         '4' => {
-                                                                  'name' => 'append',
-                                                                  'type' => '41824'
+                                                         '2' => {
+                                                                  'name' => 'delim1',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '79'
+                                            'ShortName' => 'StringTokenizer',
+                                            'Source' => 'stringtokenizer.cpp',
+                                            'SourceLine' => '29'
                                           },
-                            '10139360' => {
-                                            'Class' => '10100296',
+                            '10194179' => {
+                                            'Class' => '8178508',
                                             'Constructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderC1Ev',
+                                            'Header' => 'stringtokenizer.h',
+                                            'Line' => '36',
+                                            'MnglName' => '_ZN7log4cxx7helpers15StringTokenizerC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10188755'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'str',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'delim1',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '74'
+                                            'ShortName' => 'StringTokenizer',
+                                            'Source' => 'stringtokenizer.cpp',
+                                            'SourceLine' => '29'
                                           },
-                            '10139620' => {
-                                            'Class' => '10100296',
-                                            'Constructor' => 1,
-                                            'Header' => 'rollingfileappender.h',
-                                            'MnglName' => '_ZN7log4cxx19RollingFileAppenderC2Ev',
+                            '10281278' => {
+                                            'Class' => '10281228',
+                                            'Header' => 'syslogwriter.h',
+                                            'Line' => '44',
+                                            'MnglName' => '_ZN7log4cxx7helpers12SyslogWriter5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10104528'
+                                                                  'type' => '10284580'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'source',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'ShortName' => 'RollingFileAppender',
-                                            'Source' => 'obsoleterollingfileappender.cpp',
-                                            'SourceLine' => '74'
+                                            'Return' => '1',
+                                            'ShortName' => 'write',
+                                            'Source' => 'syslogwriter.cpp',
+                                            'SourceLine' => '56'
                                           },
-                            '10234261' => {
-                                            'Class' => '10234085',
+                            '10282393' => {
+                                            'Class' => '10282125',
                                             'Const' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender8getClassEv',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238365'
+                                                                  'type' => '10286530'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '91',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '38',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '10234300' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender14getStaticClassEv',
-                                            'Return' => '55278',
+                            '10282432' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender14getStaticClassEv',
+                                            'Return' => '57815',
                                             'ShortName' => 'getStaticClass',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '91',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '38',
                                             'Static' => 1
                                           },
-                            '10234318' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender13registerClassEv',
-                                            'Return' => '55284',
+                            '10282450' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '91',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '38',
                                             'Static' => 1
                                           },
-                            '10234336' => {
-                                            'Class' => '10234085',
+                            '10282468' => {
+                                            'Class' => '10282125',
                                             'Const' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 2,
-                                            'Line' => '155',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender4castERKNS_7helpers5ClassE',
+                                            'Line' => '50',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender4castERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238365'
+                                                                  'type' => '10286530'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '10234380' => {
-                                            'Class' => '10234085',
+                            '10282512' => {
+                                            'Class' => '10282125',
                                             'Const' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 2,
-                                            'Line' => '158',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender10instanceofERKNS_7helpers5ClassE',
+                                            'Line' => '53',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender10instanceofERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238365'
+                                                                  'type' => '10286530'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10234503' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                            '10282735' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender5closeEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'option',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'value',
-                                                                  'type' => '207559'
+                                                                  'type' => '10286541'
                                                                 }
                                                        },
                                             'Return' => '1',
-                                            'ShortName' => 'setOption',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '105',
+                                            'ShortName' => 'close',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '70',
                                             'Virt' => 1,
-                                            'VirtPos' => '6'
+                                            'VirtPos' => '10'
+                                          },
+                            '10282771' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender17getFacilityStringB5cxx11Ei',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'syslogFacility',
+                                                                  'type' => '44633'
+                                                                }
+                                                       },
+                                            'Return' => '56900',
+                                            'ShortName' => 'getFacilityString',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '104',
+                                            'Static' => 1
                                           },
-                            '10234548' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender15activateOptionsERNS_7helpers4PoolE',
+                            '10282799' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender11getFacilityERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10238376'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '55243'
+                                                                  'name' => 's',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '1' => 'rsi'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'activateOptions',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '135',
-                                            'Virt' => 1,
-                                            'VirtPos' => '5'
+                                            'Return' => '44633',
+                                            'ShortName' => 'getFacility',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '178',
+                                            'Static' => 1
                                           },
-                            '10234588' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender6appendERKSt10shared_ptrINS_3spi12LoggingEventEERNS_7helpers4PoolE',
+                            '10282827' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender6appendERKSt10shared_ptrINS_3spi12LoggingEventEERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'event',
-                                                                  'type' => '120674'
+                                                                  'type' => '129521'
                                                                 },
                                                          '2' => {
                                                                   'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi',
-                                                       '2' => 'rdx'
-                                                     },
                                             'Return' => '1',
                                             'ShortName' => 'append',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '143',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '274',
                                             'Virt' => 1,
                                             'VirtPos' => '17'
                                           },
-                            '10234633' => {
-                                            'Class' => '10234085',
-                                            'Const' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender15getLogStatementB5cxx11ERKSt10shared_ptrINS_3spi12LoggingEventEERNS_7helpers4PoolE',
+                            '10282873' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender15activateOptionsERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238365'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'event',
-                                                                  'type' => '120674'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'p1',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Return' => '54480',
-                                            'ShortName' => 'getLogStatement',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '156'
+                                            'Return' => '1',
+                                            'ShortName' => 'activateOptions',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '375',
+                                            'Virt' => 1,
+                                            'VirtPos' => '5'
                                           },
-                            '10234674' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender7executeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_7helpers4PoolE',
+                            '10282914' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'sql',
-                                                                  'type' => '207559'
+                                                                  'name' => 'option',
+                                                                  'type' => '212489'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'value',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'Protected' => 1,
                                             'Return' => '1',
-                                            'ShortName' => 'execute',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '163',
+                                            'ShortName' => 'setOption',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '379',
                                             'Virt' => 1,
-                                            'VirtPos' => '18'
+                                            'VirtPos' => '6'
                                           },
-                            '10234719' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender15closeConnectionEPv',
+                            '10282960' => {
+                                            'Class' => '10282125',
+                                            'Const' => 1,
+                                            'Header' => 'syslogappender.h',
+                                            'InLine' => 2,
+                                            'Line' => '94',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender14requiresLayoutEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '10234155'
+                                                                  'type' => '10286530'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'closeConnection',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '209',
+                                            'Return' => '44686',
+                                            'ShortName' => 'requiresLayout',
                                             'Virt' => 1,
-                                            'VirtPos' => '19'
+                                            'VirtPos' => '16'
                                           },
-                            '10234759' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender13getConnectionERNS_7helpers4PoolE',
+                            '10282999' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender13setSyslogHostERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'syslogHost1',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
-                                            'Return' => '10234155',
-                                            'ShortName' => 'getConnection',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '217',
-                                            'Virt' => 1,
-                                            'VirtPos' => '20'
+                                            'Return' => '1',
+                                            'ShortName' => 'setSyslogHost',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '399'
                                           },
-                            '10234803' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender5closeEv',
+                            '10283032' => {
+                                            'Class' => '10282125',
+                                            'Const' => 1,
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender13getSyslogHostB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286530'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'close',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '282',
-                                            'Virt' => 1,
-                                            'VirtPos' => '10'
+                                            'Return' => '212489',
+                                            'ShortName' => 'getSyslogHost',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '459'
                                           },
-                            '10234840' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender11flushBufferERNS_7helpers4PoolE',
+                            '10283064' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender11setFacilityERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'facilityName',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
                                             'Return' => '1',
-                                            'ShortName' => 'flushBuffer',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '318',
-                                            'Virt' => 1,
-                                            'VirtPos' => '21'
+                                            'ShortName' => 'setFacility',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '440'
                                           },
-                            '10234882' => {
-                                            'Class' => '10234085',
+                            '10283097' => {
+                                            'Class' => '10282125',
                                             'Const' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'InLine' => 2,
-                                            'Line' => '237',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender14requiresLayoutEv',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender11getFacilityB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238365'
+                                                                  'type' => '10286530'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'Return' => '41824',
-                                            'ShortName' => 'requiresLayout',
-                                            'Virt' => 1,
-                                            'VirtPos' => '16'
+                                            'Return' => '56900',
+                                            'ShortName' => 'getFacility',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '464'
                                           },
-                            '10234921' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender6setSqlERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                            '10283129' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19setFacilityPrintingEb',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 's',
-                                                                  'type' => '207559'
+                                                                  'name' => 'facilityPrinting1',
+                                                                  'type' => '44686'
                                                                 }
                                                        },
                                             'Return' => '1',
-                                            'ShortName' => 'setSql',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '341'
+                                            'ShortName' => 'setFacilityPrinting',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '469'
                                           },
-                            '10235323' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender6encodeEPPwRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_7helpers4PoolE',
+                            '10283162' => {
+                                            'Class' => '10282125',
+                                            'Const' => 1,
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender19getFacilityPrintingEv',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'dest',
-                                                                  'type' => '44000'
+                                                                  'name' => 'this',
+                                                                  'type' => '10286530'
+                                                                }
+                                                       },
+                                            'Return' => '44686',
+                                            'ShortName' => 'getFacilityPrinting',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '474'
+                                          },
+                            '10283194' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19setMaxMessageLengthEi',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'src',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'maxMessageLength1',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'Private' => 1,
                                             'Return' => '1',
-                                            'ShortName' => 'encode',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '363',
-                                            'Static' => 1
+                                            'ShortName' => 'setMaxMessageLength',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '479'
                                           },
-                            '10235356' => {
-                                            'Class' => '10234085',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender6encodeEPPtRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_7helpers4PoolE',
+                            '10283227' => {
+                                            'Class' => '10282125',
+                                            'Const' => 1,
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender19getMaxMessageLengthEv',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'dest',
-                                                                  'type' => '10238410'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'src',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'this',
+                                                                  'type' => '10286530'
                                                                 }
                                                        },
-                                            'Private' => 1,
+                                            'Return' => '44633',
+                                            'ShortName' => 'getMaxMessageLength',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '484'
+                                          },
+                            '10283259' => {
+                                            'Class' => '10282125',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender21initSyslogFacilityStrEv',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10286541'
+                                                                }
+                                                       },
+                                            'Protected' => 1,
                                             'Return' => '1',
-                                            'ShortName' => 'encode',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '369',
-                                            'Static' => 1
+                                            'ShortName' => 'initSyslogFacilityStr',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '80'
                                           },
-                            '10235509' => {
-                                            'Class' => '10235389',
+                            '10283483' => {
+                                            'Class' => '10283362',
                                             'Const' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 2,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender17ClazzODBCAppender7getNameB5cxx11Ev',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender19ClazzSyslogAppender7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238445'
+                                                                  'type' => '10286598'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10235548' => {
-                                            'Class' => '10235389',
+                            '10283522' => {
+                                            'Class' => '10283362',
                                             'Const' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 2,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZNK7log4cxx2db12ODBCAppender17ClazzODBCAppender11newInstanceEv',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZNK7log4cxx3net14SyslogAppender19ClazzSyslogAppender11newInstanceEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238445'
+                                                                  'type' => '10286598'
                                                                 }
                                                        },
-                                            'Return' => '10238370',
+                                            'Return' => '10286535',
                                             'ShortName' => 'newInstance',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '10235732' => {
-                                            'Class' => '10235596',
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLException13formatMessageEsPvPKcRNS_7helpers4PoolE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10238456'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'fHandleType',
-                                                                  'type' => '41764'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'hInput',
-                                                                  'type' => '42054'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'prolog',
-                                                                  'type' => '42620'
-                                                                },
-                                                         '4' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
-                                                                }
-                                                       },
-                                            'Private' => 1,
-                                            'Return' => '42620',
-                                            'ShortName' => 'formatMessage',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '60'
-                                          },
-                            '10235832' => {
+                            '10283583' => {
                                             'Data' => 1,
-                                            'Line' => '91',
-                                            'MnglName' => '_ZN7log4cxx7classes24ODBCAppenderRegistrationE',
+                                            'Line' => '38',
+                                            'MnglName' => '_ZN7log4cxx7classes26SyslogAppenderRegistrationE',
                                             'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'ODBCAppenderRegistration',
-                                            'Source' => 'odbcappender.cpp'
-                                          },
-                            '10235859' => {
-                                            'Class' => '890743',
-                                            'Header' => 'patternlayout.h',
-                                            'Line' => '352',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout14getStaticClassEv',
-                                            'Private' => 1,
-                                            'Return' => '55278',
-                                            'ShortName' => 'getStaticClass',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '56',
-                                            'Static' => 1
+                                            'Return' => '57821',
+                                            'ShortName' => 'SyslogAppenderRegistration',
+                                            'Source' => 'syslogappender.cpp'
                                           },
-                            '10235873' => {
-                                            'Class' => '890743',
-                                            'Header' => 'patternlayout.h',
-                                            'Line' => '373',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout20setConversionPatternERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                            '1030581' => {
+                                           'Class' => '879970',
+                                           'Destructor' => 1,
+                                           'Header' => 'bytebuffer.h',
+                                           'Line' => '41',
+                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBufferD2Ev',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '1024476'
+                                                               }
+                                                      },
+                                           'ShortName' => 'ByteBuffer',
+                                           'Source' => 'bytebuffer.cpp',
+                                           'SourceLine' => '40'
+                                         },
+                            '10306043' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
+                                            'Destructor' => 1,
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '55',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951919'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
-                                                                }
-                                                       },
-                                            'Private' => 1,
-                                            'Return' => '1',
-                                            'ShortName' => 'setConversionPattern',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '73'
-                                          },
-                            '10236402' => {
-                                            'Header' => 'object.h',
-                                            'InLine' => 2,
-                                            'Line' => '116',
-                                            'MnglName' => '_ZN7log4cxx4castINS_13PatternLayoutENS_6LayoutELb0ELb0EEESt10shared_ptrIT_ERKS3_IT0_E',
-                                            'NameSpace' => 'log4cxx',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'incoming',
-                                                                  'type' => '325435'
+                                                                  'type' => '10285362'
                                                                 }
                                                        },
-                                            'Return' => '10209894',
-                                            'ShortName' => 'cast<log4cxx::PatternLayout, log4cxx::Layout>',
-                                            'TParam' => {
-                                                          '0' => {
-                                                                   'key' => 'Ret',
-                                                                   'type' => '890743'
-                                                                 },
-                                                          '1' => {
-                                                                   'key' => 'Type',
-                                                                   'type' => '323340'
-                                                                 }
-                                                        }
+                                            'ShortName' => 'SyslogAppenderPriv'
                                           },
-                            '10239181' => {
+                            '10306044' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235596',
+                                            'Class' => '10282143',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender_priv.h',
                                             'InLine' => 1,
-                                            'Line' => '38',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionD0Ev',
+                                            'Line' => '55',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10285362'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Virt' => 1
+                                            'ShortName' => 'SyslogAppenderPriv'
                                           },
-                            '10239182' => {
+                            '10306376' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235596',
+                                            'Class' => '10281228',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '38',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionD1Ev',
+                                            'Line' => '39',
+                                            'MnglName' => '_ZN7log4cxx7helpers12SyslogWriterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10284580'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Virt' => 1
+                                            'ShortName' => 'SyslogWriter'
                                           },
-                            '10239372' => {
+                            '10306377' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235596',
+                                            'Class' => '10281228',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '38',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionD2Ev',
+                                            'Line' => '39',
+                                            'MnglName' => '_ZN7log4cxx7helpers12SyslogWriterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10284580'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Virt' => 1
+                                            'ShortName' => 'SyslogWriter'
                                           },
-                            '10274384' => {
-                                            'Class' => '10234085',
+                            '1030676' => {
+                                           'Class' => '879970',
+                                           'Constructor' => 1,
+                                           'Header' => 'bytebuffer.h',
+                                           'Line' => '40',
+                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBufferC2EPcm',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '1024476'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'data1',
+                                                                 'type' => '46278'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'capacity',
+                                                                 'type' => '44828'
+                                                               }
+                                                      },
+                                           'ShortName' => 'ByteBuffer',
+                                           'Source' => 'bytebuffer.cpp',
+                                           'SourceLine' => '35'
+                                         },
+                            '1030677' => {
+                                           'Class' => '879970',
+                                           'Constructor' => 1,
+                                           'Header' => 'bytebuffer.h',
+                                           'Line' => '40',
+                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBufferC1EPcm',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '1024476'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'data1',
+                                                                 'type' => '46278'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'capacity',
+                                                                 'type' => '44828'
+                                                               }
+                                                      },
+                                           'ShortName' => 'ByteBuffer',
+                                           'Source' => 'bytebuffer.cpp',
+                                           'SourceLine' => '35'
+                                         },
+                            '1030784' => {
+                                           'Artificial' => 1,
+                                           'Class' => '879983',
+                                           'Constructor' => 1,
+                                           'InLine' => 1,
+                                           'Line' => '26',
+                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer14ByteBufferPrivC2EPcm',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '881820'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'data1',
+                                                                 'type' => '46278'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'capacity',
+                                                                 'type' => '44828'
+                                                               }
+                                                      },
+                                           'ShortName' => 'ByteBufferPriv',
+                                           'Source' => 'bytebuffer.cpp'
+                                         },
+                            '1030785' => {
+                                           'Artificial' => 1,
+                                           'Class' => '879983',
+                                           'Constructor' => 1,
+                                           'InLine' => 1,
+                                           'Line' => '26',
+                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer14ByteBufferPrivC1EPcm',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '881820'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'data1',
+                                                                 'type' => '46278'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'capacity',
+                                                                 'type' => '44828'
+                                                               }
+                                                      },
+                                           'ShortName' => 'ByteBufferPriv',
+                                           'Source' => 'bytebuffer.cpp'
+                                         },
+                            '10315198' => {
+                                            'Class' => '10282125',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppenderD0Ev',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 }
                                                        },
-                                            'ShortName' => 'ODBCAppender',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '100',
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '64',
                                             'Virt' => 1
                                           },
-                            '10274484' => {
-                                            'Class' => '10234085',
+                            '10315242' => {
+                                            'Class' => '10282125',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppenderD1Ev',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 }
                                                        },
-                                            'ShortName' => 'ODBCAppender',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '100',
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '64',
                                             'Virt' => 1
                                           },
-                            '10281572' => {
-                                            'Class' => '10234085',
+                            '10315286' => {
+                                            'Class' => '10282125',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppenderD2Ev',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
                                                                 }
                                                        },
-                                            'ShortName' => 'ODBCAppender',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '100',
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '64',
                                             'Virt' => 1
                                           },
-                            '10288533' => {
-                                            'Class' => '10234085',
+                            '10315416' => {
+                                            'Class' => '10282125',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppenderC1Ev',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderC1ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'layout1',
+                                                                  'type' => '308762'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'syslogHost1',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'syslogFacility1',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'ODBCAppender',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '95'
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '56'
                                           },
-                            '10291797' => {
-                                            'Class' => '10234085',
+                            '10315486' => {
+                                            'Class' => '10282125',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppenderC2Ev',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderC2ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238376'
+                                                                  'type' => '10286541'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'layout1',
+                                                                  'type' => '308762'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'syslogHost1',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '4' => {
+                                                                  'name' => 'syslogFacility1',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'ODBCAppender',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '95'
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '56'
                                           },
-                            '10298922' => {
-                                            'Class' => '10235596',
+                            '10315631' => {
+                                            'Class' => '10282125',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionC2ERKS1_',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderC1ERKSt10shared_ptrINS_6LayoutEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10286541'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'src',
-                                                                  'type' => '10238461'
+                                                                  'name' => 'layout1',
+                                                                  'type' => '308762'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'syslogFacility1',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '55'
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '49'
                                           },
-                            '10298923' => {
-                                            'Class' => '10235596',
+                            '10315692' => {
+                                            'Class' => '10282125',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionC1ERKS1_',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderC2ERKSt10shared_ptrINS_6LayoutEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10286541'
                                                                 },
-                                                         '1' => {
-                                                                  'name' => 'src',
-                                                                  'type' => '10238461'
+                                                         '2' => {
+                                                                  'name' => 'layout1',
+                                                                  'type' => '308762'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'syslogFacility1',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '55'
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '49'
                                           },
-                            '10299043' => {
-                                            'Class' => '10235596',
+                            '10315804' => {
+                                            'Class' => '10282125',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionC2EPKc',
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'msg',
-                                                                  'type' => '42620'
+                                                                  'type' => '10286541'
+                                                                }
+                                                       },
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '42'
+                                          },
+                            '10315848' => {
+                                            'Class' => '10282125',
+                                            'Constructor' => 1,
+                                            'Header' => 'syslogappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppenderC2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10286541'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '50'
+                                            'ShortName' => 'SyslogAppender',
+                                            'Source' => 'syslogappender.cpp',
+                                            'SourceLine' => '42'
                                           },
-                            '10299044' => {
-                                            'Class' => '10235596',
+                            '10316402' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionC1EPKc',
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '72',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivC2ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10285362'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'msg',
-                                                                  'type' => '42620'
+                                                                  'name' => 'layout',
+                                                                  'type' => '308762'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'syslogHost',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'syslogFacility',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '50'
+                                            'ShortName' => 'SyslogAppenderPriv'
                                           },
-                            '10299198' => {
-                                            'Class' => '10235596',
+                            '10316403' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionC2EsPvPKcRNS_7helpers4PoolE',
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '72',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivC1ERKSt10shared_ptrINS_6LayoutEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10285362'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'fHandleType',
-                                                                  'type' => '41764'
+                                                                  'name' => 'layout',
+                                                                  'type' => '308762'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'hInput',
-                                                                  'type' => '42054'
+                                                                  'name' => 'syslogHost',
+                                                                  'type' => '212489'
                                                                 },
                                                          '3' => {
-                                                                  'name' => 'prolog',
-                                                                  'type' => '42620'
-                                                                },
-                                                         '4' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'syslogFacility',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '42'
+                                            'ShortName' => 'SyslogAppenderPriv'
                                           },
-                            '10299199' => {
-                                            'Class' => '10235596',
+                            '10316520' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
-                                            'MnglName' => '_ZN7log4cxx2db12SQLExceptionC1EsPvPKcRNS_7helpers4PoolE',
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '64',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivC2ERKSt10shared_ptrINS_6LayoutEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238456'
+                                                                  'type' => '10285362'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'fHandleType',
-                                                                  'type' => '41764'
+                                                                  'name' => 'layout',
+                                                                  'type' => '308762'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'hInput',
-                                                                  'type' => '42054'
+                                                                  'name' => 'syslogFacility',
+                                                                  'type' => '44633'
+                                                                }
+                                                       },
+                                            'ShortName' => 'SyslogAppenderPriv'
+                                          },
+                            '10316521' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
+                                            'Constructor' => 1,
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '64',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivC1ERKSt10shared_ptrINS_6LayoutEEi',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10285362'
                                                                 },
-                                                         '3' => {
-                                                                  'name' => 'prolog',
-                                                                  'type' => '42620'
+                                                         '1' => {
+                                                                  'name' => 'layout',
+                                                                  'type' => '308762'
                                                                 },
-                                                         '4' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                         '2' => {
+                                                                  'name' => 'syslogFacility',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'SQLException',
-                                            'Source' => 'odbcappender.cpp',
-                                            'SourceLine' => '42'
+                                            'ShortName' => 'SyslogAppenderPriv'
+                                          },
+                            '10316605' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
+                                            'Constructor' => 1,
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '56',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivC2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10285362'
+                                                                }
+                                                       },
+                                            'ShortName' => 'SyslogAppenderPriv'
+                                          },
+                            '10316606' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10282143',
+                                            'Constructor' => 1,
+                                            'Header' => 'syslogappender_priv.h',
+                                            'InLine' => 1,
+                                            'Line' => '56',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender18SyslogAppenderPrivC1Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10285362'
+                                                                }
+                                                       },
+                                            'ShortName' => 'SyslogAppenderPriv'
                                           },
-                            '10300528' => {
+                            '10318110' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235389',
+                                            'Class' => '10283362',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 1,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender17ClazzODBCAppenderD0Ev',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19ClazzSyslogAppenderD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238428'
+                                                                  'type' => '10286581'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzODBCAppender',
+                                            'ShortName' => 'ClazzSyslogAppender',
                                             'Virt' => 1
                                           },
-                            '10300529' => {
+                            '10318111' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235389',
+                                            'Class' => '10283362',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 1,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender17ClazzODBCAppenderD1Ev',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19ClazzSyslogAppenderD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238428'
+                                                                  'type' => '10286581'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzODBCAppender',
+                                            'ShortName' => 'ClazzSyslogAppender',
                                             'Virt' => 1
                                           },
-                            '10300670' => {
+                            '10318154' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235389',
+                                            'Class' => '10283362',
                                             'Destructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 1,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender17ClazzODBCAppenderD2Ev',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19ClazzSyslogAppenderD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238428'
+                                                                  'type' => '10286581'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzODBCAppender',
+                                            'ShortName' => 'ClazzSyslogAppender',
                                             'Virt' => 1
                                           },
-                            '10300760' => {
+                            '10318222' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235389',
+                                            'Class' => '10283362',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 1,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender17ClazzODBCAppenderC2Ev',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19ClazzSyslogAppenderC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238428'
+                                                                  'type' => '10286581'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzODBCAppender'
+                                            'ShortName' => 'ClazzSyslogAppender'
                                           },
-                            '10300761' => {
+                            '10318223' => {
                                             'Artificial' => 1,
-                                            'Class' => '10235389',
+                                            'Class' => '10283362',
                                             'Constructor' => 1,
-                                            'Header' => 'odbcappender.h',
+                                            'Header' => 'syslogappender.h',
                                             'InLine' => 1,
-                                            'Line' => '154',
-                                            'MnglName' => '_ZN7log4cxx2db12ODBCAppender17ClazzODBCAppenderC1Ev',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZN7log4cxx3net14SyslogAppender19ClazzSyslogAppenderC1Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10286581'
+                                                                }
+                                                       },
+                                            'ShortName' => 'ClazzSyslogAppender'
+                                          },
+                            '10388404' => {
+                                            'Class' => '10281228',
+                                            'Constructor' => 1,
+                                            'Header' => 'syslogwriter.h',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7helpers12SyslogWriterC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10284580'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'syslogHost1',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'syslogHostPort1',
+                                                                  'type' => '44633'
+                                                                }
+                                                       },
+                                            'ShortName' => 'SyslogWriter',
+                                            'Source' => 'syslogwriter.cpp',
+                                            'SourceLine' => '32'
+                                          },
+                            '10388405' => {
+                                            'Class' => '10281228',
+                                            'Constructor' => 1,
+                                            'Header' => 'syslogwriter.h',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7helpers12SyslogWriterC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10238428'
+                                                                  'type' => '10284580'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'syslogHost1',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'syslogHostPort1',
+                                                                  'type' => '44633'
+                                                                }
+                                                       },
+                                            'ShortName' => 'SyslogWriter',
+                                            'Source' => 'syslogwriter.cpp',
+                                            'SourceLine' => '32'
+                                          },
+                            '10440811' => {
+                                            'Class' => '10440798',
+                                            'Header' => 'system.h',
+                                            'Line' => '47',
+                                            'MnglName' => '_ZN7log4cxx7helpers6System11getPropertyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'lkey',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzODBCAppender'
+                                            'Return' => '56900',
+                                            'ShortName' => 'getProperty',
+                                            'Source' => 'system.cpp',
+                                            'SourceLine' => '32',
+                                            'Static' => 1
                                           },
-                            '10364174' => {
-                                            'Class' => '323041',
+                            '10507273' => {
+                                            'Class' => '1689694',
                                             'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler8getClassEv',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemErrWriter8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365981'
+                                                                  'type' => '10508360'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '27',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '30',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '10364213' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler14getStaticClassEv',
-                                            'Return' => '55278',
+                            '10507312' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter14getStaticClassEv',
+                                            'Return' => '57815',
                                             'ShortName' => 'getStaticClass',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '27',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '30',
                                             'Static' => 1
                                           },
-                            '10364231' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler13registerClassEv',
-                                            'Return' => '55284',
+                            '10507330' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '27',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '30',
                                             'Static' => 1
                                           },
-                            '10364249' => {
-                                            'Class' => '323041',
+                            '10507348' => {
+                                            'Class' => '1689694',
                                             'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 2,
-                                            'Line' => '54',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler4castERKNS0_5ClassE',
+                                            'Line' => '35',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemErrWriter4castERKNS0_5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365981'
+                                                                  'type' => '10508360'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '10364293' => {
-                                            'Class' => '323041',
+                            '10507392' => {
+                                            'Class' => '1689694',
                                             'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 2,
-                                            'Line' => '57',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler10instanceofERKNS0_5ClassE',
+                                            'Line' => '38',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemErrWriter10instanceofERKNS0_5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365981'
+                                                                  'type' => '10508360'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10364374' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler9setLoggerERKSt10shared_ptrINS_6LoggerEE',
+                            '10507501' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter5closeERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'p1',
-                                                                  'type' => '3981393'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
                                             'Return' => '1',
-                                            'ShortName' => 'setLogger',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '35',
+                                            'ShortName' => 'close',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '40',
                                             'Virt' => 1,
-                                            'VirtPos' => '7'
+                                            'VirtPos' => '5'
                                           },
-                            '10364414' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler15activateOptionsERNS0_4PoolE',
+                            '10507541' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter5flushERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'p1',
-                                                                  'type' => '55243'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
                                             'Return' => '1',
-                                            'ShortName' => 'activateOptions',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '39',
+                                            'ShortName' => 'flush',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '44',
                                             'Virt' => 1,
-                                            'VirtPos' => '5'
+                                            'VirtPos' => '6'
                                           },
-                            '10364454' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                            '10507581' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '207559'
+                                                                  'name' => 'str',
+                                                                  'type' => '212489'
                                                                 },
                                                          '2' => {
                                                                   'name' => 'p2',
-                                                                  'type' => '207559'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi',
-                                                       '2' => 'rdx'
-                                                     },
                                             'Return' => '1',
-                                            'ShortName' => 'setOption',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '43',
+                                            'ShortName' => 'write',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '49',
                                             'Virt' => 1,
-                                            'VirtPos' => '6'
+                                            'VirtPos' => '7'
                                           },
-                            '10364499' => {
-                                            'Class' => '323041',
-                                            'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler5errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt9exceptioni',
+                            '10507626' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10365981'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'message',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'e',
-                                                                  'type' => '55462'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'p3',
-                                                                  'type' => '41771'
-                                                                }
-                                                       },
-                                            'Reg' => {
-                                                       '3' => 'rcx'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'error',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '47',
-                                            'Virt' => 1,
-                                            'VirtPos' => '8'
-                                          },
-                            '10364549' => {
-                                            'Class' => '323041',
-                                            'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler5errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt9exceptioniRKSt10shared_ptrINS_3spi12LoggingEventEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10365981'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'message',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'e',
-                                                                  'type' => '55462'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'errorCode',
-                                                                  'type' => '41771'
-                                                                },
-                                                         '4' => {
-                                                                  'name' => 'p4',
-                                                                  'type' => '120674'
-                                                                }
-                                                       },
-                                            'Reg' => {
-                                                       '4' => 'r8'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'error',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '57',
-                                            'Virt' => 1,
-                                            'VirtPos' => '10'
-                                          },
-                            '10364604' => {
-                                            'Class' => '323041',
-                                            'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler5errorERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10365981'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'message',
-                                                                  'type' => '207559'
+                                                                  'name' => 'str',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
                                             'Return' => '1',
-                                            'ShortName' => 'error',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '64',
-                                            'Virt' => 1,
-                                            'VirtPos' => '9'
+                                            'ShortName' => 'write',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '65',
+                                            'Static' => 1
                                           },
-                            '10364644' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler11setAppenderERKSt10shared_ptrINS_8AppenderEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10365947'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '891187'
-                                                                }
-                                                       },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
+                            '10507650' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter5flushEv',
                                             'Return' => '1',
-                                            'ShortName' => 'setAppender',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '74',
-                                            'Virt' => 1,
-                                            'VirtPos' => '11'
+                                            'ShortName' => 'flush',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '81',
+                                            'Static' => 1
                                           },
-                            '10364684' => {
-                                            'Class' => '323041',
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler17setBackupAppenderERKSt10shared_ptrINS_8AppenderEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10365947'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '891187'
-                                                                }
-                                                       },
-                                            'Reg' => {
-                                                       '0' => 'rdi',
-                                                       '1' => 'rsi'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'setBackupAppender',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '79',
-                                            'Virt' => 1,
-                                            'VirtPos' => '12'
+                            '10507730' => {
+                                            'Class' => '1689694',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter6isWideEv',
+                                            'Private' => 1,
+                                            'Return' => '44686',
+                                            'ShortName' => 'isWide',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '54',
+                                            'Static' => 1
                                           },
-                            '10364844' => {
-                                            'Class' => '10364724',
+                            '10507867' => {
+                                            'Class' => '10507746',
                                             'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 2,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandler7getNameB5cxx11Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriter7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366027'
+                                                                  'type' => '10508411'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10364883' => {
-                                            'Class' => '10364724',
+                            '10507906' => {
+                                            'Class' => '10507746',
                                             'Const' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 2,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZNK7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandler11newInstanceEv',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriter11newInstanceEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366027'
+                                                                  'type' => '10508411'
                                                                 }
                                                        },
-                                            'Return' => '325650',
+                                            'Return' => '1694851',
                                             'ShortName' => 'newInstance',
                                             'Virt' => 1,
-                                            'VirtPos' => '4'
+                                            'VirtPos' => '2'
                                           },
-                            '10365400' => {
+                            '10508043' => {
                                             'Data' => 1,
-                                            'Line' => '27',
-                                            'MnglName' => '_ZN7log4cxx7classes32OnlyOnceErrorHandlerRegistrationE',
+                                            'Line' => '30',
+                                            'MnglName' => '_ZN7log4cxx7classes27SystemErrWriterRegistrationE',
                                             'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'OnlyOnceErrorHandlerRegistration',
-                                            'Source' => 'onlyonceerrorhandler.cpp'
+                                            'Return' => '57821',
+                                            'ShortName' => 'SystemErrWriterRegistration',
+                                            'Source' => 'systemerrwriter.cpp'
                                           },
-                            '10366418' => {
-                                            'Artificial' => 1,
-                                            'Class' => '323041',
+                            '10513491' => {
+                                            'Class' => '1689694',
                                             'Destructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'InLine' => 1,
-                                            'Line' => '43',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandlerD0Ev',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 }
                                                        },
-                                            'ShortName' => 'OnlyOnceErrorHandler',
+                                            'ShortName' => 'SystemErrWriter',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '36',
                                             'Virt' => 1
                                           },
-                            '10366419' => {
-                                            'Artificial' => 1,
-                                            'Class' => '323041',
+                            '10513492' => {
+                                            'Class' => '1689694',
                                             'Destructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'InLine' => 1,
-                                            'Line' => '43',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandlerD2Ev',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 }
                                                        },
-                                            'ShortName' => 'OnlyOnceErrorHandler',
+                                            'ShortName' => 'SystemErrWriter',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '36',
                                             'Virt' => 1
                                           },
-                            '10367947' => {
-                                            'Artificial' => 1,
-                                            'Class' => '323041',
+                            '10513535' => {
+                                            'Class' => '1689694',
                                             'Destructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'InLine' => 1,
-                                            'Line' => '43',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandlerD1Ev',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 }
                                                        },
-                                            'ShortName' => 'OnlyOnceErrorHandler',
+                                            'ShortName' => 'SystemErrWriter',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '36',
                                             'Virt' => 1
                                           },
-                            '10373081' => {
-                                            'Class' => '323041',
+                            '10513603' => {
+                                            'Class' => '1689694',
                                             'Constructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandlerC1Ev',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 }
                                                        },
-                                            'ShortName' => 'OnlyOnceErrorHandler',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '29'
+                                            'ShortName' => 'SystemErrWriter',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '32'
                                           },
-                            '10375329' => {
-                                            'Class' => '323041',
+                            '10513604' => {
+                                            'Class' => '1689694',
                                             'Constructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandlerC2Ev',
+                                            'Header' => 'systemerrwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10365947'
+                                                                  'type' => '10508371'
                                                                 }
                                                        },
-                                            'ShortName' => 'OnlyOnceErrorHandler',
-                                            'Source' => 'onlyonceerrorhandler.cpp',
-                                            'SourceLine' => '29'
+                                            'ShortName' => 'SystemErrWriter',
+                                            'Source' => 'systemerrwriter.cpp',
+                                            'SourceLine' => '32'
                                           },
-                            '10379075' => {
+                            '10514045' => {
                                             'Artificial' => 1,
-                                            'Class' => '10364724',
+                                            'Class' => '10507746',
                                             'Destructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandlerD0Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366010'
+                                                                  'type' => '10508394'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOnlyOnceErrorHandler',
+                                            'ShortName' => 'ClazzSystemErrWriter',
                                             'Virt' => 1
                                           },
-                            '10379076' => {
+                            '10514046' => {
                                             'Artificial' => 1,
-                                            'Class' => '10364724',
+                                            'Class' => '10507746',
                                             'Destructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandlerD1Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366010'
+                                                                  'type' => '10508394'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOnlyOnceErrorHandler',
+                                            'ShortName' => 'ClazzSystemErrWriter',
                                             'Virt' => 1
                                           },
-                            '10379216' => {
+                            '10514089' => {
                                             'Artificial' => 1,
-                                            'Class' => '10364724',
+                                            'Class' => '10507746',
                                             'Destructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandlerD2Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366010'
+                                                                  'type' => '10508394'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOnlyOnceErrorHandler',
+                                            'ShortName' => 'ClazzSystemErrWriter',
                                             'Virt' => 1
                                           },
-                            '10379306' => {
+                            '10514157' => {
                                             'Artificial' => 1,
-                                            'Class' => '10364724',
+                                            'Class' => '10507746',
                                             'Constructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandlerC2Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366010'
+                                                                  'type' => '10508394'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOnlyOnceErrorHandler'
+                                            'ShortName' => 'ClazzSystemErrWriter'
                                           },
-                            '10379307' => {
+                            '10514158' => {
                                             'Artificial' => 1,
-                                            'Class' => '10364724',
+                                            'Class' => '10507746',
                                             'Constructor' => 1,
-                                            'Header' => 'onlyonceerrorhandler.h',
+                                            'Header' => 'systemerrwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx7helpers20OnlyOnceErrorHandler25ClazzOnlyOnceErrorHandlerC1Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemErrWriter20ClazzSystemErrWriterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10366010'
+                                                                  'type' => '10508394'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOnlyOnceErrorHandler'
+                                            'ShortName' => 'ClazzSystemErrWriter'
                                           },
-                            '1043993' => {
-                                           'Class' => '1043859',
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '45',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer5clearEv',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi'
-                                                    },
-                                           'Return' => '1',
-                                           'ShortName' => 'clear',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '34'
-                                         },
-                            '1044020' => {
-                                           'Class' => '1043859',
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '46',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer4flipEv',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi'
-                                                    },
-                                           'Return' => '1',
-                                           'ShortName' => 'flip',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '40'
-                                         },
-                            '1044202' => {
-                                           'Class' => '1043859',
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '68',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer5limitEm',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'newLimit',
-                                                                 'type' => '41980'
-                                                               }
-                                                      },
-                                           'Return' => '1',
-                                           'ShortName' => 'limit',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '58'
-                                         },
-                            '1044296' => {
-                                           'Class' => '1043859',
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '77',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer8positionEm',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'newPosition',
-                                                                 'type' => '41980'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi',
-                                                      '1' => 'rsi'
-                                                    },
-                                           'Return' => '1',
-                                           'ShortName' => 'position',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '46'
-                                         },
-                            '1044328' => {
-                                           'Class' => '1043859',
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '79',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBuffer3putEc',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'byte',
-                                                                 'type' => '42164'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi',
-                                                      '1' => 'rsi'
-                                                    },
-                                           'Return' => '41824',
-                                           'ShortName' => 'put',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '69'
-                                         },
-                            '1044621' => {
-                                           'Class' => '1044570',
-                                           'Const' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZNK7log4cxx7helpers20ByteArrayInputStream8getClassEv',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046215'
-                                                               }
-                                                      },
-                                           'Return' => '55278',
-                                           'ShortName' => 'getClass',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '29',
-                                           'Virt' => 1,
-                                           'VirtPos' => '0'
-                                         },
-                            '1044660' => {
-                                           'Class' => '1044570',
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream14getStaticClassEv',
-                                           'Return' => '55278',
-                                           'ShortName' => 'getStaticClass',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '29',
-                                           'Static' => 1
-                                         },
-                            '1044678' => {
-                                           'Class' => '1044570',
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream13registerClassEv',
-                                           'Return' => '55284',
-                                           'ShortName' => 'registerClass',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '29',
-                                           'Static' => 1
-                                         },
-                            '1044696' => {
-                                           'Class' => '1044570',
-                                           'Const' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '49',
-                                           'MnglName' => '_ZNK7log4cxx7helpers20ByteArrayInputStream4castERKNS0_5ClassE',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046215'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'clazz',
-                                                                 'type' => '55278'
-                                                               }
-                                                      },
-                                           'Return' => '45584',
-                                           'ShortName' => 'cast',
-                                           'Virt' => 1,
-                                           'VirtPos' => '4'
-                                         },
-                            '1044740' => {
-                                           'Class' => '1044570',
-                                           'Const' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '52',
-                                           'MnglName' => '_ZNK7log4cxx7helpers20ByteArrayInputStream10instanceofERKNS0_5ClassE',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046215'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'clazz',
-                                                                 'type' => '55278'
-                                                               }
-                                                      },
-                                           'Return' => '41824',
-                                           'ShortName' => 'instanceof',
-                                           'Virt' => 1,
-                                           'VirtPos' => '3'
-                                         },
-                            '1044854' => {
-                                           'Class' => '1044570',
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream5closeEv',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi'
-                                                    },
-                                           'Return' => '1',
-                                           'ShortName' => 'close',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '43',
-                                           'Virt' => 1,
-                                           'VirtPos' => '6'
-                                         },
-                            '1044890' => {
-                                           'Class' => '1044570',
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream4readERNS0_10ByteBufferE',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'dst',
-                                                                 'type' => '1045313'
-                                                               }
-                                                      },
-                                           'Return' => '41771',
-                                           'ShortName' => 'read',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '48',
-                                           'Virt' => 1,
-                                           'VirtPos' => '5'
-                                         },
-                            '1045121' => {
-                                           'Class' => '1045000',
-                                           'Const' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '48',
-                                           'MnglName' => '_ZNK7log4cxx7helpers20ByteArrayInputStream25ClazzByteArrayInputStream7getNameB5cxx11Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046266'
-                                                               }
-                                                      },
-                                           'Return' => '54480',
-                                           'ShortName' => 'getName',
-                                           'Virt' => 1,
-                                           'VirtPos' => '3'
-                                         },
-                            '1045179' => {
-                                           'Class' => '1045169',
-                                           'Const' => 1,
-                                           'Header' => 'inputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '38',
-                                           'MnglName' => '_ZNK7log4cxx7helpers11InputStream4castERKNS0_5ClassE',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1056469'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'clazz',
-                                                                 'type' => '55278'
-                                                               }
-                                                      },
-                                           'Return' => '45584',
-                                           'ShortName' => 'cast',
-                                           'Virt' => 1,
-                                           'VirtPos' => '4'
-                                         },
-                            '1045223' => {
-                                           'Class' => '1045169',
-                                           'Header' => 'inputstream.h',
-                                           'Line' => '37',
-                                           'MnglName' => '_ZN7log4cxx7helpers11InputStream14getStaticClassEv',
-                                           'Private' => 1,
-                                           'Return' => '55278',
-                                           'ShortName' => 'getStaticClass',
-                                           'Source' => 'inputstream.cpp',
-                                           'SourceLine' => '24',
-                                           'Static' => 1
-                                         },
-                            '1045294' => {
-                                           'Data' => 1,
-                                           'Line' => '29',
-                                           'MnglName' => '_ZN7log4cxx7classes32ByteArrayInputStreamRegistrationE',
-                                           'NameSpace' => 'log4cxx::classes',
-                                           'Return' => '55284',
-                                           'ShortName' => 'ByteArrayInputStreamRegistration',
-                                           'Source' => 'bytearrayinputstream.cpp'
-                                         },
-                            '10456586' => {
-                                            'Class' => '10456573',
-                                            'Header' => 'system.h',
-                                            'Line' => '47',
-                                            'MnglName' => '_ZN7log4cxx7helpers6System11getPropertyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                            '10575395' => {
+                                            'Class' => '1689684',
+                                            'Const' => 1,
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemOutWriter8getClassEv',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'lkey',
-                                                                  'type' => '207559'
+                                                                  'name' => 'this',
+                                                                  'type' => '10576482'
                                                                 }
                                                        },
-                                            'Return' => '54480',
-                                            'ShortName' => 'getProperty',
-                                            'Source' => 'system.cpp',
-                                            'SourceLine' => '32',
+                                            'Return' => '57815',
+                                            'ShortName' => 'getClass',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '30',
+                                            'Virt' => 1,
+                                            'VirtPos' => '0'
+                                          },
+                            '10575434' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter14getStaticClassEv',
+                                            'Return' => '57815',
+                                            'ShortName' => 'getStaticClass',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '30',
                                             'Static' => 1
                                           },
-                            '10458181' => {
-                                            'Header' => 'object.h',
-                                            'InLine' => 2,
-                                            'Line' => '116',
-                                            'MnglName' => '_ZN7log4cxx4castINS_3spi12ConfiguratorENS_7helpers6ObjectELb0ELb1EEESt10shared_ptrIT_ERKS5_IT0_E',
-                                            'NameSpace' => 'log4cxx',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'incoming',
-                                                                  'type' => '2818137'
-                                                                }
-                                                       },
-                                            'Return' => '10433090',
-                                            'ShortName' => 'cast<log4cxx::spi::Configurator, log4cxx::helpers::Object>',
-                                            'TParam' => {
-                                                          '0' => {
-                                                                   'key' => 'Ret',
-                                                                   'type' => '1902527'
-                                                                 },
-                                                          '1' => {
-                                                                   'key' => 'Type',
-                                                                   'type' => '54460'
-                                                                 }
-                                                        }
+                            '10575452' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter13registerClassEv',
+                                            'Return' => '57821',
+                                            'ShortName' => 'registerClass',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '30',
+                                            'Static' => 1
                                           },
-                            '1051803' => {
-                                           'Class' => '1044570',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStreamD0Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayInputStream',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '38',
-                                           'Virt' => 1
-                                         },
-                            '1051804' => {
-                                           'Class' => '1044570',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStreamD1Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayInputStream',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '38',
-                                           'Virt' => 1
-                                         },
-                            '1051898' => {
-                                           'Class' => '1044570',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStreamD2Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayInputStream',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '38',
-                                           'Virt' => 1
-                                         },
-                            '1052627' => {
-                                           'Class' => '1044570',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStreamC2ERKSt6vectorIhSaIhEE',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'bytes',
-                                                                 'type' => '1045562'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayInputStream',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '31'
-                                         },
-                            '1052628' => {
-                                           'Class' => '1044570',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStreamC1ERKSt6vectorIhSaIhEE',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046226'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'bytes',
-                                                                 'type' => '1045562'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayInputStream',
-                                           'Source' => 'bytearrayinputstream.cpp',
-                                           'SourceLine' => '31'
-                                         },
-                            '1056209' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1045000',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '48',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream25ClazzByteArrayInputStreamD0Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046249'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ClazzByteArrayInputStream',
-                                           'Virt' => 1
-                                         },
-                            '1056210' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1045000',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '48',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream25ClazzByteArrayInputStreamD1Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046249'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ClazzByteArrayInputStream',
-                                           'Virt' => 1
-                                         },
-                            '1056350' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1045000',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '48',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream25ClazzByteArrayInputStreamD2Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046249'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ClazzByteArrayInputStream',
-                                           'Virt' => 1
-                                         },
-                            '1056440' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1045000',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '48',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream25ClazzByteArrayInputStreamC2Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046249'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ClazzByteArrayInputStream'
-                                         },
-                            '1056441' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1045000',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytearrayinputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '48',
-                                           'MnglName' => '_ZN7log4cxx7helpers20ByteArrayInputStream25ClazzByteArrayInputStreamC1Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1046249'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ClazzByteArrayInputStream'
-                                         },
-                            '10670013' => {
-                                            'Class' => '1117909',
+                            '10575470' => {
+                                            'Class' => '1689684',
                                             'Const' => 1,
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers12OutputStream8getClassEv',
+                                            'Header' => 'systemoutwriter.h',
+                                            'InLine' => 2,
+                                            'Line' => '35',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemOutWriter4castERKNS0_5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '1133894'
+                                                                  'type' => '10576482'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'clazz',
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '55278',
-                                            'ShortName' => 'getClass',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '25',
+                                            'Return' => '48431',
+                                            'ShortName' => 'cast',
                                             'Virt' => 1,
-                                            'VirtPos' => '0'
-                                          },
-                            '10670070' => {
-                                            'Class' => '1117909',
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream13registerClassEv',
-                                            'Return' => '55284',
-                                            'ShortName' => 'registerClass',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '25',
-                                            'Static' => 1
+                                            'VirtPos' => '4'
                                           },
-                            '10670132' => {
-                                            'Class' => '1117909',
+                            '10575514' => {
+                                            'Class' => '1689684',
                                             'Const' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 2,
-                                            'Line' => '42',
-                                            'MnglName' => '_ZNK7log4cxx7helpers12OutputStream10instanceofERKNS0_5ClassE',
+                                            'Line' => '38',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemOutWriter10instanceofERKNS0_5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '1133894'
+                                                                  'type' => '10576482'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10670240' => {
-                                            'Class' => '1117909',
-                                            'Header' => 'outputstream.h',
-                                            'Line' => '49',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream5closeERNS0_4PoolE',
+                            '10575623' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter5closeERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '4363530'
+                                                                  'type' => '10576493'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'p1',
-                                                                  'type' => '55243'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'PureVirt' => 1,
                                             'Return' => '1',
                                             'ShortName' => 'close',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '40',
+                                            'Virt' => 1,
                                             'VirtPos' => '5'
                                           },
-                            '10670280' => {
-                                            'Class' => '1117909',
-                                            'Header' => 'outputstream.h',
-                                            'Line' => '50',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream5flushERNS0_4PoolE',
+                            '10575663' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter5flushERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '4363530'
+                                                                  'type' => '10576493'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'p1',
-                                                                  'type' => '55243'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'PureVirt' => 1,
                                             'Return' => '1',
                                             'ShortName' => 'flush',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '44',
+                                            'Virt' => 1,
                                             'VirtPos' => '6'
                                           },
-                            '10670320' => {
-                                            'Class' => '1117909',
-                                            'Header' => 'outputstream.h',
-                                            'Line' => '51',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream5writeERNS0_10ByteBufferERNS0_4PoolE',
+                            '10575703' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '4363530'
+                                                                  'type' => '10576493'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '1045313'
+                                                                  'name' => 'str',
+                                                                  'type' => '212489'
                                                                 },
                                                          '2' => {
                                                                   'name' => 'p2',
-                                                                  'type' => '55243'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'PureVirt' => 1,
                                             'Return' => '1',
                                             'ShortName' => 'write',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '49',
+                                            'Virt' => 1,
                                             'VirtPos' => '7'
                                           },
-                            '10670551' => {
-                                            'Class' => '10670431',
+                            '10575748' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'str',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '1',
+                                            'ShortName' => 'write',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '65',
+                                            'Static' => 1
+                                          },
+                            '10575772' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter5flushEv',
+                                            'Return' => '1',
+                                            'ShortName' => 'flush',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '81',
+                                            'Static' => 1
+                                          },
+                            '10575852' => {
+                                            'Class' => '1689684',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter6isWideEv',
+                                            'Private' => 1,
+                                            'Return' => '44686',
+                                            'ShortName' => 'isWide',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '54',
+                                            'Static' => 1
+                                          },
+                            '10575989' => {
+                                            'Class' => '10575868',
                                             'Const' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 2,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZNK7log4cxx7helpers12OutputStream17ClazzOutputStream7getNameB5cxx11Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriter7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670932'
+                                                                  'type' => '10576533'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10670702' => {
+                            '10576028' => {
+                                            'Class' => '10575868',
+                                            'Const' => 1,
+                                            'Header' => 'systemoutwriter.h',
+                                            'InLine' => 2,
+                                            'Line' => '34',
+                                            'MnglName' => '_ZNK7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriter11newInstanceEv',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10576533'
+                                                                }
+                                                       },
+                                            'Return' => '1694680',
+                                            'ShortName' => 'newInstance',
+                                            'Virt' => 1,
+                                            'VirtPos' => '2'
+                                          },
+                            '10576165' => {
                                             'Data' => 1,
-                                            'Line' => '25',
-                                            'MnglName' => '_ZN7log4cxx7classes24OutputStreamRegistrationE',
+                                            'Line' => '30',
+                                            'MnglName' => '_ZN7log4cxx7classes27SystemOutWriterRegistrationE',
                                             'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'OutputStreamRegistration',
-                                            'Source' => 'outputstream.cpp'
+                                            'Return' => '57821',
+                                            'ShortName' => 'SystemOutWriterRegistration',
+                                            'Source' => 'systemoutwriter.cpp'
                                           },
-                            '10673861' => {
-                                            'Class' => '1117909',
+                            '10581613' => {
+                                            'Class' => '1689684',
                                             'Destructor' => 1,
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStreamD0Ev',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670892'
+                                                                  'type' => '10576493'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'OutputStream',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '31',
+                                            'ShortName' => 'SystemOutWriter',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '36',
                                             'Virt' => 1
                                           },
-                            '10673862' => {
-                                            'Class' => '1117909',
+                            '10581614' => {
+                                            'Class' => '1689684',
                                             'Destructor' => 1,
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStreamD1Ev',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670892'
+                                                                  'type' => '10576493'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'OutputStream',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '31',
+                                            'ShortName' => 'SystemOutWriter',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '36',
                                             'Virt' => 1
                                           },
-                            '10673956' => {
-                                            'Class' => '1117909',
+                            '10581657' => {
+                                            'Class' => '1689684',
                                             'Destructor' => 1,
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStreamD2Ev',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670892'
+                                                                  'type' => '10576493'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'OutputStream',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '31',
+                                            'ShortName' => 'SystemOutWriter',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '36',
                                             'Virt' => 1
                                           },
-                            '10674071' => {
-                                            'Class' => '1117909',
+                            '10581725' => {
+                                            'Class' => '1689684',
                                             'Constructor' => 1,
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStreamC2Ev',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670892'
+                                                                  'type' => '10576493'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'OutputStream',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '27'
+                                            'ShortName' => 'SystemOutWriter',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '32'
                                           },
-                            '10674072' => {
-                                            'Class' => '1117909',
+                            '10581726' => {
+                                            'Class' => '1689684',
                                             'Constructor' => 1,
-                                            'Header' => 'outputstream.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStreamC1Ev',
+                                            'Header' => 'systemoutwriter.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670892'
+                                                                  'type' => '10576493'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'OutputStream',
-                                            'Source' => 'outputstream.cpp',
-                                            'SourceLine' => '27'
+                                            'ShortName' => 'SystemOutWriter',
+                                            'Source' => 'systemoutwriter.cpp',
+                                            'SourceLine' => '32'
                                           },
-                            '10675752' => {
+                            '10582167' => {
                                             'Artificial' => 1,
-                                            'Class' => '10670431',
+                                            'Class' => '10575868',
                                             'Destructor' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream17ClazzOutputStreamD0Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670915'
+                                                                  'type' => '10576516'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStream',
+                                            'ShortName' => 'ClazzSystemOutWriter',
                                             'Virt' => 1
                                           },
-                            '10675753' => {
+                            '10582168' => {
                                             'Artificial' => 1,
-                                            'Class' => '10670431',
+                                            'Class' => '10575868',
                                             'Destructor' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream17ClazzOutputStreamD1Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670915'
+                                                                  'type' => '10576516'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStream',
+                                            'ShortName' => 'ClazzSystemOutWriter',
                                             'Virt' => 1
                                           },
-                            '10675893' => {
+                            '10582211' => {
                                             'Artificial' => 1,
-                                            'Class' => '10670431',
+                                            'Class' => '10575868',
                                             'Destructor' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream17ClazzOutputStreamD2Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670915'
+                                                                  'type' => '10576516'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStream',
+                                            'ShortName' => 'ClazzSystemOutWriter',
                                             'Virt' => 1
                                           },
-                            '10675983' => {
+                            '10582279' => {
                                             'Artificial' => 1,
-                                            'Class' => '10670431',
+                                            'Class' => '10575868',
                                             'Constructor' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream17ClazzOutputStreamC2Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670915'
+                                                                  'type' => '10576516'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStream'
+                                            'ShortName' => 'ClazzSystemOutWriter'
                                           },
-                            '10675984' => {
+                            '10582280' => {
                                             'Artificial' => 1,
-                                            'Class' => '10670431',
+                                            'Class' => '10575868',
                                             'Constructor' => 1,
-                                            'Header' => 'outputstream.h',
+                                            'Header' => 'systemoutwriter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7helpers12OutputStream17ClazzOutputStreamC1Ev',
+                                            'Line' => '34',
+                                            'MnglName' => '_ZN7log4cxx7helpers15SystemOutWriter20ClazzSystemOutWriterC1Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10576516'
+                                                                }
+                                                       },
+                                            'ShortName' => 'ClazzSystemOutWriter'
+                                          },
+                            '10685773' => {
+                                            'Class' => '586679',
+                                            'Header' => 'threadutility.h',
+                                            'InLine' => 2,
+                                            'Line' => '123',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtility12createThreadIMNS_3net14TelnetAppenderEFvvEJPS4_EEESt6threadNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEOT_DpOT0_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10670915'
+                                                                  'type' => '591646'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'name',
+                                                                  'type' => '56900'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'f',
+                                                                  'type' => '10692139'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'p3',
+                                                                  'type' => '10692145'
+                                                                },
+                                                         '4' => {
+                                                                  'name' => 'args#0',
+                                                                  'type' => '10692145'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStream'
+                                            'Return' => '508224',
+                                            'ShortName' => 'createThread<void()(log4cxx::net::TelnetAppender::*), log4cxx::net::TelnetAppender*>',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => 'Function',
+                                                                   'type' => '10691884'
+                                                                 },
+                                                          '1' => {
+                                                                   'key' => undef,
+                                                                   'type' => '10691873'
+                                                                 }
+                                                        }
                                           },
-                            '10733852' => {
-                                            'Class' => '10733802',
+                            '10686808' => {
+                                            'Class' => '10686575',
                                             'Const' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers18OutputStreamWriter8getClassEv',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735524'
+                                                                  'type' => '10692422'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '28',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '35',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '10733891' => {
-                                            'Class' => '10733802',
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter14getStaticClassEv',
-                                            'Return' => '55278',
+                            '10686847' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender14getStaticClassEv',
+                                            'Return' => '57815',
                                             'ShortName' => 'getStaticClass',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '28',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '35',
                                             'Static' => 1
                                           },
-                            '10733909' => {
-                                            'Class' => '10733802',
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter13registerClassEv',
-                                            'Return' => '55284',
+                            '10686865' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '28',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '35',
                                             'Static' => 1
                                           },
-                            '10733927' => {
-                                            'Class' => '10733802',
+                            '10686883' => {
+                                            'Class' => '10686575',
                                             'Const' => 1,
-                                            'Header' => 'outputstreamwriter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 2,
-                                            'Line' => '42',
-                                            'MnglName' => '_ZNK7log4cxx7helpers18OutputStreamWriter4castERKNS0_5ClassE',
+                                            'Line' => '81',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender4castERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735524'
+                                                                  'type' => '10692422'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '10733971' => {
-                                            'Class' => '10733802',
+                            '10686927' => {
+                                            'Class' => '10686575',
                                             'Const' => 1,
-                                            'Header' => 'outputstreamwriter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 2,
-                                            'Line' => '45',
-                                            'MnglName' => '_ZNK7log4cxx7helpers18OutputStreamWriter10instanceofERKNS0_5ClassE',
+                                            'Line' => '84',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender10instanceofERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735524'
+                                                                  'type' => '10692422'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10734122' => {
-                                            'Class' => '10733802',
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter5closeERNS0_4PoolE',
+                            '10687051' => {
+                                            'Class' => '10686575',
+                                            'Const' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'InLine' => 2,
+                                            'Line' => '92',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender14requiresLayoutEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'type' => '10692422'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'close',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '58',
+                                            'Return' => '44686',
+                                            'ShortName' => 'requiresLayout',
                                             'Virt' => 1,
-                                            'VirtPos' => '5'
+                                            'VirtPos' => '16'
                                           },
-                            '10734162' => {
-                                            'Class' => '10733802',
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter5flushERNS0_4PoolE',
+                            '10687090' => {
+                                            'Class' => '10686575',
+                                            'Const' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender11getEncodingB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'type' => '10692422'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'flush',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '63',
-                                            'Virt' => 1,
-                                            'VirtPos' => '6'
+                                            'Return' => '56900',
+                                            'ShortName' => 'getEncoding',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '101'
                                           },
-                            '10734202' => {
-                                            'Class' => '10733802',
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4PoolE',
+                            '10687121' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender11setEncodingERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10691879'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'str',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '55243'
+                                                                  'name' => 'value',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
                                             'Return' => '1',
-                                            'ShortName' => 'write',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '68',
-                                            'Virt' => 1,
-                                            'VirtPos' => '7'
+                                            'ShortName' => 'setEncoding',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '107'
                                           },
-                            '10734465' => {
-                                            'Class' => '10734344',
-                                            'Const' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'InLine' => 2,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZNK7log4cxx7helpers18OutputStreamWriter23ClazzOutputStreamWriter7getNameB5cxx11Ev',
+                            '10687153' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender15activateOptionsERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735587'
+                                                                  'type' => '10691879'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'p1',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Return' => '54480',
-                                            'ShortName' => 'getName',
+                                            'Return' => '1',
+                                            'ShortName' => 'activateOptions',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '73',
                                             'Virt' => 1,
-                                            'VirtPos' => '3'
-                                          },
-                            '10735037' => {
-                                            'Data' => 1,
-                                            'Line' => '28',
-                                            'MnglName' => '_ZN7log4cxx7classes30OutputStreamWriterRegistrationE',
-                                            'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'OutputStreamWriterRegistration',
-                                            'Source' => 'outputstreamwriter.cpp'
+                                            'VirtPos' => '5'
                                           },
-                            '10742828' => {
-                                            'Class' => '10733802',
-                                            'Destructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterD0Ev',
+                            '10687193' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10691879'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'option',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'value',
+                                                                  'type' => '212489'
                                                                 }
                                                        },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '54',
-                                            'Virt' => 1
+                                            'Return' => '1',
+                                            'ShortName' => 'setOption',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '84',
+                                            'Virt' => 1,
+                                            'VirtPos' => '6'
                                           },
-                            '10742829' => {
-                                            'Class' => '10733802',
-                                            'Destructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterD1Ev',
+                            '10687238' => {
+                                            'Class' => '10686575',
+                                            'Const' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender7getPortEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10692422'
                                                                 }
                                                        },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '54',
-                                            'Virt' => 1
+                                            'Return' => '44633',
+                                            'ShortName' => 'getPort',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '314'
                                           },
-                            '10742923' => {
-                                            'Class' => '10733802',
-                                            'Destructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterD2Ev',
+                            '10687270' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender7setPortEi',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10691879'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'port1',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '54',
-                                            'Virt' => 1
+                                            'Return' => '1',
+                                            'ShortName' => 'setPort',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '318'
                                           },
-                            '10744360' => {
-                                            'Class' => '10733802',
-                                            'Constructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterC2ERSt10shared_ptrINS0_12OutputStreamEERS2_INS0_14CharsetEncoderEE',
+                            '10687303' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender5closeEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'out1',
-                                                                  'type' => '10735540'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'enc1',
-                                                                  'type' => '1498642'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '39'
+                                            'Return' => '1',
+                                            'ShortName' => 'close',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '115',
+                                            'Virt' => 1,
+                                            'VirtPos' => '10'
                                           },
-                            '10744361' => {
-                                            'Class' => '10733802',
-                                            'Constructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterC1ERSt10shared_ptrINS0_12OutputStreamEERS2_INS0_14CharsetEncoderEE',
+                            '10687338' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender6appendERKSt10shared_ptrINS_3spi12LoggingEventEERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10691879'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'out1',
-                                                                  'type' => '10735540'
+                                                                  'name' => 'event',
+                                                                  'type' => '129521'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'enc1',
-                                                                  'type' => '1498642'
+                                                                  'name' => 'p',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '39'
+                                            'Protected' => 1,
+                                            'Return' => '1',
+                                            'ShortName' => 'append',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '199',
+                                            'Virt' => 1,
+                                            'VirtPos' => '17'
                                           },
-                            '10749337' => {
-                                            'Class' => '10733802',
-                                            'Constructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterC2ERSt10shared_ptrINS0_12OutputStreamEE',
+                            '10687459' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender5writeERNS_7helpers10ByteBufferE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10691879'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'out1',
-                                                                  'type' => '10735540'
+                                                                  'name' => 'buf',
+                                                                  'type' => '881448'
                                                                 }
                                                        },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '30'
+                                            'Private' => 1,
+                                            'Return' => '1',
+                                            'ShortName' => 'write',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '159'
                                           },
-                            '10749338' => {
-                                            'Class' => '10733802',
-                                            'Constructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriterC1ERSt10shared_ptrINS0_12OutputStreamEE',
+                            '10687490' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender11writeStatusERKSt10shared_ptrINS_7helpers6SocketEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735535'
+                                                                  'type' => '10691879'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'out1',
-                                                                  'type' => '10735540'
-                                                                }
-                                                       },
-                                            'ShortName' => 'OutputStreamWriter',
-                                            'Source' => 'outputstreamwriter.cpp',
-                                            'SourceLine' => '30'
-                                          },
-                            '10753978' => {
-                                            'Artificial' => 1,
-                                            'Class' => '10734344',
-                                            'Destructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'InLine' => 1,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter23ClazzOutputStreamWriterD0Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10735570'
-                                                                }
-                                                       },
-                                            'ShortName' => 'ClazzOutputStreamWriter',
-                                            'Virt' => 1
-                                          },
-                            '10753979' => {
-                                            'Artificial' => 1,
-                                            'Class' => '10734344',
-                                            'Destructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'InLine' => 1,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter23ClazzOutputStreamWriterD1Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10735570'
-                                                                }
-                                                       },
-                                            'ShortName' => 'ClazzOutputStreamWriter',
-                                            'Virt' => 1
-                                          },
-                            '10754119' => {
-                                            'Artificial' => 1,
-                                            'Class' => '10734344',
-                                            'Destructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'InLine' => 1,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter23ClazzOutputStreamWriterD2Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10735570'
+                                                                  'name' => 'socket',
+                                                                  'type' => '9921244'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'msg',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'p',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStreamWriter',
-                                            'Virt' => 1
+                                            'Private' => 1,
+                                            'Return' => '1',
+                                            'ShortName' => 'writeStatus',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '182'
                                           },
-                            '10754209' => {
-                                            'Artificial' => 1,
-                                            'Class' => '10734344',
-                                            'Constructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'InLine' => 1,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter23ClazzOutputStreamWriterC2Ev',
+                            '10687531' => {
+                                            'Class' => '10686575',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender17acceptConnectionsEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735570'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStreamWriter'
+                                            'Private' => 1,
+                                            'Return' => '1',
+                                            'ShortName' => 'acceptConnections',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '237'
                                           },
-                            '10754210' => {
-                                            'Artificial' => 1,
-                                            'Class' => '10734344',
-                                            'Constructor' => 1,
-                                            'Header' => 'outputstreamwriter.h',
-                                            'InLine' => 1,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZN7log4cxx7helpers18OutputStreamWriter23ClazzOutputStreamWriterC1Ev',
+                            '10687678' => {
+                                            'Class' => '10687557',
+                                            'Const' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'InLine' => 2,
+                                            'Line' => '80',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender19ClazzTelnetAppender7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10735570'
+                                                                  'type' => '10692485'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzOutputStreamWriter'
+                                            'Return' => '56900',
+                                            'ShortName' => 'getName',
+                                            'Virt' => 1,
+                                            'VirtPos' => '3'
                                           },
-                            '10818634' => {
-                                            'Class' => '1783648',
+                            '10687717' => {
+                                            'Class' => '10687557',
                                             'Const' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZNK7log4cxx7pattern16PatternConverter8getClassEv',
+                                            'Header' => 'telnetappender.h',
+                                            'InLine' => 2,
+                                            'Line' => '80',
+                                            'MnglName' => '_ZNK7log4cxx3net14TelnetAppender19ClazzTelnetAppender11newInstanceEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '1806609'
+                                                                  'type' => '10692485'
                                                                 }
                                                        },
-                                            'Return' => '55278',
-                                            'ShortName' => 'getClass',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '28',
+                                            'Return' => '10691873',
+                                            'ShortName' => 'newInstance',
                                             'Virt' => 1,
-                                            'VirtPos' => '0'
+                                            'VirtPos' => '4'
                                           },
-                            '10818691' => {
-                                            'Class' => '1783648',
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverter13registerClassEv',
-                                            'Return' => '55284',
-                                            'ShortName' => 'registerClass',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '28',
-                                            'Static' => 1
+                            '10687790' => {
+                                            'Data' => 1,
+                                            'Line' => '35',
+                                            'MnglName' => '_ZN7log4cxx7classes26TelnetAppenderRegistrationE',
+                                            'NameSpace' => 'log4cxx::classes',
+                                            'Return' => '57821',
+                                            'ShortName' => 'TelnetAppenderRegistration',
+                                            'Source' => 'telnetappender.cpp'
                                           },
-                            '10818797' => {
-                                            'Class' => '1783648',
-                                            'Const' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'Line' => '87',
-                                            'MnglName' => '_ZNK7log4cxx7pattern16PatternConverter6formatERKSt10shared_ptrINS_7helpers6ObjectEERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS3_4PoolE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '1806603'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '641215'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'p2',
-                                                                  'type' => '324863'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'p3',
-                                                                  'type' => '55243'
-                                                                }
-                                                       },
-                                            'PureVirt' => 1,
-                                            'Return' => '1',
-                                            'ShortName' => 'format',
-                                            'VirtPos' => '5'
+                            '10691050' => {
+                                            'Class' => '10686575',
+                                            'Data' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender12DEFAULT_PORTE',
+                                            'Return' => '44641',
+                                            'ShortName' => 'DEFAULT_PORT',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '58',
+                                            'Value' => '23'
                                           },
-                            '10818848' => {
-                                            'Class' => '1783648',
-                                            'Const' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZNK7log4cxx7pattern16PatternConverter7getNameB5cxx11Ev',
+                            '10691059' => {
+                                            'Class' => '10686575',
+                                            'Data' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender15MAX_CONNECTIONSE',
+                                            'Return' => '44641',
+                                            'ShortName' => 'MAX_CONNECTIONS',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '61',
+                                            'Value' => '20'
+                                          },
+                            '10713482' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10686593',
+                                            'Destructor' => 1,
+                                            'InLine' => 1,
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender18TelnetAppenderPrivD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '1806609'
+                                                                  'type' => '10691033'
                                                                 }
                                                        },
-                                            'Return' => '54480',
-                                            'ShortName' => 'getName',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '40'
+                                            'ShortName' => 'TelnetAppenderPriv',
+                                            'Source' => 'telnetappender.cpp'
                                           },
-                            '10818879' => {
-                                            'Class' => '1783648',
-                                            'Const' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZNK7log4cxx7pattern16PatternConverter13getStyleClassB5cxx11ERKSt10shared_ptrINS_7helpers6ObjectEE',
+                            '10723320' => {
+                                            'Class' => '10686575',
+                                            'Destructor' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppenderD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '1806609'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'p1',
-                                                                  'type' => '641215'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '1' => 'rdx'
-                                                     },
-                                            'Return' => '54480',
-                                            'ShortName' => 'getStyleClass',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '45',
-                                            'Virt' => 1,
-                                            'VirtPos' => '6'
+                                            'ShortName' => 'TelnetAppender',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '68',
+                                            'Virt' => 1
                                           },
-                            '10819072' => {
-                                            'Class' => '10818951',
-                                            'Const' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'InLine' => 2,
-                                            'Line' => '76',
-                                            'MnglName' => '_ZNK7log4cxx7pattern16PatternConverter21ClazzPatternConverter7getNameB5cxx11Ev',
+                            '10723364' => {
+                                            'Class' => '10686575',
+                                            'Destructor' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppenderD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819480'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'Return' => '54480',
-                                            'ShortName' => 'getName',
-                                            'Virt' => 1,
-                                            'VirtPos' => '3'
-                                          },
-                            '10819130' => {
-                                            'Data' => 1,
-                                            'Line' => '28',
-                                            'MnglName' => '_ZN7log4cxx7classes28PatternConverterRegistrationE',
-                                            'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'PatternConverterRegistration',
-                                            'Source' => 'patternconverter.cpp'
+                                            'ShortName' => 'TelnetAppender',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '68',
+                                            'Virt' => 1
                                           },
-                            '10831492' => {
-                                            'Class' => '1783648',
+                            '10723408' => {
+                                            'Class' => '10686575',
                                             'Destructor' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverterD0Ev',
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppenderD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819418'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'PatternConverter',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '36',
+                                            'ShortName' => 'TelnetAppender',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '68',
                                             'Virt' => 1
                                           },
-                            '10831591' => {
-                                            'Class' => '1783648',
-                                            'Destructor' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverterD1Ev',
+                            '10723502' => {
+                                            'Class' => '10686575',
+                                            'Constructor' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppenderC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819418'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'PatternConverter',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '36',
-                                            'Virt' => 1
+                                            'ShortName' => 'TelnetAppender',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '63'
                                           },
-                            '10832864' => {
-                                            'Class' => '1783648',
-                                            'Destructor' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverterD2Ev',
+                            '10723546' => {
+                                            'Class' => '10686575',
+                                            'Constructor' => 1,
+                                            'Header' => 'telnetappender.h',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppenderC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819418'
+                                                                  'type' => '10691879'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'PatternConverter',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '36',
-                                            'Virt' => 1
+                                            'ShortName' => 'TelnetAppender',
+                                            'Source' => 'telnetappender.cpp',
+                                            'SourceLine' => '63'
                                           },
-                            '10834216' => {
-                                            'Class' => '1783648',
+                            '10723944' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10686593',
                                             'Constructor' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverterC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                                            'InLine' => 1,
+                                            'Line' => '38',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender18TelnetAppenderPrivC2Eii',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819418'
+                                                                  'type' => '10691033'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'name1',
-                                                                  'type' => '207559'
+                                                                  'name' => 'port',
+                                                                  'type' => '44633'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'style1',
-                                                                  'type' => '207559'
+                                                                  'name' => 'maxConnections',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'PatternConverter',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '30'
+                                            'ShortName' => 'TelnetAppenderPriv',
+                                            'Source' => 'telnetappender.cpp'
                                           },
-                            '10836946' => {
-                                            'Class' => '1783648',
+                            '10723945' => {
+                                            'Artificial' => 1,
+                                            'Class' => '10686593',
                                             'Constructor' => 1,
-                                            'Header' => 'patternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverterC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                                            'InLine' => 1,
+                                            'Line' => '38',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender18TelnetAppenderPrivC1Eii',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819418'
+                                                                  'type' => '10691033'
                                                                 },
-                                                         '2' => {
-                                                                  'name' => 'name1',
-                                                                  'type' => '207559'
+                                                         '1' => {
+                                                                  'name' => 'port',
+                                                                  'type' => '44633'
                                                                 },
-                                                         '3' => {
-                                                                  'name' => 'style1',
-                                                                  'type' => '207559'
+                                                         '2' => {
+                                                                  'name' => 'maxConnections',
+                                                                  'type' => '44633'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'ShortName' => 'PatternConverter',
-                                            'Source' => 'patternconverter.cpp',
-                                            'SourceLine' => '30'
+                                            'ShortName' => 'TelnetAppenderPriv',
+                                            'Source' => 'telnetappender.cpp'
                                           },
-                            '10841096' => {
+                            '10725704' => {
                                             'Artificial' => 1,
-                                            'Class' => '10818951',
+                                            'Class' => '10687557',
                                             'Destructor' => 1,
-                                            'Header' => 'patternconverter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 1,
-                                            'Line' => '76',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverter21ClazzPatternConverterD0Ev',
+                                            'Line' => '80',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender19ClazzTelnetAppenderD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819463'
+                                                                  'type' => '10692468'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternConverter',
+                                            'ShortName' => 'ClazzTelnetAppender',
                                             'Virt' => 1
                                           },
-                            '10841097' => {
+                            '10725705' => {
                                             'Artificial' => 1,
-                                            'Class' => '10818951',
+                                            'Class' => '10687557',
                                             'Destructor' => 1,
-                                            'Header' => 'patternconverter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 1,
-                                            'Line' => '76',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverter21ClazzPatternConverterD1Ev',
+                                            'Line' => '80',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender19ClazzTelnetAppenderD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819463'
+                                                                  'type' => '10692468'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternConverter',
+                                            'ShortName' => 'ClazzTelnetAppender',
                                             'Virt' => 1
                                           },
-                            '10841237' => {
+                            '10725748' => {
                                             'Artificial' => 1,
-                                            'Class' => '10818951',
+                                            'Class' => '10687557',
                                             'Destructor' => 1,
-                                            'Header' => 'patternconverter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 1,
-                                            'Line' => '76',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverter21ClazzPatternConverterD2Ev',
+                                            'Line' => '80',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender19ClazzTelnetAppenderD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819463'
+                                                                  'type' => '10692468'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternConverter',
+                                            'ShortName' => 'ClazzTelnetAppender',
                                             'Virt' => 1
                                           },
-                            '10841327' => {
+                            '10725816' => {
                                             'Artificial' => 1,
-                                            'Class' => '10818951',
+                                            'Class' => '10687557',
                                             'Constructor' => 1,
-                                            'Header' => 'patternconverter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 1,
-                                            'Line' => '76',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverter21ClazzPatternConverterC2Ev',
+                                            'Line' => '80',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender19ClazzTelnetAppenderC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819463'
+                                                                  'type' => '10692468'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternConverter'
+                                            'ShortName' => 'ClazzTelnetAppender'
                                           },
-                            '10841328' => {
+                            '10725817' => {
                                             'Artificial' => 1,
-                                            'Class' => '10818951',
+                                            'Class' => '10687557',
                                             'Constructor' => 1,
-                                            'Header' => 'patternconverter.h',
+                                            'Header' => 'telnetappender.h',
                                             'InLine' => 1,
-                                            'Line' => '76',
-                                            'MnglName' => '_ZN7log4cxx7pattern16PatternConverter21ClazzPatternConverterC1Ev',
+                                            'Line' => '80',
+                                            'MnglName' => '_ZN7log4cxx3net14TelnetAppender19ClazzTelnetAppenderC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10819463'
+                                                                  'type' => '10692468'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternConverter'
+                                            'ShortName' => 'ClazzTelnetAppender'
                                           },
-                            '10947149' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '93',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser16extractConverterEcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmRS7_SA_',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'lastChar',
-                                                                  'type' => '323083'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'i',
-                                                                  'type' => '279'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'convBuf',
-                                                                  'type' => '324863'
-                                                                },
-                                                         '4' => {
-                                                                  'name' => 'currentLiteral',
-                                                                  'type' => '324863'
-                                                                }
-                                                       },
-                                            'Private' => 1,
-                                            'Return' => '41980',
-                                            'ShortName' => 'extractConverter',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '58',
-                                            'Static' => 1
-                                          },
-                            '10947195' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '105',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser14extractOptionsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmRSt6vectorIS7_SaIS7_EE',
+                            '10778026' => {
+                                            'Class' => '10777954',
+                                            'Header' => 'threadlocal.h',
+                                            'Line' => '61',
+                                            'MnglName' => '_ZN7log4cxx7helpers11ThreadLocal3setEPv',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
+                                                                  'name' => 'this',
+                                                                  'type' => '10778526'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'i',
-                                                                  'type' => '279'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'options',
-                                                                  'type' => '1784702'
+                                                                  'name' => 'priv',
+                                                                  'type' => '44902'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Return' => '41980',
-                                            'ShortName' => 'extractOptions',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '95',
-                                            'Static' => 1
+                                            'Return' => '1',
+                                            'ShortName' => 'set',
+                                            'Source' => 'threadlocal.cpp',
+                                            'SourceLine' => '48'
                                           },
-                            '10947231' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '116',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser5parseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt6vectorISt10shared_ptrINS0_16PatternConverterEESaISD_EERSA_ISB_INS0_14FormattingInfoEESaISI_EERKSt3mapIS7_PFSD_RKSA_IS7_SaIS7_EEESt4lessIS7_ESaISt4pairIS8_SS_EEE',
+                            '10778059' => {
+                                            'Class' => '10777954',
+                                            'Header' => 'threadlocal.h',
+                                            'Line' => '66',
+                                            'MnglName' => '_ZN7log4cxx7helpers11ThreadLocal3getEv',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'patternConverters',
-                                                                  'type' => '10949294'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'formattingInfos',
-                                                                  'type' => '10949300'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'rules',
-                                                                  'type' => '10949306'
+                                                                  'name' => 'this',
+                                                                  'type' => '10778526'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'parse',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '115',
-                                            'Static' => 1
+                                            'Return' => '44902',
+                                            'ShortName' => 'get',
+                                            'Source' => 'threadlocal.cpp',
+                                            'SourceLine' => '61'
                                           },
-                            '10947270' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '134',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser15createConverterERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS7_RKSt3mapIS7_PFSt10shared_ptrINS0_16PatternConverterEERKSt6vectorIS7_SaIS7_EEESt4lessIS7_ESaISt4pairIS8_SL_EEERSH_',
+                            '10778156' => {
+                                            'Class' => '10777954',
+                                            'Header' => 'threadlocal.h',
+                                            'Line' => '78',
+                                            'MnglName' => '_ZN7log4cxx7helpers11ThreadLocal6createERNS0_4PoolE',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'converterId',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'currentLiteral',
-                                                                  'type' => '324863'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'rules',
-                                                                  'type' => '10949306'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'options',
-                                                                  'type' => '1784702'
+                                                                  'name' => 'p',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
                                             'Private' => 1,
-                                            'Return' => '1783942',
-                                            'ShortName' => 'createConverter',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '312',
+                                            'Return' => '10778548',
+                                            'ShortName' => 'create',
+                                            'Source' => 'threadlocal.cpp',
+                                            'SourceLine' => '25',
                                             'Static' => 1
                                           },
-                            '10947311' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '153',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser17finalizeConverterEcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmRS7_RKSt10shared_ptrINS0_14FormattingInfoEERKSt3mapIS7_PFSB_INS0_16PatternConverterEERKSt6vectorIS7_SaIS7_EEESt4lessIS7_ESaISt4pairIS8_SP_EEERSJ_ISI_SaISI_EERSJ_ISD_SaISD_EE',
+                            '10779448' => {
+                                            'Class' => '10777954',
+                                            'Destructor' => 1,
+                                            'Header' => 'threadlocal.h',
+                                            'Line' => '56',
+                                            'MnglName' => '_ZN7log4cxx7helpers11ThreadLocalD2Ev',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'c',
-                                                                  'type' => '323083'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'i',
-                                                                  'type' => '41980'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'currentLiteral',
-                                                                  'type' => '324863'
-                                                                },
-                                                         '4' => {
-                                                                  'name' => 'formattingInfo',
-                                                                  'type' => '10949312'
-                                                                },
-                                                         '5' => {
-                                                                  'name' => 'rules',
-                                                                  'type' => '10949306'
-                                                                },
-                                                         '6' => {
-                                                                  'name' => 'patternConverters',
-                                                                  'offset' => '0',
-                                                                  'type' => '10949294'
-                                                                },
-                                                         '7' => {
-                                                                  'name' => 'formattingInfos',
-                                                                  'offset' => '8',
-                                                                  'type' => '10949300'
+                                                                  'name' => 'this',
+                                                                  'type' => '10778526'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Return' => '41980',
-                                            'ShortName' => 'finalizeConverter',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '339',
-                                            'Static' => 1
+                                            'ShortName' => 'ThreadLocal',
+                                            'Source' => 'threadlocal.cpp',
+                                            'SourceLine' => '44'
                                           },
-                            '10947372' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '160',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser24isUnicodeIdentifierStartEc',
+                            '10779519' => {
+                                            'Class' => '10777954',
+                                            'Constructor' => 1,
+                                            'Header' => 'threadlocal.h',
+                                            'Line' => '52',
+                                            'MnglName' => '_ZN7log4cxx7helpers11ThreadLocalC2Ev',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'ch',
-                                                                  'type' => '323083'
+                                                                  'name' => 'this',
+                                                                  'type' => '10778526'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Return' => '41824',
-                                            'ShortName' => 'isUnicodeIdentifierStart',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '37',
-                                            'Static' => 1
+                                            'ShortName' => 'ThreadLocal',
+                                            'Source' => 'threadlocal.cpp',
+                                            'SourceLine' => '40'
                                           },
-                            '10947398' => {
-                                            'Class' => '10947098',
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '161',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser23isUnicodeIdentifierPartEc',
+                            '10779520' => {
+                                            'Class' => '10777954',
+                                            'Constructor' => 1,
+                                            'Header' => 'threadlocal.h',
+                                            'Line' => '52',
+                                            'MnglName' => '_ZN7log4cxx7helpers11ThreadLocalC1Ev',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'ch',
-                                                                  'type' => '323083'
+                                                                  'name' => 'this',
+                                                                  'type' => '10778526'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Return' => '41824',
-                                            'ShortName' => 'isUnicodeIdentifierPart',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '48',
-                                            'Static' => 1
-                                          },
-                            '10947676' => {
-                                            'Data' => 1,
-                                            'Line' => '56',
-                                            'MnglName' => '_ZN7log4cxx7classes25PatternLayoutRegistrationE',
-                                            'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'PatternLayoutRegistration',
-                                            'Source' => 'patternlayout.cpp'
+                                            'ShortName' => 'ThreadLocal',
+                                            'Source' => 'threadlocal.cpp',
+                                            'SourceLine' => '40'
                                           },
-                            '10947840' => {
-                                            'Class' => '890743',
+                            '10836135' => {
+                                            'Class' => '10835980',
                                             'Const' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout8getClassEv',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZNK7log4cxx7pattern22ThreadPatternConverter8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951953'
+                                                                  'type' => '10837634'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '56',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '31',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '10947898' => {
-                                            'Class' => '890743',
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout13registerClassEv',
-                                            'Return' => '55284',
+                            '10836174' => {
+                                            'Class' => '10835980',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter14getStaticClassEv',
+                                            'Return' => '57815',
+                                            'ShortName' => 'getStaticClass',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '31',
+                                            'Static' => 1
+                                          },
+                            '10836192' => {
+                                            'Class' => '10835980',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '56',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '31',
                                             'Static' => 1
                                           },
-                            '10947916' => {
-                                            'Class' => '890743',
+                            '10836210' => {
+                                            'Class' => '10835980',
                                             'Const' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 2,
-                                            'Line' => '353',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout4castERKNS_7helpers5ClassE',
+                                            'Line' => '44',
+                                            'MnglName' => '_ZNK7log4cxx7pattern22ThreadPatternConverter4castERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951953'
+                                                                  'type' => '10837634'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '10947962' => {
-                                            'Class' => '890743',
+                            '10836254' => {
+                                            'Class' => '10835980',
                                             'Const' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 2,
-                                            'Line' => '356',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout10instanceofERKNS_7helpers5ClassE',
+                                            'Line' => '47',
+                                            'MnglName' => '_ZNK7log4cxx7pattern22ThreadPatternConverter10instanceofERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951953'
+                                                                  'type' => '10837634'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10948151' => {
-                                            'Class' => '890743',
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout15activateOptionsERNS_7helpers4PoolE',
+                            '10836298' => {
+                                            'Class' => '10835980',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter11newInstanceERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951919'
-                                                                },
-                                                         '1' => {
                                                                   'name' => 'p1',
-                                                                  'type' => '55243'
-                                                                }
-                                                       },
-                                            'Reg' => {
-                                                       '1' => 'rsi'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'activateOptions',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '109',
-                                            'Virt' => 1,
-                                            'VirtPos' => '5'
-                                          },
-                            '10948191' => {
-                                            'Class' => '890743',
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout9setOptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951919'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'option',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'value',
-                                                                  'type' => '207559'
-                                                                }
-                                                       },
-                                            'Return' => '1',
-                                            'ShortName' => 'setOption',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '99',
-                                            'Virt' => 1,
-                                            'VirtPos' => '6'
-                                          },
-                            '10948236' => {
-                                            'Class' => '890743',
-                                            'Const' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'InLine' => 2,
-                                            'Line' => '395',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout16ignoresThrowableEv',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951953'
+                                                                  'type' => '3213328'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'Return' => '41824',
-                                            'ShortName' => 'ignoresThrowable',
-                                            'Virt' => 1,
-                                            'VirtPos' => '11'
+                                            'Return' => '1463822',
+                                            'ShortName' => 'newInstance',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '39',
+                                            'Static' => 1
                                           },
-                            '10948277' => {
-                                            'Class' => '890743',
+                            '10836326' => {
+                                            'Class' => '10835980',
                                             'Const' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout6formatERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_3spi12LoggingEventEERNS_7helpers4PoolE',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZNK7log4cxx7pattern22ThreadPatternConverter6formatERKSt10shared_ptrINS_3spi12LoggingEventEERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951953'
+                                                                  'type' => '10837634'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'output',
-                                                                  'type' => '324863'
+                                                                  'name' => 'event',
+                                                                  'type' => '129521'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'event',
-                                                                  'type' => '120674'
+                                                                  'name' => 'toAppendTo',
+                                                                  'type' => '453811'
                                                                 },
                                                          '3' => {
-                                                                  'name' => 'pool',
-                                                                  'type' => '55243'
+                                                                  'name' => 'p3',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
                                             'Return' => '1',
                                             'ShortName' => 'format',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '80',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '46',
                                             'Virt' => 1,
                                             'VirtPos' => '7'
                                           },
-                            '10948327' => {
-                                            'Class' => '890743',
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout19getFormatSpecifiersB5cxx11Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951919'
-                                                                }
-                                                       },
-                                            'Protected' => 1,
-                                            'Return' => '5254271',
-                                            'ShortName' => 'getFormatSpecifiers',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '148',
-                                            'Virt' => 1,
-                                            'VirtPos' => '12'
-                                          },
-                            '10948491' => {
-                                            'Class' => '10948367',
+                            '10836496' => {
+                                            'Class' => '10836376',
                                             'Const' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 2,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout18ClazzPatternLayout7getNameB5cxx11Ev',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZNK7log4cxx7pattern22ThreadPatternConverter27ClazzThreadPatternConverter7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951981'
+                                                                  'type' => '10837668'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '10948532' => {
-                                            'Class' => '10948367',
-                                            'Const' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'InLine' => 2,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZNK7log4cxx13PatternLayout18ClazzPatternLayout11newInstanceEv',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951981'
-                                                                }
-                                                       },
-                                            'Return' => '892688',
-                                            'ShortName' => 'newInstance',
-                                            'Virt' => 1,
-                                            'VirtPos' => '4'
-                                          },
-                            '10948793' => {
-                                            'Header' => 'object.h',
-                                            'InLine' => 2,
-                                            'Line' => '116',
-                                            'MnglName' => '_ZN7log4cxx4castINS_7pattern28LoggingEventPatternConverterENS1_16PatternConverterELb0ELb0EEESt10shared_ptrIT_ERKS4_IT0_E',
-                                            'NameSpace' => 'log4cxx',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'incoming',
-                                                                  'type' => '1784534'
-                                                                }
-                                                       },
-                                            'Return' => '10894140',
-                                            'ShortName' => 'cast<log4cxx::pattern::LoggingEventPatternConverter, log4cxx::pattern::PatternConverter>',
-                                            'TParam' => {
-                                                          '0' => {
-                                                                   'key' => 'Ret',
-                                                                   'type' => '1783393'
-                                                                 },
-                                                          '1' => {
-                                                                   'key' => 'Type',
-                                                                   'type' => '1783648'
-                                                                 }
-                                                        }
+                            '10836876' => {
+                                            'Data' => 1,
+                                            'Line' => '31',
+                                            'MnglName' => '_ZN7log4cxx7classes34ThreadPatternConverterRegistrationE',
+                                            'NameSpace' => 'log4cxx::classes',
+                                            'Return' => '57821',
+                                            'ShortName' => 'ThreadPatternConverterRegistration',
+                                            'Source' => 'threadpatternconverter.cpp'
                                           },
-                            '10952431' => {
+                            '10839358' => {
                                             'Artificial' => 1,
-                                            'Class' => '890743',
+                                            'Class' => '10835980',
                                             'Destructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '334',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutD0Ev',
+                                            'Line' => '35',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951919'
+                                                                  'type' => '10837321'
                                                                 }
                                                        },
-                                            'ShortName' => 'PatternLayout',
+                                            'ShortName' => 'ThreadPatternConverter',
                                             'Virt' => 1
                                           },
-                            '10952432' => {
+                            '10839359' => {
                                             'Artificial' => 1,
-                                            'Class' => '890743',
+                                            'Class' => '10835980',
                                             'Destructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '334',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutD2Ev',
+                                            'Line' => '35',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951919'
+                                                                  'type' => '10837321'
                                                                 }
                                                        },
-                                            'ShortName' => 'PatternLayout',
+                                            'ShortName' => 'ThreadPatternConverter',
                                             'Virt' => 1
                                           },
-                            '10955923' => {
+                            '10839402' => {
                                             'Artificial' => 1,
-                                            'Class' => '890743',
+                                            'Class' => '10835980',
                                             'Destructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '334',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutD1Ev',
+                                            'Line' => '35',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951919'
+                                                                  'type' => '10837321'
                                                                 }
                                                        },
-                                            'ShortName' => 'PatternLayout',
+                                            'ShortName' => 'ThreadPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11151843' => {
-                                            'Class' => '890743',
-                                            'Constructor' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951919'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
-                                                                }
-                                                       },
-                                            'ShortName' => 'PatternLayout',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '66'
-                                          },
-                            '11154423' => {
-                                            'Class' => '890743',
-                                            'Constructor' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '10951919'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'pattern',
-                                                                  'type' => '207559'
-                                                                }
-                                                       },
-                                            'ShortName' => 'PatternLayout',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '66'
-                                          },
-                            '11156935' => {
-                                            'Class' => '890743',
+                            '10843297' => {
+                                            'Class' => '10835980',
                                             'Constructor' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutC1Ev',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951919'
+                                                                  'type' => '10837321'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'PatternLayout',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '59'
+                                            'Private' => 1,
+                                            'ShortName' => 'ThreadPatternConverter',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '33'
                                           },
-                            '11158323' => {
-                                            'Class' => '890743',
+                            '10843342' => {
+                                            'Class' => '10835980',
                                             'Constructor' => 1,
-                                            'Header' => 'patternlayout.h',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayoutC2Ev',
+                                            'Header' => 'threadpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951919'
+                                                                  'type' => '10837321'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'PatternLayout',
-                                            'Source' => 'patternlayout.cpp',
-                                            'SourceLine' => '59'
+                                            'Private' => 1,
+                                            'ShortName' => 'ThreadPatternConverter',
+                                            'Source' => 'threadpatternconverter.cpp',
+                                            'SourceLine' => '33'
                                           },
-                            '11161313' => {
+                            '10843940' => {
                                             'Artificial' => 1,
-                                            'Class' => '10948367',
+                                            'Class' => '10836376',
                                             'Destructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout18ClazzPatternLayoutD0Ev',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter27ClazzThreadPatternConverterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951964'
+                                                                  'type' => '10837651'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternLayout',
+                                            'ShortName' => 'ClazzThreadPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11161314' => {
+                            '10843941' => {
                                             'Artificial' => 1,
-                                            'Class' => '10948367',
+                                            'Class' => '10836376',
                                             'Destructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout18ClazzPatternLayoutD1Ev',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter27ClazzThreadPatternConverterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951964'
+                                                                  'type' => '10837651'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternLayout',
+                                            'ShortName' => 'ClazzThreadPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11161456' => {
+                            '10843984' => {
                                             'Artificial' => 1,
-                                            'Class' => '10948367',
+                                            'Class' => '10836376',
                                             'Destructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout18ClazzPatternLayoutD2Ev',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter27ClazzThreadPatternConverterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951964'
+                                                                  'type' => '10837651'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternLayout',
+                                            'ShortName' => 'ClazzThreadPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11161546' => {
+                            '10844052' => {
                                             'Artificial' => 1,
-                                            'Class' => '10948367',
+                                            'Class' => '10836376',
                                             'Constructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout18ClazzPatternLayoutC2Ev',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter27ClazzThreadPatternConverterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951964'
+                                                                  'type' => '10837651'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternLayout'
+                                            'ShortName' => 'ClazzThreadPatternConverter'
                                           },
-                            '11161547' => {
+                            '10844053' => {
                                             'Artificial' => 1,
-                                            'Class' => '10948367',
+                                            'Class' => '10836376',
                                             'Constructor' => 1,
-                                            'Header' => 'patternlayout.h',
+                                            'Header' => 'threadpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '352',
-                                            'MnglName' => '_ZN7log4cxx13PatternLayout18ClazzPatternLayoutC1Ev',
+                                            'Line' => '43',
+                                            'MnglName' => '_ZN7log4cxx7pattern22ThreadPatternConverter27ClazzThreadPatternConverterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '10951964'
+                                                                  'type' => '10837651'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPatternLayout'
+                                            'ShortName' => 'ClazzThreadPatternConverter'
                                           },
-                            '1117287' => {
-                                           'Class' => '1117249',
+                            '1089119' => {
+                                           'Class' => '1089109',
                                            'Const' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZNK7log4cxx7helpers21ByteArrayOutputStream8getClassEv',
+                                           'Header' => 'dateformat.h',
+                                           'InLine' => 2,
+                                           'Line' => '39',
+                                           'MnglName' => '_ZNK7log4cxx7helpers10DateFormat10instanceofERKNS0_5ClassE',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118553'
+                                                                 'type' => '1102520'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'clazz',
+                                                                 'type' => '57815'
                                                                }
                                                       },
-                                           'Return' => '55278',
-                                           'ShortName' => 'getClass',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '27',
+                                           'Return' => '44686',
+                                           'ShortName' => 'instanceof',
                                            'Virt' => 1,
-                                           'VirtPos' => '0'
-                                         },
-                            '1117326' => {
-                                           'Class' => '1117249',
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream14getStaticClassEv',
-                                           'Return' => '55278',
-                                           'ShortName' => 'getStaticClass',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '27',
-                                           'Static' => 1
-                                         },
-                            '1117344' => {
-                                           'Class' => '1117249',
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream13registerClassEv',
-                                           'Return' => '55284',
-                                           'ShortName' => 'registerClass',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '27',
-                                           'Static' => 1
+                                           'VirtPos' => '3'
                                          },
-                            '1117362' => {
-                                           'Class' => '1117249',
+                            '1089164' => {
+                                           'Class' => '1089109',
                                            'Const' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
+                                           'Header' => 'dateformat.h',
                                            'InLine' => 2,
-                                           'Line' => '51',
-                                           'MnglName' => '_ZNK7log4cxx7helpers21ByteArrayOutputStream4castERKNS0_5ClassE',
+                                           'Line' => '37',
+                                           'MnglName' => '_ZNK7log4cxx7helpers10DateFormat4castERKNS0_5ClassE',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118553'
+                                                                 'type' => '1102520'
                                                                },
                                                         '1' => {
                                                                  'name' => 'clazz',
-                                                                 'type' => '55278'
+                                                                 'type' => '57815'
                                                                }
                                                       },
-                                           'Return' => '45584',
+                                           'Return' => '48431',
                                            'ShortName' => 'cast',
                                            'Virt' => 1,
                                            'VirtPos' => '4'
                                          },
-                            '1117406' => {
-                                           'Class' => '1117249',
-                                           'Const' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '54',
-                                           'MnglName' => '_ZNK7log4cxx7helpers21ByteArrayOutputStream10instanceofERKNS0_5ClassE',
+                            '1090077' => {
+                                           'Class' => '1089674',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat20findMillisecondStartExRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt10shared_ptrINS_7helpers10DateFormatEERNSB_4PoolE',
                                            'Param' => {
                                                         '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118553'
+                                                                 'name' => 'time',
+                                                                 'type' => '451231'
                                                                },
                                                         '1' => {
-                                                                 'name' => 'clazz',
-                                                                 'type' => '55278'
+                                                                 'name' => 'formatted',
+                                                                 'type' => '212489'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'formatter',
+                                                                 'type' => '1091393'
+                                                               },
+                                                        '3' => {
+                                                                 'name' => 'pool',
+                                                                 'type' => '57780'
                                                                }
                                                       },
-                                           'Return' => '41824',
-                                           'ShortName' => 'instanceof',
-                                           'Virt' => 1,
-                                           'VirtPos' => '3'
+                                           'Return' => '44633',
+                                           'ShortName' => 'findMillisecondStart',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '155',
+                                           'Static' => 1
                                          },
-                            '1117515' => {
-                                           'Class' => '1117249',
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream5closeERNS0_4PoolE',
+                            '1090120' => {
+                                           'Class' => '1089674',
+                                           'Const' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZNK7log4cxx7pattern16CachedDateFormat6formatERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEExRNS_7helpers4PoolE',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118564'
+                                                                 'type' => '1091405'
                                                                },
                                                         '1' => {
-                                                                 'name' => 'p1',
-                                                                 'type' => '55243'
+                                                                 'name' => 'buf',
+                                                                 'type' => '453811'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'now',
+                                                                 'type' => '451231'
+                                                               },
+                                                        '3' => {
+                                                                 'name' => 'p',
+                                                                 'type' => '57780'
                                                                }
                                                       },
-                                           'Reg' => {
-                                                      '0' => 'rdi',
-                                                      '1' => 'rsi'
-                                                    },
                                            'Return' => '1',
-                                           'ShortName' => 'close',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '37',
+                                           'ShortName' => 'format',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '246',
                                            'Virt' => 1,
                                            'VirtPos' => '5'
                                          },
-                            '1117556' => {
-                                           'Class' => '1117249',
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream5flushERNS0_4PoolE',
+                            '1090170' => {
+                                           'Class' => '1089674',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat17millisecondFormatEiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi',
                                            'Param' => {
                                                         '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118564'
+                                                                 'name' => 'millis',
+                                                                 'type' => '44633'
                                                                },
                                                         '1' => {
-                                                                 'name' => 'p1',
-                                                                 'type' => '55243'
+                                                                 'name' => 'buf',
+                                                                 'type' => '453811'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'offset',
+                                                                 'type' => '44633'
                                                                }
                                                       },
-                                           'Reg' => {
-                                                      '0' => 'rdi',
-                                                      '1' => 'rsi'
-                                                    },
+                                           'Private' => 1,
                                            'Return' => '1',
-                                           'ShortName' => 'flush',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '41',
-                                           'Virt' => 1,
-                                           'VirtPos' => '6'
+                                           'ShortName' => 'millisecondFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '321',
+                                           'Static' => 1
                                          },
-                            '1117597' => {
-                                           'Class' => '1117249',
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream5writeERNS0_10ByteBufferERNS0_4PoolE',
+                            '1090203' => {
+                                           'Class' => '1089674',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat11setTimeZoneERKSt10shared_ptrINS_7helpers8TimeZoneEE',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118564'
+                                                                 'type' => '1091388'
                                                                },
                                                         '1' => {
-                                                                 'name' => 'buf',
-                                                                 'type' => '1045313'
-                                                               },
-                                                        '2' => {
-                                                                 'name' => 'p2',
-                                                                 'type' => '55243'
+                                                                 'name' => 'timeZone',
+                                                                 'type' => '1091410'
                                                                }
                                                       },
-                                           'Reg' => {
-                                                      '2' => 'rdx'
-                                                    },
                                            'Return' => '1',
-                                           'ShortName' => 'write',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '45',
+                                           'ShortName' => 'setTimeZone',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '337',
                                            'Virt' => 1,
-                                           'VirtPos' => '7'
+                                           'VirtPos' => '6'
                                          },
-                            '1117643' => {
-                                           'Class' => '1117249',
+                            '1090245' => {
+                                           'Class' => '1089674',
                                            'Const' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZNK7log4cxx7helpers21ByteArrayOutputStream11toByteArrayEv',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZNK7log4cxx7pattern16CachedDateFormat12numberFormatERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRNS_7helpers4PoolE',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118553'
+                                                                 'type' => '1091405'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 's',
+                                                                 'type' => '453811'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'n',
+                                                                 'type' => '44633'
+                                                               },
+                                                        '3' => {
+                                                                 'name' => 'p',
+                                                                 'type' => '57780'
                                                                }
                                                       },
-                                           'Return' => '1023736',
-                                           'ShortName' => 'toByteArray',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '53'
+                                           'Return' => '1',
+                                           'ShortName' => 'numberFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '346',
+                                           'Virt' => 1,
+                                           'VirtPos' => '7'
                                          },
-                            '1117861' => {
-                                           'Class' => '1117740',
-                                           'Const' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '50',
-                                           'MnglName' => '_ZNK7log4cxx7helpers21ByteArrayOutputStream26ClazzByteArrayOutputStream7getNameB5cxx11Ev',
+                            '1090297' => {
+                                           'Class' => '1089674',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat23getMaximumCacheValidityERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
                                            'Param' => {
                                                         '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118604'
+                                                                 'name' => 'pattern',
+                                                                 'type' => '212489'
                                                                }
                                                       },
-                                           'Return' => '54480',
-                                           'ShortName' => 'getName',
-                                           'Virt' => 1,
-                                           'VirtPos' => '3'
+                                           'Return' => '44633',
+                                           'ShortName' => 'getMaximumCacheValidity',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '359',
+                                           'Static' => 1
                                          },
-                            '1117919' => {
-                                           'Class' => '1117909',
-                                           'Const' => 1,
-                                           'Header' => 'outputstream.h',
-                                           'InLine' => 2,
-                                           'Line' => '40',
-                                           'MnglName' => '_ZNK7log4cxx7helpers12OutputStream4castERKNS0_5ClassE',
+                            '1090392' => {
+                                           'Class' => '1089674',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat13regionMatchesERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmS9_mm',
                                            'Param' => {
                                                         '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1133894'
+                                                                 'name' => 'target',
+                                                                 'type' => '212489'
                                                                },
                                                         '1' => {
-                                                                 'name' => 'clazz',
-                                                                 'type' => '55278'
+                                                                 'name' => 'toffset',
+                                                                 'type' => '44828'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'other',
+                                                                 'type' => '212489'
+                                                               },
+                                                        '3' => {
+                                                                 'name' => 'ooffset',
+                                                                 'type' => '44828'
+                                                               },
+                                                        '4' => {
+                                                                 'name' => 'len',
+                                                                 'type' => '44828'
                                                                }
                                                       },
-                                           'Return' => '45584',
-                                           'ShortName' => 'cast',
-                                           'Virt' => 1,
-                                           'VirtPos' => '4'
-                                         },
-                            '1117963' => {
-                                           'Class' => '1117909',
-                                           'Header' => 'outputstream.h',
-                                           'Line' => '39',
-                                           'MnglName' => '_ZN7log4cxx7helpers12OutputStream14getStaticClassEv',
                                            'Private' => 1,
-                                           'Return' => '55278',
-                                           'ShortName' => 'getStaticClass',
-                                           'Source' => 'outputstream.cpp',
-                                           'SourceLine' => '25',
+                                           'Return' => '44686',
+                                           'ShortName' => 'regionMatches',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '396',
                                            'Static' => 1
                                          },
-                            '1118034' => {
+                            '1091120' => {
+                                           'Class' => '1089674',
                                            'Data' => 1,
-                                           'Line' => '27',
-                                           'MnglName' => '_ZN7log4cxx7classes33ByteArrayOutputStreamRegistrationE',
-                                           'NameSpace' => 'log4cxx::classes',
-                                           'Return' => '55284',
-                                           'ShortName' => 'ByteArrayOutputStreamRegistration',
-                                           'Source' => 'bytearrayoutputstream.cpp'
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat6digitsE',
+                                           'Return' => '1091115',
+                                           'ShortName' => 'digits',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '84',
+                                           'Value' => '30 31 32 33 34 35 36 37 38 39 00'
                                          },
-                            '11256335' => {
-                                            'Class' => '10947098',
-                                            'Data' => 1,
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '61',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParser11ESCAPE_CHARE',
-                                            'Return' => '323095',
-                                            'ShortName' => 'ESCAPE_CHAR',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '27'
-                                          },
-                            '1130797' => {
-                                           'Class' => '1117249',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStreamD0Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118564'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayOutputStream',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '33',
-                                           'Virt' => 1
+                            '1091129' => {
+                                           'Class' => '1089674',
+                                           'Data' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat6magic1E',
+                                           'Return' => '44641',
+                                           'ShortName' => 'magic1',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '91',
+                                           'Value' => '654000'
                                          },
-                            '1130798' => {
-                                           'Class' => '1117249',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStreamD1Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118564'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayOutputStream',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '33',
-                                           'Virt' => 1
+                            '1091159' => {
+                                           'Class' => '1089674',
+                                           'Data' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat12magicString1E',
+                                           'Return' => '1091154',
+                                           'ShortName' => 'magicString1',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '97',
+                                           'Value' => '36 35 34 00'
                                          },
-                            '1130893' => {
-                                           'Class' => '1117249',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStreamD2Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118564'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayOutputStream',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '33',
-                                           'Virt' => 1
+                            '1091168' => {
+                                           'Class' => '1089674',
+                                           'Data' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat6magic2E',
+                                           'Return' => '44641',
+                                           'ShortName' => 'magic2',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '104',
+                                           'Value' => '987000'
                                          },
-                            '1131610' => {
-                                           'Class' => '1117249',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStreamC2Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1118564'
-                                                               }
-                                                      },
-                                           'ShortName' => 'ByteArrayOutputStream',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '29'
+                            '1091177' => {
+                                           'Class' => '1089674',
+                                           'Data' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat12magicString2E',
+                                           'Return' => '1091154',
+                                           'ShortName' => 'magicString2',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '110',
+                                           'Value' => '39 38 37 00'
                                          },
-                            '1131611' => {
-                                           'Class' => '1117249',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStreamC1Ev',
+                            '1091186' => {
+                                           'Class' => '1089674',
+                                           'Data' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat10zeroStringE',
+                                           'Return' => '1091154',
+                                           'ShortName' => 'zeroString',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '116',
+                                           'Value' => '30 30 30 00'
+                                         },
+                            '10965955' => {
+                                            'Class' => '452369',
+                                            'Destructor' => 1,
+                                            'Header' => 'threadspecificdata.h',
+                                            'Line' => '41',
+                                            'MnglName' => '_ZN7log4cxx7helpers18ThreadSpecificDataD2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10936712'
+                                                                }
+                                                       },
+                                            'ShortName' => 'ThreadSpecificData',
+                                            'Source' => 'threadspecificdata.cpp',
+                                            'SourceLine' => '36'
+                                          },
+                            '10966026' => {
+                                            'Class' => '452369',
+                                            'Constructor' => 1,
+                                            'Header' => 'threadspecificdata.h',
+                                            'Line' => '40',
+                                            'MnglName' => '_ZN7log4cxx7helpers18ThreadSpecificDataC2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10936712'
+                                                                }
+                                                       },
+                                            'ShortName' => 'ThreadSpecificData',
+                                            'Source' => 'threadspecificdata.cpp',
+                                            'SourceLine' => '31'
+                                          },
+                            '10966027' => {
+                                            'Class' => '452369',
+                                            'Constructor' => 1,
+                                            'Header' => 'threadspecificdata.h',
+                                            'Line' => '40',
+                                            'MnglName' => '_ZN7log4cxx7helpers18ThreadSpecificDataC1Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '10936712'
+                                                                }
+                                                       },
+                                            'ShortName' => 'ThreadSpecificData',
+                                            'Source' => 'threadspecificdata.cpp',
+                                            'SourceLine' => '31'
+                                          },
+                            '1097131' => {
+                                           'Artificial' => 1,
+                                           'Class' => '1089720',
+                                           'Destructor' => 1,
+                                           'InLine' => 1,
+                                           'Line' => '31',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat20CachedDateFormatPrivD2Ev',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118564'
+                                                                 'type' => '1090502'
                                                                }
                                                       },
-                                           'ShortName' => 'ByteArrayOutputStream',
-                                           'Source' => 'bytearrayoutputstream.cpp',
-                                           'SourceLine' => '29'
+                                           'ShortName' => 'CachedDateFormatPriv',
+                                           'Source' => 'cacheddateformat.cpp'
                                          },
-                            '1133634' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1117740',
+                            '11015967' => {
+                                            'Class' => '11015953',
+                                            'Const' => 1,
+                                            'Header' => 'functional',
+                                            'InLine' => 2,
+                                            'Line' => '363',
+                                            'MnglName' => '_ZNVKSt3_MuIPN7log4cxx7helpers13ThreadUtilityELb0ELb0EEclIRS3_St5tupleIJEEEEOT_SA_RT0_',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '11058327'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => '__arg',
+                                                                  'type' => '11048591'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'p2',
+                                                                  'type' => '1382108'
+                                                                }
+                                                       },
+                                            'Return' => '11048591',
+                                            'ShortName' => 'operator()<log4cxx::helpers::ThreadUtility*&, std::tuple<> >',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => '_CVArg',
+                                                                   'type' => '11048591'
+                                                                 },
+                                                          '1' => {
+                                                                   'key' => '_Tuple',
+                                                                   'type' => '1311546'
+                                                                 }
+                                                        },
+                                            'Volatile' => 1
+                                          },
+                            '1101886' => {
+                                           'Class' => '1089674',
                                            'Destructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '50',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream26ClazzByteArrayOutputStreamD0Ev',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormatD0Ev',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118587'
+                                                                 'type' => '1091388'
                                                                }
                                                       },
-                                           'ShortName' => 'ClazzByteArrayOutputStream',
+                                           'ShortName' => 'CachedDateFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '143',
                                            'Virt' => 1
                                          },
-                            '1133635' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1117740',
+                            '1101887' => {
+                                           'Class' => '1089674',
                                            'Destructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '50',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream26ClazzByteArrayOutputStreamD1Ev',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormatD1Ev',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118587'
+                                                                 'type' => '1091388'
                                                                }
                                                       },
-                                           'ShortName' => 'ClazzByteArrayOutputStream',
+                                           'ShortName' => 'CachedDateFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '143',
                                            'Virt' => 1
                                          },
-                            '1133775' => {
-                                           'Artificial' => 1,
-                                           'Class' => '1117740',
+                            '1101930' => {
+                                           'Class' => '1089674',
                                            'Destructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
-                                           'InLine' => 1,
-                                           'Line' => '50',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream26ClazzByteArrayOutputStreamD2Ev',
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormatD2Ev',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118587'
+                                                                 'type' => '1091388'
                                                                }
                                                       },
-                                           'ShortName' => 'ClazzByteArrayOutputStream',
+                                           'ShortName' => 'CachedDateFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '143',
                                            'Virt' => 1
                                          },
-                            '1133865' => {
+                            '1102022' => {
+                                           'Class' => '1089674',
+                                           'Constructor' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormatC2ERKSt10shared_ptrINS_7helpers10DateFormatEEi',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '1091388'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'dateFormat',
+                                                                 'type' => '1091393'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'expiration1',
+                                                                 'type' => '44633'
+                                                               }
+                                                      },
+                                           'ShortName' => 'CachedDateFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '128'
+                                         },
+                            '1102023' => {
+                                           'Class' => '1089674',
+                                           'Constructor' => 1,
+                                           'Header' => 'cacheddateformat.h',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormatC1ERKSt10shared_ptrINS_7helpers10DateFormatEEi',
+                                           'Param' => {
+                                                        '0' => {
+                                                                 'name' => 'this',
+                                                                 'type' => '1091388'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'dateFormat',
+                                                                 'type' => '1091393'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'expiration1',
+                                                                 'type' => '44633'
+                                                               }
+                                                      },
+                                           'ShortName' => 'CachedDateFormat',
+                                           'Source' => 'cacheddateformat.cpp',
+                                           'SourceLine' => '128'
+                                         },
+                            '1102133' => {
                                            'Artificial' => 1,
-                                           'Class' => '1117740',
+                                           'Class' => '1089720',
                                            'Constructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
                                            'InLine' => 1,
-                                           'Line' => '50',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream26ClazzByteArrayOutputStreamC2Ev',
+                                           'Line' => '32',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat20CachedDateFormatPrivC2ESt10shared_ptrINS_7helpers10DateFormatEEi',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118587'
+                                                                 'type' => '1090502'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'dateFormat',
+                                                                 'type' => '1089211'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'expiration1',
+                                                                 'type' => '44633'
                                                                }
                                                       },
-                                           'ShortName' => 'ClazzByteArrayOutputStream'
+                                           'ShortName' => 'CachedDateFormatPriv',
+                                           'Source' => 'cacheddateformat.cpp'
                                          },
-                            '1133866' => {
+                            '1102134' => {
                                            'Artificial' => 1,
-                                           'Class' => '1117740',
+                                           'Class' => '1089720',
                                            'Constructor' => 1,
-                                           'Header' => 'bytearrayoutputstream.h',
                                            'InLine' => 1,
-                                           'Line' => '50',
-                                           'MnglName' => '_ZN7log4cxx7helpers21ByteArrayOutputStream26ClazzByteArrayOutputStreamC1Ev',
+                                           'Line' => '32',
+                                           'MnglName' => '_ZN7log4cxx7pattern16CachedDateFormat20CachedDateFormatPrivC1ESt10shared_ptrINS_7helpers10DateFormatEEi',
                                            'Param' => {
                                                         '0' => {
                                                                  'name' => 'this',
-                                                                 'type' => '1118587'
+                                                                 'type' => '1090502'
+                                                               },
+                                                        '1' => {
+                                                                 'name' => 'dateFormat',
+                                                                 'type' => '1089211'
+                                                               },
+                                                        '2' => {
+                                                                 'name' => 'expiration1',
+                                                                 'type' => '44633'
                                                                }
                                                       },
-                                           'ShortName' => 'ClazzByteArrayOutputStream'
+                                           'ShortName' => 'CachedDateFormatPriv',
+                                           'Source' => 'cacheddateformat.cpp'
                                          },
-                            '11389763' => {
-                                            'Class' => '10947098',
-                                            'Constructor' => 1,
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '75',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParserC2Ev',
+                            '11021649' => {
+                                            'Class' => '11021635',
+                                            'Const' => 1,
+                                            'Header' => 'functional',
+                                            'InLine' => 2,
+                                            'Line' => '363',
+                                            'MnglName' => '_ZNVKSt3_MuISt10shared_ptrIN7log4cxx7helpers13ThreadUtilityEELb0ELb0EEclIRS4_St5tupleIJEEEEOT_SB_RT0_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11256070'
+                                                                  'type' => '11055509'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => '__arg',
+                                                                  'type' => '593813'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'p2',
+                                                                  'type' => '1382108'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'PatternParser',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '33'
+                                            'Return' => '593813',
+                                            'ShortName' => 'operator()<std::shared_ptr<log4cxx::helpers::ThreadUtility>&, std::tuple<> >',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => '_CVArg',
+                                                                   'type' => '593813'
+                                                                 },
+                                                          '1' => {
+                                                                   'key' => '_Tuple',
+                                                                   'type' => '1311546'
+                                                                 }
+                                                        },
+                                            'Volatile' => 1
                                           },
-                            '11389764' => {
-                                            'Class' => '10947098',
-                                            'Constructor' => 1,
-                                            'Header' => 'patternparser.h',
-                                            'Line' => '75',
-                                            'MnglName' => '_ZN7log4cxx7pattern13PatternParserC1Ev',
+                            '11021709' => {
+                                            'Class' => '11021635',
+                                            'Const' => 1,
+                                            'Header' => 'functional',
+                                            'InLine' => 2,
+                                            'Line' => '363',
+                                            'MnglName' => '_ZNVKSt3_MuISt10shared_ptrIN7log4cxx7helpers13ThreadUtilityEELb0ELb0EEclIRS4_St5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEONSt6thread2idEOmEEEEOT_SM_RT0_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11256070'
+                                                                  'type' => '11055509'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => '__arg',
+                                                                  'type' => '593813'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'p2',
+                                                                  'type' => '1385651'
                                                                 }
                                                        },
-                                            'Private' => 1,
-                                            'Reg' => {
-                                                       '0' => 'rdi'
-                                                     },
-                                            'ShortName' => 'PatternParser',
-                                            'Source' => 'patternparser.cpp',
-                                            'SourceLine' => '33'
+                                            'Return' => '593813',
+                                            'ShortName' => 'operator()<std::shared_ptr<log4cxx::helpers::ThreadUtility>&, std::tuple<std::__cxx11::basic_string<char>&&> >',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => '_CVArg',
+                                                                   'type' => '593813'
+                                                                 },
+                                                          '1' => {
+                                                                   'key' => '_Tuple',
+                                                                   'type' => '1363477'
+                                                                 }
+                                                        },
+                                            'Volatile' => 1
                                           },
-                            '11452403' => {
-                                            'Class' => '53834',
-                                            'Destructor' => 1,
-                                            'Header' => 'pool.h',
-                                            'Line' => '37',
-                                            'MnglName' => '_ZN7log4cxx7helpers4PoolD2Ev',
+                            '11021823' => {
+                                            'Class' => '11021809',
+                                            'Const' => 1,
+                                            'Header' => 'functional',
+                                            'InLine' => 2,
+                                            'Line' => '345',
+                                            'MnglName' => '_ZNVKSt3_MuISt12_PlaceholderILi1EELb0ELb1EEclISt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEONSt6thread2idEOmEEEEONSt9enable_ifIXltLm0EsrSt10tuple_sizeIT_E5valueESt13tuple_elementILm0ESJ_EE4type4typeERVKS1_RSJ_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11450123'
+                                                                  'type' => '11056370'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'p1',
+                                                                  'type' => '11056375'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => '__tuple',
+                                                                  'type' => '1385651'
                                                                 }
                                                        },
-                                            'ShortName' => 'Pool',
-                                            'Source' => 'pool.cpp',
-                                            'SourceLine' => '48'
+                                            'Return' => '55436',
+                                            'ShortName' => 'operator()<std::tuple<std::__cxx11::basic_string<char>&&> >',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => '_Tuple',
+                                                                   'type' => '1363477'
+                                                                 }
+                                                        },
+                                            'Volatile' => 1
                                           },
-                            '11452557' => {
-                                            'Class' => '53834',
-                                            'Constructor' => 1,
-                                            'Header' => 'pool.h',
-                                            'Line' => '36',
-                                            'MnglName' => '_ZN7log4cxx7helpers4PoolC2EP10apr_pool_tb',
+                            '11021928' => {
+                                            'Class' => '11021914',
+                                            'Const' => 1,
+                                            'Header' => 'functional',
+                                            'InLine' => 2,
+                                            'Line' => '345',
+                                            'MnglName' => '_ZNVKSt3_MuISt12_PlaceholderILi2EELb0ELb1EEclISt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEONSt6thread2idEOmEEEEONSt9enable_ifIXltLm1EsrSt10tuple_sizeIT_E5valueESt13tuple_elementILm1ESJ_EE4type4typeERVKS1_RSJ_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11450123'
+                                                                  'type' => '11056186'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '517247'
+                                                                  'name' => 'p1',
+                                                                  'type' => '11056191'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'release1',
-                                                                  'type' => '41824'
+                                                                  'name' => '__tuple',
+                                                                  'type' => '1385651'
                                                                 }
                                                        },
-                                            'ShortName' => 'Pool',
-                                            'Source' => 'pool.cpp',
-                                            'SourceLine' => '43'
+                                            'Return' => '591782',
+                                            'ShortName' => 'operator()<std::tuple<std::__cxx11::basic_string<char>&&> >',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => '_Tuple',
+                                                                   'type' => '1363477'
+                                                                 }
+                                                        },
+                                            'Volatile' => 1
                                           },
-                            '11452558' => {
-                                            'Class' => '53834',
-                                            'Constructor' => 1,
-                                            'Header' => 'pool.h',
-                                            'Line' => '36',
-                                            'MnglName' => '_ZN7log4cxx7helpers4PoolC1EP10apr_pool_tb',
+                            '11022033' => {
+                                            'Class' => '11022019',
+                                            'Const' => 1,
+                                            'Header' => 'functional',
+                                            'InLine' => 2,
+                                            'Line' => '345',
+                                            'MnglName' => '_ZNVKSt3_MuISt12_PlaceholderILi3EELb0ELb1EEclISt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEONSt6thread2idEOmEEEEONSt9enable_ifIXltLm2EsrSt10tuple_sizeIT_E5valueESt13tuple_elementILm2ESJ_EE4type4typeERVKS1_RSJ_',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11450123'
+                                                                  'type' => '11056002'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'p',
-                                                                  'type' => '517247'
+                                                                  'name' => 'p1',
+                                                                  'type' => '11056007'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'release1',
-                                                                  'type' => '41824'
+                                                                  'name' => '__tuple',
+                                                                  'type' => '1385651'
                                                                 }
                                                        },
-                                            'ShortName' => 'Pool',
-                                            'Source' => 'pool.cpp',
-                                            'SourceLine' => '43'
+                                            'Return' => '591788',
+                                            'ShortName' => 'operator()<std::tuple<std::__cxx11::basic_string<char>&&> >',
+                                            'TParam' => {
+                                                          '0' => {
+                                                                   'key' => '_Tuple',
+                                                                   'type' => '1363477'
+                                                                 }
+                                                        },
+                                            'Volatile' => 1
                                           },
-                            '11452743' => {
-                                            'Class' => '53834',
-                                            'Constructor' => 1,
-                                            'Header' => 'pool.h',
-                                            'Line' => '35',
-                                            'MnglName' => '_ZN7log4cxx7helpers4PoolC2Ev',
+                            '11069217' => {
+                                            'Artificial' => 1,
+                                            'Class' => '586692',
+                                            'Destructor' => 1,
+                                            'InLine' => 1,
+                                            'Line' => '32',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtility9priv_dataD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11450123'
+                                                                  'type' => '591407'
                                                                 }
                                                        },
-                                            'ShortName' => 'Pool',
-                                            'Source' => 'pool.cpp',
-                                            'SourceLine' => '33'
+                                            'ShortName' => 'priv_data',
+                                            'Source' => 'threadutility.cpp'
                                           },
-                            '11452744' => {
-                                            'Class' => '53834',
-                                            'Constructor' => 1,
-                                            'Header' => 'pool.h',
-                                            'Line' => '35',
-                                            'MnglName' => '_ZN7log4cxx7helpers4PoolC1Ev',
+                            '11074212' => {
+                                            'Class' => '586679',
+                                            'Destructor' => 1,
+                                            'Header' => 'threadutility.h',
+                                            'Line' => '78',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtilityD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11450123'
+                                                                  'type' => '591646'
                                                                 }
                                                        },
-                                            'ShortName' => 'Pool',
-                                            'Source' => 'pool.cpp',
-                                            'SourceLine' => '33'
+                                            'ShortName' => 'ThreadUtility',
+                                            'Source' => 'threadutility.cpp',
+                                            'SourceLine' => '58'
                                           },
-                            '11534034' => {
-                                            'Class' => '11533932',
-                                            'InLine' => 2,
-                                            'Line' => '30',
-                                            'MnglName' => '_ZN14PropertyParser5parseERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN7log4cxx7helpers10PropertiesE',
+                            '11074283' => {
+                                            'Class' => '586679',
+                                            'Constructor' => 1,
+                                            'Header' => 'threadutility.h',
+                                            'Line' => '68',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtilityC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11534126'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'in',
-                                                                  'type' => '324863'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'properties',
-                                                                  'type' => '641209'
+                                                                  'type' => '591646'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'parse',
-                                            'Source' => 'properties.cpp'
+                                            'Private' => 1,
+                                            'ShortName' => 'ThreadUtility',
+                                            'Source' => 'threadutility.cpp',
+                                            'SourceLine' => '49'
                                           },
-                            '11600489' => {
-                                            'Class' => '635023',
-                                            'Destructor' => 1,
-                                            'Header' => 'properties.h',
-                                            'Line' => '54',
-                                            'MnglName' => '_ZN7log4cxx7helpers10PropertiesD2Ev',
+                            '11074284' => {
+                                            'Class' => '586679',
+                                            'Constructor' => 1,
+                                            'Header' => 'threadutility.h',
+                                            'Line' => '68',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtilityC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11533673'
+                                                                  'type' => '591646'
                                                                 }
                                                        },
-                                            'ShortName' => 'Properties',
-                                            'Source' => 'properties.cpp',
-                                            'SourceLine' => '402'
+                                            'Private' => 1,
+                                            'ShortName' => 'ThreadUtility',
+                                            'Source' => 'threadutility.cpp',
+                                            'SourceLine' => '49'
                                           },
-                            '11600975' => {
-                                            'Class' => '635023',
+                            '11074352' => {
+                                            'Artificial' => 1,
+                                            'Class' => '586692',
                                             'Constructor' => 1,
-                                            'Header' => 'properties.h',
-                                            'Line' => '50',
-                                            'MnglName' => '_ZN7log4cxx7helpers10PropertiesC2Ev',
+                                            'InLine' => 1,
+                                            'Line' => '33',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtility9priv_dataC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11533673'
+                                                                  'type' => '591407'
                                                                 }
                                                        },
-                                            'ShortName' => 'Properties',
-                                            'Source' => 'properties.cpp',
-                                            'SourceLine' => '398'
+                                            'ShortName' => 'priv_data',
+                                            'Source' => 'threadutility.cpp'
                                           },
-                            '11600976' => {
-                                            'Class' => '635023',
+                            '11074353' => {
+                                            'Artificial' => 1,
+                                            'Class' => '586692',
                                             'Constructor' => 1,
-                                            'Header' => 'properties.h',
-                                            'Line' => '50',
-                                            'MnglName' => '_ZN7log4cxx7helpers10PropertiesC1Ev',
+                                            'InLine' => 1,
+                                            'Line' => '33',
+                                            'MnglName' => '_ZN7log4cxx7helpers13ThreadUtility9priv_dataC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11533673'
+                                                                  'type' => '591407'
                                                                 }
                                                        },
-                                            'ShortName' => 'Properties',
-                                            'Source' => 'properties.cpp',
-                                            'SourceLine' => '398'
+                                            'ShortName' => 'priv_data',
+                                            'Source' => 'threadutility.cpp'
                                           },
-                            '11695293' => {
-                                            'Class' => '11695115',
+                            '11143169' => {
+                                            'Class' => '11142909',
                                             'Const' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZNK7log4cxx7pattern26PropertiesPatternConverter8getClassEv',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZNK7log4cxx7pattern36ThrowableInformationPatternConverter8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697084'
+                                                                  'type' => '11145404'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '34',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '47',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '11695332' => {
-                                            'Class' => '11695115',
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter14getStaticClassEv',
-                                            'Return' => '55278',
+                            '11143208' => {
+                                            'Class' => '11142909',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter14getStaticClassEv',
+                                            'Return' => '57815',
                                             'ShortName' => 'getStaticClass',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '34',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '47',
                                             'Static' => 1
                                           },
-                            '11695350' => {
-                                            'Class' => '11695115',
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter13registerClassEv',
-                                            'Return' => '55284',
+                            '11143226' => {
+                                            'Class' => '11142909',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '34',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '47',
                                             'Static' => 1
                                           },
-                            '11695368' => {
-                                            'Class' => '11695115',
+                            '11143244' => {
+                                            'Class' => '11142909',
                                             'Const' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 2,
-                                            'Line' => '56',
-                                            'MnglName' => '_ZNK7log4cxx7pattern26PropertiesPatternConverter4castERKNS_7helpers5ClassE',
+                                            'Line' => '49',
+                                            'MnglName' => '_ZNK7log4cxx7pattern36ThrowableInformationPatternConverter4castERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697084'
+                                                                  'type' => '11145404'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '11695412' => {
-                                            'Class' => '11695115',
+                            '11143288' => {
+                                            'Class' => '11142909',
                                             'Const' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 2,
-                                            'Line' => '59',
-                                            'MnglName' => '_ZNK7log4cxx7pattern26PropertiesPatternConverter10instanceofERKNS_7helpers5ClassE',
+                                            'Line' => '52',
+                                            'MnglName' => '_ZNK7log4cxx7pattern36ThrowableInformationPatternConverter10instanceofERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697084'
+                                                                  'type' => '11145404'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '11695456' => {
-                                            'Class' => '11695115',
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter11newInstanceERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE',
+                            '11143332' => {
+                                            'Class' => '11142909',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter11newInstanceERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'options',
-                                                                  'type' => '1784690'
+                                                                  'type' => '1464452'
                                                                 }
                                                        },
-                                            'Return' => '1783942',
+                                            'Return' => '1463822',
                                             'ShortName' => 'newInstance',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '43',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '58',
                                             'Static' => 1
                                           },
-                            '11695484' => {
-                                            'Class' => '11695115',
+                            '11143360' => {
+                                            'Class' => '11142909',
                                             'Const' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZNK7log4cxx7pattern26PropertiesPatternConverter6formatERKSt10shared_ptrINS_3spi12LoggingEventEERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_7helpers4PoolE',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZNK7log4cxx7pattern36ThrowableInformationPatternConverter6formatERKSt10shared_ptrINS_3spi12LoggingEventEERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697084'
+                                                                  'type' => '11145404'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'event',
-                                                                  'type' => '120674'
+                                                                  'name' => 'p1',
+                                                                  'type' => '129521'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'toAppendTo',
-                                                                  'type' => '324863'
+                                                                  'name' => 'p2',
+                                                                  'type' => '453811'
                                                                 },
                                                          '3' => {
                                                                   'name' => 'p3',
-                                                                  'type' => '55243'
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Reg' => {
-                                                       '3' => 'rcx'
-                                                     },
                                             'Return' => '1',
                                             'ShortName' => 'format',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '61',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '71',
                                             'Virt' => 1,
                                             'VirtPos' => '7'
                                           },
-                            '11695655' => {
-                                            'Class' => '11695534',
+                            '11143410' => {
+                                            'Class' => '11142909',
+                                            'Const' => 1,
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZNK7log4cxx7pattern36ThrowableInformationPatternConverter16handlesThrowableEv',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '11145404'
+                                                                }
+                                                       },
+                                            'Return' => '44686',
+                                            'ShortName' => 'handlesThrowable',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '82',
+                                            'Virt' => 1,
+                                            'VirtPos' => '8'
+                                          },
+                            '11143570' => {
+                                            'Class' => '11143449',
                                             'Const' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 2,
-                                            'Line' => '55',
-                                            'MnglName' => '_ZNK7log4cxx7pattern26PropertiesPatternConverter31ClazzPropertiesPatternConverter7getNameB5cxx11Ev',
+                                            'Line' => '48',
+                                            'MnglName' => '_ZNK7log4cxx7pattern36ThrowableInformationPatternConverter41ClazzThrowableInformationPatternConverter7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697112'
+                                                                  'type' => '11145432'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '11696131' => {
+                            '11143947' => {
                                             'Data' => 1,
-                                            'Line' => '34',
-                                            'MnglName' => '_ZN7log4cxx7classes38PropertiesPatternConverterRegistrationE',
+                                            'Line' => '47',
+                                            'MnglName' => '_ZN7log4cxx7classes48ThrowableInformationPatternConverterRegistrationE',
                                             'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'PropertiesPatternConverterRegistration',
-                                            'Source' => 'propertiespatternconverter.cpp'
+                                            'Return' => '57821',
+                                            'ShortName' => 'ThrowableInformationPatternConverterRegistration',
+                                            'Source' => 'throwableinformationpatternconverter.cpp'
                                           },
-                            '11699298' => {
+                            '11148790' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695115',
+                                            'Class' => '11142909',
                                             'Destructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverterD0Ev',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11696799'
+                                                                  'type' => '11145169'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertiesPatternConverter',
+                                            'ShortName' => 'ThrowableInformationPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11699299' => {
+                            '11148791' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695115',
+                                            'Class' => '11142909',
                                             'Destructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverterD2Ev',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11696799'
+                                                                  'type' => '11145169'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertiesPatternConverter',
+                                            'ShortName' => 'ThrowableInformationPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11700192' => {
+                            '11148834' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695115',
+                                            'Class' => '11142909',
                                             'Destructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverterD1Ev',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11696799'
+                                                                  'type' => '11145169'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertiesPatternConverter',
+                                            'ShortName' => 'ThrowableInformationPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11726215' => {
-                                            'Class' => '11695115',
+                            '11152591' => {
+                                            'Artificial' => 1,
+                                            'Class' => '11142943',
+                                            'Destructor' => 1,
+                                            'InLine' => 1,
+                                            'Line' => '35',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter43ThrowableInformationPatternConverterPrivateD2Ev',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'this',
+                                                                  'type' => '11144581'
+                                                                }
+                                                       },
+                                            'ShortName' => 'ThrowableInformationPatternConverterPrivate',
+                                            'Source' => 'throwableinformationpatternconverter.cpp'
+                                          },
+                            '11156283' => {
+                                            'Class' => '11142909',
                                             'Constructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverterC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverterC1Eb',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11696799'
+                                                                  'type' => '11145169'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'name1',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'propertyName',
-                                                                  'type' => '207559'
+                                                                  'name' => 'shortReport1',
+                                                                  'type' => '44686'
                                                                 }
                                                        },
                                             'Private' => 1,
-                                            'ShortName' => 'PropertiesPatternConverter',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '36'
+                                            'ShortName' => 'ThrowableInformationPatternConverter',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '49'
                                           },
-                            '11729534' => {
-                                            'Class' => '11695115',
+                            '11156335' => {
+                                            'Class' => '11142909',
                                             'Constructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverterC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_',
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverterC2Eb',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11696799'
+                                                                  'type' => '11145169'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'name1',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '3' => {
-                                                                  'name' => 'propertyName',
-                                                                  'type' => '207559'
+                                                                  'name' => 'shortReport1',
+                                                                  'type' => '44686'
                                                                 }
                                                        },
                                             'Private' => 1,
-                                            'ShortName' => 'PropertiesPatternConverter',
-                                            'Source' => 'propertiespatternconverter.cpp',
-                                            'SourceLine' => '36'
+                                            'ShortName' => 'ThrowableInformationPatternConverter',
+                                            'Source' => 'throwableinformationpatternconverter.cpp',
+                                            'SourceLine' => '49'
                                           },
-                            '11734364' => {
+                            '11156790' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695534',
-                                            'Destructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Class' => '11142943',
+                                            'Constructor' => 1,
                                             'InLine' => 1,
-                                            'Line' => '55',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter31ClazzPropertiesPatternConverterD0Ev',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter43ThrowableInformationPatternConverterPrivateC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_b',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697095'
+                                                                  'type' => '11144581'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'name',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'style',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'shortReport',
+                                                                  'type' => '44686'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertiesPatternConverter',
-                                            'Virt' => 1
+                                            'ShortName' => 'ThrowableInformationPatternConverterPrivate',
+                                            'Source' => 'throwableinformationpatternconverter.cpp'
                                           },
-                            '11734365' => {
+                            '11156791' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695534',
-                                            'Destructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Class' => '11142943',
+                                            'Constructor' => 1,
                                             'InLine' => 1,
-                                            'Line' => '55',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter31ClazzPropertiesPatternConverterD1Ev',
+                                            'Line' => '37',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter43ThrowableInformationPatternConverterPrivateC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_b',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697095'
+                                                                  'type' => '11144581'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'name',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'style',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'shortReport',
+                                                                  'type' => '44686'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertiesPatternConverter',
-                                            'Virt' => 1
+                                            'ShortName' => 'ThrowableInformationPatternConverterPrivate',
+                                            'Source' => 'throwableinformationpatternconverter.cpp'
                                           },
-                            '11734506' => {
+                            '11157256' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695534',
+                                            'Class' => '11143449',
                                             'Destructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '55',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter31ClazzPropertiesPatternConverterD2Ev',
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter41ClazzThrowableInformationPatternConverterD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697095'
+                                                                  'type' => '11145415'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertiesPatternConverter',
+                                            'ShortName' => 'ClazzThrowableInformationPatternConverter',
                                             'Virt' => 1
                                           },
-                            '11734596' => {
+                            '11157257' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695534',
-                                            'Constructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Class' => '11143449',
+                                            'Destructor' => 1,
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '55',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter31ClazzPropertiesPatternConverterC2Ev',
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter41ClazzThrowableInformationPatternConverterD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11697095'
+                                                                  'type' => '11145415'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertiesPatternConverter'
+                                            'ShortName' => 'ClazzThrowableInformationPatternConverter',
+                                            'Virt' => 1
                                           },
-                            '11734597' => {
+                            '11157300' => {
                                             'Artificial' => 1,
-                                            'Class' => '11695534',
-                                            'Constructor' => 1,
-                                            'Header' => 'propertiespatternconverter.h',
+                                            'Class' => '11143449',
+                                            'Destructor' => 1,
+                                            'Header' => 'throwableinformationpatternconverter.h',
                                             'InLine' => 1,
-                                            'Line' => '55',
-                                            'MnglName' => '_ZN7log4cxx7pattern26PropertiesPatternConverter31ClazzPropertiesPatternConverterC1Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11697095'
-                                                                }
-                                                       },
-                                            'ShortName' => 'ClazzPropertiesPatternConverter'
-                                          },
-                            '11891065' => {
-                                            'Class' => '11890983',
-                                            'Const' => 1,
-                                            'Header' => 'stringtokenizer.h',
-                                            'Line' => '38',
-                                            'MnglName' => '_ZNK7log4cxx7helpers15StringTokenizer13hasMoreTokensEv',
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter41ClazzThrowableInformationPatternConverterD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '15129402'
+                                                                  'type' => '11145415'
                                                                 }
                                                        },
-                                            'Return' => '41824',
-                                            'ShortName' => 'hasMoreTokens',
-                                            'Source' => 'stringtokenizer.cpp'
+                                            'ShortName' => 'ClazzThrowableInformationPatternConverter',
+                                            'Virt' => 1
                                           },
-                            '11891096' => {
-                                            'Class' => '11890983',
-                                            'Header' => 'stringtokenizer.h',
-                                            'Line' => '39',
-                                            'MnglName' => '_ZN7log4cxx7helpers15StringTokenizer9nextTokenB5cxx11Ev',
+                            '11157368' => {
+                                            'Artificial' => 1,
+                                            'Class' => '11143449',
+                                            'Constructor' => 1,
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'InLine' => 1,
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter41ClazzThrowableInformationPatternConverterC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '15129391'
+                                                                  'type' => '11145415'
                                                                 }
                                                        },
-                                            'Return' => '54480',
-                                            'ShortName' => 'nextToken',
-                                            'Source' => 'stringtokenizer.cpp',
-                                            'SourceLine' => '44'
+                                            'ShortName' => 'ClazzThrowableInformationPatternConverter'
                                           },
-                            '11893655' => {
-                                            'Class' => '11893538',
-                                            'InLine' => 2,
-                                            'Line' => '65',
-                                            'MnglName' => '_ZN7log4cxx16PropertyWatchdog10doOnChangeEv',
+                            '11157369' => {
+                                            'Artificial' => 1,
+                                            'Class' => '11143449',
+                                            'Constructor' => 1,
+                                            'Header' => 'throwableinformationpatternconverter.h',
+                                            'InLine' => 1,
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7pattern36ThrowableInformationPatternConverter41ClazzThrowableInformationPatternConverterC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11898472'
+                                                                  'type' => '11145415'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'doOnChange',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'Virt' => 1,
-                                            'VirtPos' => '2'
+                                            'ShortName' => 'ClazzThrowableInformationPatternConverter'
                                           },
-                            '11893808' => {
-                                            'Class' => '10458167',
+                            '11294079' => {
+                                            'Class' => '11293969',
                                             'Const' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZNK7log4cxx20PropertyConfigurator8getClassEv',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZNK7log4cxx7rolling22TimeBasedRollingPolicy8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900241'
+                                                                  'type' => '11300379'
                                                                 }
                                                        },
-                                            'Return' => '55278',
+                                            'Return' => '57815',
                                             'ShortName' => 'getClass',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '77',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '48',
                                             'Virt' => 1,
                                             'VirtPos' => '0'
                                           },
-                            '11893848' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator14getStaticClassEv',
-                                            'Return' => '55278',
+                            '11294118' => {
+                                            'Class' => '11293969',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy14getStaticClassEv',
+                                            'Return' => '57815',
                                             'ShortName' => 'getStaticClass',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '77',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '48',
                                             'Static' => 1
                                           },
-                            '11893866' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator13registerClassEv',
-                                            'Return' => '55284',
+                            '11294136' => {
+                                            'Class' => '11293969',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy13registerClassEv',
+                                            'Return' => '57821',
                                             'ShortName' => 'registerClass',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '77',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '48',
                                             'Static' => 1
                                           },
-                            '11893884' => {
-                                            'Class' => '10458167',
+                            '11294154' => {
+                                            'Class' => '11293969',
                                             'Const' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 2,
-                                            'Line' => '110',
-                                            'MnglName' => '_ZNK7log4cxx20PropertyConfigurator4castERKNS_7helpers5ClassE',
+                                            'Line' => '149',
+                                            'MnglName' => '_ZNK7log4cxx7rolling22TimeBasedRollingPolicy4castERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900241'
+                                                                  'type' => '11300379'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '11893929' => {
-                                            'Class' => '10458167',
+                            '11294198' => {
+                                            'Class' => '11293969',
                                             'Const' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 2,
-                                            'Line' => '112',
-                                            'MnglName' => '_ZNK7log4cxx20PropertyConfigurator10instanceofERKNS_7helpers5ClassE',
+                                            'Line' => '153',
+                                            'MnglName' => '_ZNK7log4cxx7rolling22TimeBasedRollingPolicy10instanceofERKNS_7helpers5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900241'
+                                                                  'type' => '11300379'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '41824',
+                                            'Return' => '44686',
                                             'ShortName' => 'instanceof',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '11894054' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator11doConfigureERKNS_4FileESt10shared_ptrINS_3spi16LoggerRepositoryEE',
+                            '11294422' => {
+                                            'Class' => '11293969',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy15activateOptionsERNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
+                                                                  'type' => '11300345'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'configFileName',
-                                                                  'type' => '641221'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'hierarchy',
-                                                                  'type' => '636254'
+                                                                  'name' => 'pool',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
                                             'Return' => '1',
-                                            'ShortName' => 'doConfigure',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '89',
+                                            'ShortName' => 'activateOptions',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '184',
                                             'Virt' => 1,
                                             'VirtPos' => '5'
                                           },
-                            '11894100' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator9configureERKNS_4FileE',
+                            '11294463' => {
+                                            'Class' => '11293969',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy10initializeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
-                                                                  'name' => 'configFilename',
-                                                                  'type' => '641221'
+                                                                  'name' => 'this',
+                                                                  'type' => '11300345'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'currentActiveFile',
+                                                                  'type' => '212489'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'append',
+                                                                  'type' => '44693'
+                                                                },
+                                                         '3' => {
+                                                                  'name' => 'pool',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Return' => '1',
-                                            'ShortName' => 'configure',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '119',
-                                            'Static' => 1
-                                          },
-                            '11894123' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator17configureAndWatchERKNS_4FileE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'configFilename',
-                                                                  'type' => '641221'
-                                                                }
-                                                       },
-                                            'Return' => '1',
-                                            'ShortName' => 'configureAndWatch',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '130',
-                                            'Static' => 1
-                                          },
-                            '11894146' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator17configureAndWatchERKNS_4FileEl',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'configFilename',
-                                                                  'type' => '641221'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'delay',
-                                                                  'type' => '41784'
-                                                                }
-                                                       },
-                                            'Return' => '1',
-                                            'ShortName' => 'configureAndWatch',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '137',
-                                            'Static' => 1
-                                          },
-                            '11894174' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator9configureERNS_7helpers10PropertiesE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'properties',
-                                                                  'type' => '641209'
-                                                                }
-                                                       },
-                                            'Return' => '1',
-                                            'ShortName' => 'configure',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '124',
-                                            'Static' => 1
-                                          },
-                            '11894197' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator11doConfigureERNS_7helpers10PropertiesESt10shared_ptrINS_3spi16LoggerRepositoryEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'properties',
-                                                                  'type' => '641209'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'hierarchy',
-                                                                  'type' => '636254'
-                                                                }
-                                                       },
-                                            'Return' => '1',
-                                            'ShortName' => 'doConfigure',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '153'
-                                          },
-                            '11894234' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator22configureLoggerFactoryERNS_7helpers10PropertiesE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'props',
-                                                                  'type' => '641209'
-                                                                }
-                                                       },
-                                            'Protected' => 1,
-                                            'Return' => '1',
-                                            'ShortName' => 'configureLoggerFactory',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '197'
-                                          },
-                            '11894266' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator19configureRootLoggerERNS_7helpers10PropertiesERSt10shared_ptrINS_3spi16LoggerRepositoryEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'props',
-                                                                  'type' => '641209'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'hierarchy',
-                                                                  'type' => '11900268'
-                                                                }
-                                                       },
-                                            'Protected' => 1,
-                                            'Return' => '1',
-                                            'ShortName' => 'configureRootLogger',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '220'
-                                          },
-                            '11894303' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator21parseCatsAndRenderersERNS_7helpers10PropertiesERSt10shared_ptrINS_3spi16LoggerRepositoryEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'props',
-                                                                  'type' => '641209'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'hierarchy',
-                                                                  'type' => '11900268'
-                                                                }
-                                                       },
-                                            'Protected' => 1,
-                                            'Return' => '1',
-                                            'ShortName' => 'parseCatsAndRenderers',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '250'
+                                            'Return' => '3757000',
+                                            'ShortName' => 'initialize',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '266',
+                                            'Virt' => 1,
+                                            'VirtPos' => '7'
                                           },
-                            '11894340' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator24parseAdditivityForLoggerERNS_7helpers10PropertiesERSt10shared_ptrINS_6LoggerEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                            '11294518' => {
+                                            'Class' => '11293969',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy8rolloverERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRNS_7helpers4PoolE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
+                                                                  'type' => '11300345'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'props',
-                                                                  'type' => '641209'
+                                                                  'name' => 'currentActiveFile',
+                                                                  'type' => '212489'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'cat',
-                                                                  'type' => '5846171'
+                                                                  'name' => 'append',
+                                                                  'type' => '44693'
                                                                 },
                                                          '3' => {
-                                                                  'name' => 'loggerName',
-                                                                  'type' => '207559'
+                                                                  'name' => 'pool',
+                                                                  'type' => '57780'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Return' => '41824',
-                                            'ShortName' => 'parseAdditivityForLogger',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '288'
+                                            'Return' => '3757000',
+                                            'ShortName' => 'rollover',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '297',
+                                            'Virt' => 1,
+                                            'VirtPos' => '8'
                                           },
-                            '11894387' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator11parseLoggerERNS_7helpers10PropertiesERSt10shared_ptrINS_6LoggerEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESF_SF_b',
+                            '11294573' => {
+                                            'Class' => '11293969',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy17isTriggeringEventEPNS_8AppenderERKSt10shared_ptrINS_3spi12LoggingEventEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
+                                                                  'type' => '11300345'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'props',
-                                                                  'type' => '641209'
+                                                                  'name' => 'appender',
+                                                                  'type' => '213391'
                                                                 },
                                                          '2' => {
-                                                                  'name' => 'logger',
-                                                                  'type' => '5846171'
+                                                                  'name' => 'p2',
+                                                                  'type' => '129521'
                                                                 },
                                                          '3' => {
-                                                                  'name' => 'p3',
-                                                                  'type' => '207559'
+                                                                  'name' => 'filename',
+                                                                  'type' => '212489'
                                                                 },
                                                          '4' => {
-                                                                  'name' => 'loggerName',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '5' => {
-                                                                  'name' => 'value',
-                                                                  'type' => '207559'
-                                                                },
-                                                         '6' => {
-                                                                  'name' => 'additivity',
-                                                                  'offset' => '0',
-                                                                  'type' => '41824'
-                                                                }
-                                                       },
-                                            'Protected' => 1,
-                                            'Reg' => {
-                                                       '3' => 'rcx'
-                                                     },
-                                            'Return' => '1',
-                                            'ShortName' => 'parseLogger',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '318'
-                                          },
-                            '11894445' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator13parseAppenderERNS_7helpers10PropertiesERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'props',
-                                                                  'type' => '641209'
-                                                                },
-                                                         '2' => {
-                                                                  'name' => 'appenderName',
-                                                                  'type' => '207559'
-                                                                }
-                                                       },
-                                            'Protected' => 1,
-                                            'Return' => '207541',
-                                            'ShortName' => 'parseAppender',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '401'
-                                          },
-                            '11894487' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator11registryPutERKSt10shared_ptrINS_8AppenderEE',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'appender',
-                                                                  'type' => '891187'
+                                                                  'name' => 'p4',
+                                                                  'type' => '44828'
                                                                 }
                                                        },
-                                            'Protected' => 1,
-                                            'Return' => '1',
-                                            'ShortName' => 'registryPut',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '470'
+                                            'Return' => '44686',
+                                            'ShortName' => 'isTriggeringEvent',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '393',
+                                            'Virt' => 1,
+                                            'VirtPos' => '10'
                                           },
-                            '11894520' => {
-                                            'Class' => '10458167',
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator11registryGetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                            '11294633' => {
+                                            'Class' => '11293969',
+                                            'Const' => 1,
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZNK7log4cxx7rolling22TimeBasedRollingPolicy19getFormatSpecifiersB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'name',
-                                                                  'type' => '207559'
+                                                                  'type' => '11300379'
                                                                 }
                                                        },
                                             'Protected' => 1,
-                                            'Return' => '207541',
-                                            'ShortName' => 'registryGet',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '475'
+                                            'Return' => '3757924',
+                                            'ShortName' => 'getFormatSpecifiers',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '255',
+                                            'Virt' => 1,
+                                            'VirtPos' => '9'
                                           },
-                            '11894768' => {
-                                            'Class' => '11894647',
+                            '11294793' => {
+                                            'Class' => '11294672',
                                             'Const' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 2,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZNK7log4cxx20PropertyConfigurator25ClazzPropertyConfigurator7getNameB5cxx11Ev',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZNK7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicy7getNameB5cxx11Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900333'
+                                                                  'type' => '11300431'
                                                                 }
                                                        },
-                                            'Return' => '54480',
+                                            'Return' => '56900',
                                             'ShortName' => 'getName',
                                             'Virt' => 1,
                                             'VirtPos' => '3'
                                           },
-                            '11894808' => {
-                                            'Class' => '11894647',
+                            '11294832' => {
+                                            'Class' => '11294672',
                                             'Const' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 2,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZNK7log4cxx20PropertyConfigurator25ClazzPropertyConfigurator11newInstanceEv',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZNK7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicy11newInstanceEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900333'
+                                                                  'type' => '11300431'
                                                                 }
                                                        },
-                                            'Return' => '10459482',
+                                            'Return' => '11300339',
                                             'ShortName' => 'newInstance',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '11894869' => {
+                            '11295882' => {
                                             'Data' => 1,
-                                            'Line' => '77',
-                                            'MnglName' => '_ZN7log4cxx7classes32PropertyConfiguratorRegistrationE',
+                                            'Line' => '48',
+                                            'MnglName' => '_ZN7log4cxx7classes34TimeBasedRollingPolicyRegistrationE',
                                             'NameSpace' => 'log4cxx::classes',
-                                            'Return' => '55284',
-                                            'ShortName' => 'PropertyConfiguratorRegistration',
-                                            'Source' => 'propertyconfigurator.cpp'
+                                            'Return' => '57821',
+                                            'ShortName' => 'TimeBasedRollingPolicyRegistration',
+                                            'Source' => 'timebasedrollingpolicy.cpp'
                                           },
-                            '11898477' => {
-                                            'Class' => '10458167',
-                                            'Data' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator4pdogE',
-                                            'Return' => '11898466',
-                                            'ShortName' => 'pdog',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '73'
-                                          },
-                            '11901722' => {
+                            '11301809' => {
                                             'Artificial' => 1,
-                                            'Class' => '11893538',
+                                            'Class' => '11293969',
                                             'Destructor' => 1,
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx16PropertyWatchdogD0Ev',
+                                            'Line' => '145',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicyD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11898472'
+                                                                  'type' => '11300345'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertyWatchdog',
-                                            'Source' => 'propertyconfigurator.cpp',
+                                            'ShortName' => 'TimeBasedRollingPolicy',
                                             'Virt' => 1
                                           },
-                            '11901723' => {
+                            '11301810' => {
                                             'Artificial' => 1,
-                                            'Class' => '11893538',
+                                            'Class' => '11293969',
                                             'Destructor' => 1,
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx16PropertyWatchdogD1Ev',
+                                            'Line' => '145',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicyD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11898472'
+                                                                  'type' => '11300345'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertyWatchdog',
-                                            'Source' => 'propertyconfigurator.cpp',
+                                            'ShortName' => 'TimeBasedRollingPolicy',
                                             'Virt' => 1
                                           },
-                            '11901865' => {
+                            '11301853' => {
                                             'Artificial' => 1,
-                                            'Class' => '11893538',
+                                            'Class' => '11293969',
                                             'Destructor' => 1,
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '53',
-                                            'MnglName' => '_ZN7log4cxx16PropertyWatchdogD2Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11898472'
-                                                                }
-                                                       },
-                                            'ShortName' => 'PropertyWatchdog',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'Virt' => 1
-                                          },
-                            '119168' => {
-                                          'Class' => '119080',
-                                          'Const' => 1,
-                                          'Header' => 'filter.h',
-                                          'InLine' => 2,
-                                          'Line' => '82',
-                                          'MnglName' => '_ZNK7log4cxx3spi6Filter10instanceofERKNS_7helpers5ClassE',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '138056'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'clazz',
-                                                                'type' => '55278'
-                                                              }
-                                                     },
-                                          'Return' => '41824',
-                                          'ShortName' => 'instanceof',
-                                          'Virt' => 1,
-                                          'VirtPos' => '3'
-                                        },
-                            '119212' => {
-                                          'Class' => '119080',
-                                          'Const' => 1,
-                                          'Header' => 'filter.h',
-                                          'InLine' => 2,
-                                          'Line' => '79',
-                                          'MnglName' => '_ZNK7log4cxx3spi6Filter4castERKNS_7helpers5ClassE',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '138056'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'clazz',
-                                                                'type' => '55278'
-                                                              }
-                                                     },
-                                          'Return' => '45584',
-                                          'ShortName' => 'cast',
-                                          'Virt' => 1,
-                                          'VirtPos' => '4'
-                                        },
-                            '119256' => {
-                                          'Class' => '119080',
-                                          'Const' => 1,
-                                          'Header' => 'filter.h',
-                                          'Line' => '84',
-                                          'MnglName' => '_ZNK7log4cxx3spi6Filter7getNextEv',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '138056'
-                                                              }
-                                                     },
-                                          'Private' => 1,
-                                          'Reg' => {
-                                                     '0' => 'rsi'
-                                                   },
-                                          'Return' => '119298',
-                                          'ShortName' => 'getNext',
-                                          'Source' => 'filter.cpp',
-                                          'SourceLine' => '29'
-                                        },
-                            '119268' => {
-                                          'Class' => '119080',
-                                          'Header' => 'filter.h',
-                                          'Line' => '85',
-                                          'MnglName' => '_ZN7log4cxx3spi6Filter7setNextERKSt10shared_ptrIS1_E',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120471'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'newNext',
-                                                                'type' => '120668'
-                                                              }
-                                                     },
-                                          'Private' => 1,
-                                          'Return' => '1',
-                                          'ShortName' => 'setNext',
-                                          'Source' => 'filter.cpp',
-                                          'SourceLine' => '34'
-                                        },
-                            '119280' => {
-                                          'Class' => '119080',
-                                          'Header' => 'filter.h',
-                                          'Line' => '78',
-                                          'MnglName' => '_ZN7log4cxx3spi6Filter14getStaticClassEv',
-                                          'Private' => 1,
-                                          'Return' => '55278',
-                                          'ShortName' => 'getStaticClass',
-                                          'Source' => 'loader.cpp',
-                                          'SourceLine' => '45',
-                                          'Static' => 1
-                                        },
-                            '1193513' => {
-                                           'Class' => '1043859',
-                                           'Destructor' => 1,
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '43',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBufferD2Ev',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi'
-                                                    },
-                                           'ShortName' => 'ByteBuffer',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '30'
-                                         },
-                            '1193607' => {
-                                           'Class' => '1043859',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '42',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBufferC2EPcm',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'data1',
-                                                                 'type' => '43431'
-                                                               },
-                                                        '2' => {
-                                                                 'name' => 'capacity',
-                                                                 'type' => '41980'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi',
-                                                      '1' => 'rsi',
-                                                      '2' => 'rdx'
-                                                    },
-                                           'ShortName' => 'ByteBuffer',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '25'
-                                         },
-                            '1193608' => {
-                                           'Class' => '1043859',
-                                           'Constructor' => 1,
-                                           'Header' => 'bytebuffer.h',
-                                           'Line' => '42',
-                                           'MnglName' => '_ZN7log4cxx7helpers10ByteBufferC1EPcm',
-                                           'Param' => {
-                                                        '0' => {
-                                                                 'name' => 'this',
-                                                                 'type' => '1045603'
-                                                               },
-                                                        '1' => {
-                                                                 'name' => 'data1',
-                                                                 'type' => '43431'
-                                                               },
-                                                        '2' => {
-                                                                 'name' => 'capacity',
-                                                                 'type' => '41980'
-                                                               }
-                                                      },
-                                           'Reg' => {
-                                                      '0' => 'rdi',
-                                                      '1' => 'rsi',
-                                                      '2' => 'rdx'
-                                                    },
-                                           'ShortName' => 'ByteBuffer',
-                                           'Source' => 'bytebuffer.cpp',
-                                           'SourceLine' => '25'
-                                         },
-                            '119415' => {
-                                          'Class' => '119333',
-                                          'Header' => 'optionhandler.h',
-                                          'Line' => '37',
-                                          'MnglName' => '_ZN7log4cxx3spi13OptionHandler14getStaticClassEv',
-                                          'Private' => 1,
-                                          'Return' => '55278',
-                                          'ShortName' => 'getStaticClass',
-                                          'Source' => 'loader.cpp',
-                                          'SourceLine' => '42',
-                                          'Static' => 1
-                                        },
-                            '119581' => {
-                                          'Class' => '119441',
-                                          'Const' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'MnglName' => '_ZNK7log4cxx6filter9AndFilter8getClassEv',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120663'
-                                                              }
-                                                     },
-                                          'Return' => '55278',
-                                          'ShortName' => 'getClass',
-                                          'Source' => 'andfilter.cpp',
-                                          'SourceLine' => '28',
-                                          'Virt' => 1,
-                                          'VirtPos' => '0'
-                                        },
-                            '119620' => {
-                                          'Class' => '119441',
-                                          'Header' => 'andfilter.h',
-                                          'MnglName' => '_ZN7log4cxx6filter9AndFilter14getStaticClassEv',
-                                          'Return' => '55278',
-                                          'ShortName' => 'getStaticClass',
-                                          'Source' => 'andfilter.cpp',
-                                          'SourceLine' => '28',
-                                          'Static' => 1
-                                        },
-                            '119638' => {
-                                          'Class' => '119441',
-                                          'Header' => 'andfilter.h',
-                                          'MnglName' => '_ZN7log4cxx6filter9AndFilter13registerClassEv',
-                                          'Return' => '55284',
-                                          'ShortName' => 'registerClass',
-                                          'Source' => 'andfilter.cpp',
-                                          'SourceLine' => '28',
-                                          'Static' => 1
-                                        },
-                            '119656' => {
-                                          'Class' => '119441',
-                                          'Const' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'InLine' => 2,
-                                          'Line' => '89',
-                                          'MnglName' => '_ZNK7log4cxx6filter9AndFilter4castERKNS_7helpers5ClassE',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120663'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'clazz',
-                                                                'type' => '55278'
-                                                              }
-                                                     },
-                                          'Return' => '45584',
-                                          'ShortName' => 'cast',
-                                          'Virt' => 1,
-                                          'VirtPos' => '4'
-                                        },
-                            '119700' => {
-                                          'Class' => '119441',
-                                          'Const' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'InLine' => 2,
-                                          'Line' => '91',
-                                          'MnglName' => '_ZNK7log4cxx6filter9AndFilter10instanceofERKNS_7helpers5ClassE',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120663'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'clazz',
-                                                                'type' => '55278'
-                                                              }
-                                                     },
-                                          'Return' => '41824',
-                                          'ShortName' => 'instanceof',
-                                          'Virt' => 1,
-                                          'VirtPos' => '3'
-                                        },
-                            '119781' => {
-                                          'Class' => '119441',
-                                          'Header' => 'andfilter.h',
-                                          'MnglName' => '_ZN7log4cxx6filter9AndFilter9addFilterERKSt10shared_ptrINS_3spi6FilterEE',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120629'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'filter',
-                                                                'type' => '120668'
-                                                              }
-                                                     },
-                                          'Return' => '1',
-                                          'ShortName' => 'addFilter',
-                                          'Source' => 'andfilter.cpp',
-                                          'SourceLine' => '36'
-                                        },
-                            '119813' => {
-                                          'Class' => '119441',
-                                          'Header' => 'andfilter.h',
-                                          'MnglName' => '_ZN7log4cxx6filter9AndFilter16setAcceptOnMatchEb',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120629'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'newValue',
-                                                                'type' => '41824'
-                                                              }
-                                                     },
-                                          'Reg' => {
-                                                     '0' => 'rdi',
-                                                     '1' => 'rsi'
-                                                   },
-                                          'Return' => '1',
-                                          'ShortName' => 'setAcceptOnMatch',
-                                          'Source' => 'andfilter.cpp',
-                                          'SourceLine' => '50'
-                                        },
-                            '119845' => {
-                                          'Class' => '119441',
-                                          'Const' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'MnglName' => '_ZNK7log4cxx6filter9AndFilter6decideERKSt10shared_ptrINS_3spi12LoggingEventEE',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120663'
-                                                              },
-                                                       '1' => {
-                                                                'name' => 'event',
-                                                                'type' => '120674'
-                                                              }
-                                                     },
-                                          'Return' => '119089',
-                                          'ShortName' => 'decide',
-                                          'Source' => 'andfilter.cpp',
-                                          'SourceLine' => '55',
-                                          'Virt' => 1,
-                                          'VirtPos' => '7'
-                                        },
-                            '120009' => {
-                                          'Class' => '119889',
-                                          'Const' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'InLine' => 2,
-                                          'Line' => '88',
-                                          'MnglName' => '_ZNK7log4cxx6filter9AndFilter14ClazzAndFilter7getNameB5cxx11Ev',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120703'
-                                                              }
-                                                     },
-                                          'Return' => '54480',
-                                          'ShortName' => 'getName',
-                                          'Virt' => 1,
-                                          'VirtPos' => '3'
-                                        },
-                            '120048' => {
-                                          'Class' => '119889',
-                                          'Const' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'InLine' => 2,
-                                          'Line' => '88',
-                                          'MnglName' => '_ZNK7log4cxx6filter9AndFilter14ClazzAndFilter11newInstanceEv',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120703'
-                                                              }
-                                                     },
-                                          'Return' => '120623',
-                                          'ShortName' => 'newInstance',
-                                          'Virt' => 1,
-                                          'VirtPos' => '4'
-                                        },
-                            '120142' => {
-                                          'Data' => 1,
-                                          'Line' => '28',
-                                          'MnglName' => '_ZN7log4cxx7classes21AndFilterRegistrationE',
-                                          'NameSpace' => 'log4cxx::classes',
-                                          'Return' => '55284',
-                                          'ShortName' => 'AndFilterRegistration',
-                                          'Source' => 'andfilter.cpp'
-                                        },
-                            '121098' => {
-                                          'Artificial' => 1,
-                                          'Class' => '119441',
-                                          'Destructor' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'InLine' => 1,
-                                          'Line' => '77',
-                                          'MnglName' => '_ZN7log4cxx6filter9AndFilterD0Ev',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120629'
-                                                              }
-                                                     },
-                                          'ShortName' => 'AndFilter',
-                                          'Virt' => 1
-                                        },
-                            '121099' => {
-                                          'Artificial' => 1,
-                                          'Class' => '119441',
-                                          'Destructor' => 1,
-                                          'Header' => 'andfilter.h',
-                                          'InLine' => 1,
-                                          'Line' => '77',
-                                          'MnglName' => '_ZN7log4cxx6filter9AndFilterD2Ev',
-                                          'Param' => {
-                                                       '0' => {
-                                                                'name' => 'this',
-                                                                'type' => '120629'
-                                                              }
-                                                     },
-                                          'ShortName' => 'AndFilter',
-                                          'Virt' => 1
-                                        },
-                            '12220331' => {
-                                            'Class' => '10458167',
-                                            'Destructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfiguratorD0Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                }
-                                                       },
-                                            'ShortName' => 'PropertyConfigurator',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '84',
-                                            'Virt' => 1
-                                          },
-                            '12220430' => {
-                                            'Class' => '10458167',
-                                            'Destructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfiguratorD1Ev',
-                                            'Param' => {
-                                                         '0' => {
-                                                                  'name' => 'this',
-                                                                  'type' => '11900252'
-                                                                }
-                                                       },
-                                            'ShortName' => 'PropertyConfigurator',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '84',
-                                            'Virt' => 1
-                                          },
-                            '12221620' => {
-                                            'Class' => '10458167',
-                                            'Destructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfiguratorD2Ev',
+                                            'Line' => '145',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicyD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
+                                                                  'type' => '11300345'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertyConfigurator',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '84',
+                                            'ShortName' => 'TimeBasedRollingPolicy',
                                             'Virt' => 1
                                           },
-                            '12222804' => {
-                                            'Class' => '10458167',
+                            '11320468' => {
+                                            'Class' => '11293969',
                                             'Constructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfiguratorC1Ev',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicyC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
+                                                                  'type' => '11300345'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertyConfigurator',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '79'
+                                            'ShortName' => 'TimeBasedRollingPolicy',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '169'
                                           },
-                            '12224014' => {
-                                            'Class' => '10458167',
+                            '11320512' => {
+                                            'Class' => '11293969',
                                             'Constructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfiguratorC2Ev',
+                                            'Header' => 'timebasedrollingpolicy.h',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicyC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900252'
+                                                                  'type' => '11300345'
                                                                 }
                                                        },
-                                            'ShortName' => 'PropertyConfigurator',
-                                            'Source' => 'propertyconfigurator.cpp',
-                                            'SourceLine' => '79'
+                                            'ShortName' => 'TimeBasedRollingPolicy',
+                                            'Source' => 'timebasedrollingpolicy.cpp',
+                                            'SourceLine' => '169'
                                           },
-                            '12228440' => {
+                            '11321335' => {
                                             'Artificial' => 1,
-                                            'Class' => '11894647',
+                                            'Class' => '11294672',
                                             'Destructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator25ClazzPropertyConfiguratorD0Ev',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicyD0Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900316'
+                                                                  'type' => '11300414'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertyConfigurator',
+                                            'ShortName' => 'ClazzTimeBasedRollingPolicy',
                                             'Virt' => 1
                                           },
-                            '12228441' => {
+                            '11321336' => {
                                             'Artificial' => 1,
-                                            'Class' => '11894647',
+                                            'Class' => '11294672',
                                             'Destructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator25ClazzPropertyConfiguratorD1Ev',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicyD1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900316'
+                                                                  'type' => '11300414'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertyConfigurator',
+                                            'ShortName' => 'ClazzTimeBasedRollingPolicy',
                                             'Virt' => 1
                                           },
-                            '12228582' => {
+                            '11321379' => {
                                             'Artificial' => 1,
-                                            'Class' => '11894647',
+                                            'Class' => '11294672',
                                             'Destructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator25ClazzPropertyConfiguratorD2Ev',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicyD2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900316'
+                                                                  'type' => '11300414'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertyConfigurator',
+                                            'ShortName' => 'ClazzTimeBasedRollingPolicy',
                                             'Virt' => 1
                                           },
-                            '12228672' => {
+                            '11321447' => {
                                             'Artificial' => 1,
-                                            'Class' => '11894647',
+                                            'Class' => '11294672',
                                             'Constructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator25ClazzPropertyConfiguratorC2Ev',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicyC2Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900316'
+                                                                  'type' => '11300414'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertyConfigurator'
+                                            'ShortName' => 'ClazzTimeBasedRollingPolicy'
                                           },
-                            '12228673' => {
+                            '11321448' => {
                                             'Artificial' => 1,
-                                            'Class' => '11894647',
+                                            'Class' => '11294672',
                                             'Constructor' => 1,
-                                            'Header' => 'propertyconfigurator.h',
+                                            'Header' => 'timebasedrollingpolicy.h',
                                             'InLine' => 1,
-                                            'Line' => '109',
-                                            'MnglName' => '_ZN7log4cxx20PropertyConfigurator25ClazzPropertyConfiguratorC1Ev',
+                                            'Line' => '148',
+                                            'MnglName' => '_ZN7log4cxx7rolling22TimeBasedRollingPolicy27ClazzTimeBasedRollingPolicyC1Ev',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '11900316'
+                                                                  'type' => '11300414'
                                                                 }
                                                        },
-                                            'ShortName' => 'ClazzPropertyConfigurator'
+                                            'ShortName' => 'ClazzTimeBasedRollingPolicy'
                                           },
-                            '12291827' => {
-                                            'Class' => '5743830',
+                            '11379880' => {
+                                            'Class' => '2141330',
                                             'Const' => 1,
-                                            'Header' => 'resourcebundle.h',
-                                            'InLine' => 2,
-                                            'Line' => '41',
-                                            'MnglName' => '_ZNK7log4cxx7helpers14ResourceBundle10instanceofERKNS0_5ClassE',
+                                            'Header' => 'timezone.h',
+                                            'MnglName' => '_ZNK7log4cxx7helpers8TimeZone8getClassEv',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '12308500'
-                                                                },
-                                                         '1' => {
-                                                                  'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '9271956'
                                                                 }
                                                        },
-                                            'Return' => '41824',
-                                            'ShortName' => 'instanceof',
+                                            'Return' => '57815',
+                                            'ShortName' => 'getClass',
+                                            'Source' => 'timezone.cpp',
+                                            'SourceLine' => '38',
                                             'Virt' => 1,
-                                            'VirtPos' => '3'
+                                            'VirtPos' => '0'
+                                          },
+                            '11379919' => {
+                                            'Class' => '2141330',
+                                            'Header' => 'timezone.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers8TimeZone14getStaticClassEv',
+                                            'Return' => '57815',
+                                            'ShortName' => 'getStaticClass',
+                                            'Source' => 'timezone.cpp',
+                                            'SourceLine' => '38',
+                                            'Static' => 1
+                                          },
+                            '11379936' => {
+                                            'Class' => '2141330',
+                                            'Header' => 'timezone.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers8TimeZone13registerClassEv',
+                                            'Return' => '57821',
+                                            'ShortName' => 'registerClass',
+                                            'Source' => 'timezone.cpp',
+                                            'SourceLine' => '38',
+                                            'Static' => 1
                                           },
-                            '12291871' => {
-                                            'Class' => '5743830',
+                            '11379953' => {
+                                            'Class' => '2141330',
                                             'Const' => 1,
-                                            'Header' => 'resourcebundle.h',
+                                            'Header' => 'timezone.h',
                                             'InLine' => 2,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZNK7log4cxx7helpers14ResourceBundle4castERKNS0_5ClassE',
+                                            'Line' => '42',
+                                            'MnglName' => '_ZNK7log4cxx7helpers8TimeZone4castERKNS0_5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '12308500'
+                                                                  'type' => '9271956'
                                                                 },
                                                          '1' => {
                                                                   'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '45584',
+                                            'Return' => '48431',
                                             'ShortName' => 'cast',
                                             'Virt' => 1,
                                             'VirtPos' => '4'
                                           },
-                            '12291915' => {
-                                            'Class' => '5743830',
-                                            'Header' => 'resourcebundle.h',
-                                            'Line' => '38',
-                                            'MnglName' => '_ZN7log4cxx7helpers14ResourceBundle14getStaticClassEv',
-                                            'Private' => 1,
-                                            'Return' => '55278',
-                                            'ShortName' => 'getStaticClass',
-                                            'Source' => 'resourcebundle.cpp',
-                                            'SourceLine' => '28',
-                                            'Static' => 1
-                                          },
-                            '12292458' => {
-                                            'Class' => '12292374',
+                            '11379997' => {
+                                            'Class' => '2141330',
                                             'Const' => 1,
-                                            'Header' => 'propertyresourcebundle.h',
-                                            'MnglName' => '_ZNK7log4cxx7helpers22PropertyResourceBundle8getClassEv',
+                                            'Header' => 'timezone.h',
+                                            'InLine' => 2,
+                                            'Line' => '44',
+                                            'MnglName' => '_ZNK7log4cxx7helpers8TimeZone10instanceofERKNS0_5ClassE',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '12293839'
+                                                                  'type' => '9271956'
+                                                                },
+                                                         '1' => {
+                                                                  'name' => 'clazz',
+                                                                  'type' => '57815'
                                                                 }
                                                        },
-                                            'Return' => '55278',
-                                            'ShortName' => 'getClass',
-                                            'Source' => 'propertyresourcebundle.cpp',
-                                            'SourceLine' => '28',
+                                            'Return' => '44686',
+                                            'ShortName' => 'instanceof',
                                             'Virt' => 1,
-                                            'VirtPos' => '0'
+                                            'VirtPos' => '3'
                                           },
-                            '12292497' => {
-                                            'Class' => '12292374',
-                                            'Header' => 'propertyresourcebundle.h',
-                                            'Line' => '38',
-                                            'MnglName' => '_ZN7log4cxx7helpers22PropertyResourceBundle14getStaticClassEv',
-                                            'Return' => '55278',
-                                            'ShortName' => 'getStaticClass',
-                                            'Source' => 'propertyresourcebundle.cpp',
-                                            'SourceLine' => '28',
+                            '11380041' => {
+                                            'Class' => '2141330',
+                                            'Header' => 'timezone.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers8TimeZone10getDefaultEv',
+                                            'Return' => '1091410',
+                                            'ShortName' => 'getDefault',
+                                            'Source' => 'timezone.cpp',
+                                            'SourceLine' => '196',
                                             'Static' => 1
                                           },
-                            '12292515' => {
-                                            'Class' => '12292374',
-                                            'Header' => 'propertyresourcebundle.h',
-                                            'MnglName' => '_ZN7log4cxx7helpers22PropertyResourceBundle13registerClassEv',
-                                            'Return' => '55284',
-                                            'ShortName' => 'registerClass',
-                                            'Source' => 'propertyresourcebundle.cpp',
-                                            'SourceLine' => '28',
+                            '11380058' => {
+                                            'Class' => '2141330',
+                                            'Header' => 'timezone.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers8TimeZone6getGMTEv',
+                                            'Return' => '1091410',
+                                            'ShortName' => 'getGMT',
+                                            'Source' => 'timezone.cpp',
+                                            'SourceLine' => '201',
+                                            'Static' => 1
+                                          },
+                            '11380075' => {
+                                            'Class' => '2141330',
+                                            'Header' => 'timezone.h',
+                                            'MnglName' => '_ZN7log4cxx7helpers8TimeZone11getTimeZoneERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE',
+                                            'Param' => {
+                                                         '0' => {
+                                                                  'name' => 'id',
+                                                                  'type' => '212489'
+                                                                }
+                                                       },
+                                            'Return' => '1089240',
+                                            'ShortName' => 'getTimeZone',
+                                            'Source' => 'timezone.cpp',
+                                            'SourceLine' => '206',
                                             'Static' => 1
                                           },
-                            '12292533' => {
-                                            'Class' => '12292374',
+                            '11380134' => {
+                                            'Class' => '2141330',
                                             'Const' => 1,
-                                            'Header' => 'propertyresourcebundle.h',
-                                            'InLine' => 2,
-                                            'Line' => '39',
-                                            'MnglName' => '_ZNK7log4cxx7helpers22PropertyResourceBundle4castERKNS0_5ClassE',
+                                            'Header' => 'timezone.h',
+                                            'Line' => '60',
+                                            'MnglName' => '_ZNK7log4cxx7helpers8TimeZone7explodeEP14apr_time_exp_tx',
                                             'Param' => {
                                                          '0' => {
                                                                   'name' => 'this',
-                                                                  'type' => '12293839'
+                                                                  'type' => '9271950'
                                                                 },
                                                          '1' => {
-                                                                  'name' => 'clazz',
-                                                                  'type' => '55278'
+                                                                  'name' => 'p1',
+                                                                  'type' => '11382675'
+                                                                },
+                                                         '2' => {
+                                                                  'name' => 'p2',
+                                                                  'type' => '451231'
                                                                 }
                                                        },
-                                            'Return' => '45584',
-                                            'ShortName' => 'cast',
+                                            'PureVirt' => 1,
+                                            'Return' => '585023',
+                                            'ShortName' => 'explode',
... 196693 lines suppressed ...

[logging-log4cxx] 07/20: Converted more classes to privdata

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7abd9c6979205f9282284c30719cc6f28117c1fb
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Thu Nov 4 22:07:42 2021 -0400

    Converted more classes to privdata
---
 src/main/cpp/action.cpp                            | 26 ++-------
 src/main/cpp/defaultrepositoryselector.cpp         | 10 +++-
 src/main/cpp/domconfigurator.cpp                   | 30 ++++++----
 src/main/cpp/fallbackerrorhandler.cpp              | 22 +++++---
 src/main/cpp/fileinputstream.cpp                   | 27 ++++++---
 src/main/cpp/fileoutputstream.cpp                  | 27 ++++++---
 src/main/cpp/filerenameaction.cpp                  | 18 +++++-
 src/main/cpp/formattinginfo.cpp                    | 55 ++++++++++++++++---
 src/main/cpp/gzcompressaction.cpp                  | 29 ++++++++--
 src/main/cpp/htmllayout.cpp                        | 57 ++++++++++++++++---
 src/main/cpp/patternlayout.cpp                     | 55 ++++++++++++++-----
 src/main/cpp/socketoutputstream.cpp                | 24 +++++---
 src/main/cpp/xmllayout.cpp                         | 36 +++++++++++-
 src/main/cpp/zipcompressaction.cpp                 | 31 ++++++++---
 .../include/log4cxx/helpers/bufferedoutputstream.h | 64 ----------------------
 src/main/include/log4cxx/helpers/fileinputstream.h |  6 +-
 .../include/log4cxx/helpers/fileoutputstream.h     |  4 +-
 .../include/log4cxx/helpers/socketoutputstream.h   |  4 +-
 src/main/include/log4cxx/htmllayout.h              | 38 +++----------
 src/main/include/log4cxx/pattern/formattinginfo.h  | 33 ++---------
 src/main/include/log4cxx/patternlayout.h           | 23 ++------
 .../log4cxx/private/action_priv.h}                 | 37 +++++++++----
 src/main/include/log4cxx/rolling/action.h          |  5 +-
 .../include/log4cxx/rolling/filerenameaction.h     |  4 +-
 .../include/log4cxx/rolling/gzcompressaction.h     |  5 +-
 .../include/log4cxx/rolling/zipcompressaction.h    |  4 +-
 .../log4cxx/spi/defaultrepositoryselector.h        |  5 +-
 .../include/log4cxx/varia/fallbackerrorhandler.h   |  6 +-
 src/main/include/log4cxx/xml/domconfigurator.h     | 11 ++--
 src/main/include/log4cxx/xml/xmllayout.h           | 27 +++------
 30 files changed, 409 insertions(+), 314 deletions(-)

diff --git a/src/main/cpp/action.cpp b/src/main/cpp/action.cpp
index 1e6b8b9..43ff238 100644
--- a/src/main/cpp/action.cpp
+++ b/src/main/cpp/action.cpp
@@ -16,6 +16,7 @@
  */
 #include <log4cxx/logstring.h>
 #include <log4cxx/rolling/action.h>
+#include <log4cxx/private/action_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
@@ -24,31 +25,14 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(Action)
 
-struct Action::priv_data{
-	priv_data() :
-		complete(false),
-		interrupted(false),
-		pool(){}
-
-	/**
-	 * Is action complete.
-	 */
-	bool complete;
-
-	/**
-	 * Is action interrupted.
-	 */
-	bool interrupted;
-
-	log4cxx::helpers::Pool pool;
-	std::mutex mutex;
-};
-
 Action::Action() :
-	m_priv( std::make_unique<Action::priv_data>() )
+	m_priv( std::make_unique<Action::ActionPrivate>() )
 {
 }
 
+Action::Action( std::unique_ptr<ActionPrivate> priv ) :
+	m_priv( std::move(priv) ){}
+
 Action::~Action()
 {
 }
diff --git a/src/main/cpp/defaultrepositoryselector.cpp b/src/main/cpp/defaultrepositoryselector.cpp
index 238e0ac..2dc9a21 100644
--- a/src/main/cpp/defaultrepositoryselector.cpp
+++ b/src/main/cpp/defaultrepositoryselector.cpp
@@ -21,13 +21,19 @@ using namespace log4cxx;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+struct DefaultRepositorySelector::DefaultRepositorySelectorPrivate{
+	LoggerRepositoryPtr repository;
+};
 
 DefaultRepositorySelector::DefaultRepositorySelector(const LoggerRepositoryPtr repository1)
-	: repository(repository1)
+	: m_priv(std::make_unique<DefaultRepositorySelectorPrivate>())
 {
+	m_priv->repository = repository1;
 }
 
+DefaultRepositorySelector::~DefaultRepositorySelector(){}
+
 LoggerRepositoryPtr DefaultRepositorySelector::getLoggerRepository()
 {
-	return repository;
+	return m_priv->repository;
 }
diff --git a/src/main/cpp/domconfigurator.cpp b/src/main/cpp/domconfigurator.cpp
index 6d62d09..37979ab 100644
--- a/src/main/cpp/domconfigurator.cpp
+++ b/src/main/cpp/domconfigurator.cpp
@@ -56,6 +56,12 @@ using namespace log4cxx::spi;
 using namespace log4cxx::config;
 using namespace log4cxx::rolling;
 
+struct DOMConfigurator::DOMConfiguratorPrivate{
+	helpers::Properties props;
+	spi::LoggerRepositoryPtr repository;
+	spi::LoggerFactoryPtr loggerFactory;
+};
+
 
 #if APR_HAS_THREADS
 namespace log4cxx
@@ -117,10 +123,12 @@ IMPLEMENT_LOG4CXX_OBJECT(DOMConfigurator)
 #define THREAD_CONFIG_ATTR "threadConfiguration"
 
 DOMConfigurator::DOMConfigurator()
-	: props(), repository()
+	: m_priv(std::make_unique<DOMConfiguratorPrivate>())
 {
 }
 
+DOMConfigurator::~DOMConfigurator(){}
+
 /**
 Used internally to parse appenders by IDREF name.
 */
@@ -353,12 +361,12 @@ void DOMConfigurator::parseErrorHandler(Pool& p,
 			else if (tagName == LOGGER_REF)
 			{
 				LogString loggerName(getAttribute(utf8Decoder, currentElement, REF_ATTR));
-				LoggerPtr logger = repository->getLogger(loggerName, loggerFactory);
+				LoggerPtr logger = m_priv->repository->getLogger(loggerName, m_priv->loggerFactory);
 				eh->setLogger(logger);
 			}
 			else if (tagName == ROOT_REF)
 			{
-				LoggerPtr root = repository->getRootLogger();
+				LoggerPtr root = m_priv->repository->getRootLogger();
 				eh->setLogger(root);
 			}
 		}
@@ -422,7 +430,7 @@ void DOMConfigurator::parseLogger(
 	LogString loggerName = subst(getAttribute(utf8Decoder, loggerElement, NAME_ATTR));
 
 	LogLog::debug(LOG4CXX_STR("Retreiving an instance of Logger."));
-	LoggerPtr logger = repository->getLogger(loggerName, loggerFactory);
+	LoggerPtr logger = m_priv->repository->getLogger(loggerName, m_priv->loggerFactory);
 
 	// Setting up a logger needs to be an atomic operation, in order
 	// to protect potential log operations while logger
@@ -459,8 +467,8 @@ void DOMConfigurator::parseLoggerFactory(
 				className,
 				LoggerFactory::getStaticClass(),
 				0);
-		loggerFactory = log4cxx::cast<LoggerFactory>(obj);
-		PropertySetter propSetter(loggerFactory);
+		m_priv->loggerFactory = log4cxx::cast<LoggerFactory>(obj);
+		PropertySetter propSetter(m_priv->loggerFactory);
 
 		for (apr_xml_elem* currentElement = factoryElement->first_child;
 			currentElement;
@@ -486,7 +494,7 @@ void DOMConfigurator::parseRoot(
 	apr_xml_doc* doc,
 	AppenderMap& appenders)
 {
-	LoggerPtr root = repository->getRootLogger();
+	LoggerPtr root = m_priv->repository->getRootLogger();
 	parseChildrenOfLoggerElement(p, utf8Decoder, rootElement, root, true, doc, appenders);
 }
 
@@ -772,13 +780,13 @@ void DOMConfigurator::setParameter(log4cxx::helpers::Pool& p,
 void DOMConfigurator::doConfigure(const File& filename, spi::LoggerRepositoryPtr repository1)
 {
 	repository1->setConfigured(true);
-	this->repository = repository1;
+	m_priv->repository = repository1;
 	LogString msg(LOG4CXX_STR("DOMConfigurator configuring file "));
 	msg.append(filename.getPath());
 	msg.append(LOG4CXX_STR("..."));
 	LogLog::debug(msg);
 
-	loggerFactory = LoggerFactoryPtr(new DefaultLoggerFactory());
+	m_priv->loggerFactory = LoggerFactoryPtr(new DefaultLoggerFactory());
 
 	Pool p;
 	apr_file_t* fd;
@@ -1026,7 +1034,7 @@ void DOMConfigurator::parse(
 
 	if (!thresholdStr.empty() && thresholdStr != NULL_STRING)
 	{
-		repository->setThreshold(thresholdStr);
+		m_priv->repository->setThreshold(thresholdStr);
 	}
 
 	LogString strstrValue = subst(getAttribute(utf8Decoder, element, STRINGSTREAM_ATTR));
@@ -1085,7 +1093,7 @@ LogString DOMConfigurator::subst(const LogString& value)
 {
 	try
 	{
-		return OptionConverter::substVars(value, props);
+		return OptionConverter::substVars(value, m_priv->props);
 	}
 	catch (IllegalArgumentException& e)
 	{
diff --git a/src/main/cpp/fallbackerrorhandler.cpp b/src/main/cpp/fallbackerrorhandler.cpp
index 17068ba..57f55f2 100644
--- a/src/main/cpp/fallbackerrorhandler.cpp
+++ b/src/main/cpp/fallbackerrorhandler.cpp
@@ -30,16 +30,24 @@ using namespace log4cxx::varia;
 
 IMPLEMENT_LOG4CXX_OBJECT(FallbackErrorHandler)
 
+struct FallbackErrorHandler::FallbackErrorHandlerPrivate {
+	AppenderWeakPtr backup;
+	AppenderWeakPtr primary;
+	std::vector<LoggerPtr> loggers;
+};
+
 FallbackErrorHandler::FallbackErrorHandler()
-	: backup(), primary(), loggers()
+	: m_priv(std::make_unique<FallbackErrorHandlerPrivate>())
 {
 }
 
+FallbackErrorHandler::~FallbackErrorHandler(){}
+
 void FallbackErrorHandler::setLogger(const LoggerPtr& logger)
 {
 	LogLog::debug(((LogString) LOG4CXX_STR("FB: Adding logger ["))
 		+ logger->getName() + LOG4CXX_STR("]."));
-	loggers.push_back(logger);
+	m_priv->loggers.push_back(logger);
 }
 
 void FallbackErrorHandler::error(const LogString& message,
@@ -57,15 +65,15 @@ void FallbackErrorHandler::error(const LogString& message,
 		+  message, e);
 	LogLog::debug(LOG4CXX_STR("FB: INITIATING FALLBACK PROCEDURE."));
 
-	AppenderPtr primaryLocked = primary.lock();
-	AppenderPtr backupLocked = backup.lock();
+	AppenderPtr primaryLocked = m_priv->primary.lock();
+	AppenderPtr backupLocked = m_priv->backup.lock();
 
 	if ( !primaryLocked || !backupLocked )
 	{
 		return;
 	}
 
-	for (LoggerPtr l : loggers)
+	for (LoggerPtr l : m_priv->loggers)
 	{
 		LogLog::debug(((LogString) LOG4CXX_STR("FB: Searching for ["))
 			+ primaryLocked->getName() + LOG4CXX_STR("] in logger [")
@@ -86,14 +94,14 @@ void FallbackErrorHandler::setAppender(const AppenderPtr& primary1)
 {
 	LogLog::debug(((LogString) LOG4CXX_STR("FB: Setting primary appender to ["))
 		+ primary1->getName() + LOG4CXX_STR("]."));
-	this->primary = primary1;
+	m_priv->primary = primary1;
 }
 
 void FallbackErrorHandler::setBackupAppender(const AppenderPtr& backup1)
 {
 	LogLog::debug(((LogString) LOG4CXX_STR("FB: Setting backup appender to ["))
 		+ backup1->getName() + LOG4CXX_STR("]."));
-	this->backup = backup1;
+	m_priv->backup = backup1;
 }
 
 void FallbackErrorHandler::activateOptions(Pool&)
diff --git a/src/main/cpp/fileinputstream.cpp b/src/main/cpp/fileinputstream.cpp
index c075193..d9a8917 100644
--- a/src/main/cpp/fileinputstream.cpp
+++ b/src/main/cpp/fileinputstream.cpp
@@ -29,14 +29,23 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct FileInputStream::FileInputStreamPrivate {
+	FileInputStreamPrivate() : fileptr(nullptr){}
+
+	Pool pool;
+	apr_file_t* fileptr;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(FileInputStream)
 
-FileInputStream::FileInputStream(const LogString& filename) : fileptr(0)
+FileInputStream::FileInputStream(const LogString& filename) :
+	m_priv(std::make_unique<FileInputStreamPrivate>())
 {
 	open(filename);
 }
 
-FileInputStream::FileInputStream(const logchar* filename) : fileptr(0)
+FileInputStream::FileInputStream(const logchar* filename) :
+	m_priv(std::make_unique<FileInputStreamPrivate>())
 {
 	LogString fn(filename);
 	open(fn);
@@ -47,7 +56,7 @@ 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(&fileptr, flags, perm, pool);
+	apr_status_t stat = File().setPath(filename).open(&m_priv->fileptr, flags, perm, m_priv->pool);
 
 	if (stat != APR_SUCCESS)
 	{
@@ -60,7 +69,7 @@ FileInputStream::FileInputStream(const File& aFile)
 {
 	apr_fileperms_t perm = APR_OS_DEFAULT;
 	apr_int32_t flags = APR_READ;
-	apr_status_t stat = aFile.open(&fileptr, flags, perm, pool);
+	apr_status_t stat = aFile.open(&m_priv->fileptr, flags, perm, m_priv->pool);
 
 	if (stat != APR_SUCCESS)
 	{
@@ -71,20 +80,20 @@ FileInputStream::FileInputStream(const File& aFile)
 
 FileInputStream::~FileInputStream()
 {
-	if (fileptr != NULL && !APRInitializer::isDestructed)
+	if (m_priv->fileptr != NULL && !APRInitializer::isDestructed)
 	{
-		apr_file_close(fileptr);
+		apr_file_close(m_priv->fileptr);
 	}
 }
 
 
 void FileInputStream::close()
 {
-	apr_status_t stat = apr_file_close(fileptr);
+	apr_status_t stat = apr_file_close(m_priv->fileptr);
 
 	if (stat == APR_SUCCESS)
 	{
-		fileptr = NULL;
+		m_priv->fileptr = NULL;
 	}
 	else
 	{
@@ -96,7 +105,7 @@ void FileInputStream::close()
 int FileInputStream::read(ByteBuffer& buf)
 {
 	apr_size_t bytesRead = buf.remaining();
-	apr_status_t stat = apr_file_read(fileptr, buf.current(), &bytesRead);
+	apr_status_t stat = apr_file_read(m_priv->fileptr, buf.current(), &bytesRead);
 	int retval = -1;
 
 	if (!APR_STATUS_IS_EOF(stat))
diff --git a/src/main/cpp/fileoutputstream.cpp b/src/main/cpp/fileoutputstream.cpp
index 036ede3..526d3d3 100644
--- a/src/main/cpp/fileoutputstream.cpp
+++ b/src/main/cpp/fileoutputstream.cpp
@@ -29,16 +29,25 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct FileOutputStream::FileOutputStreamPrivate{
+	FileOutputStreamPrivate() : fileptr(nullptr){}
+
+	Pool pool;
+	apr_file_t* fileptr;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(FileOutputStream)
 
 FileOutputStream::FileOutputStream(const LogString& filename,
-	bool append) : pool(), fileptr(open(filename, append, pool))
+	bool append) : m_priv(std::make_unique<FileOutputStreamPrivate>())
 {
+	m_priv->fileptr = open(filename, append, m_priv->pool);
 }
 
 FileOutputStream::FileOutputStream(const logchar* filename,
-	bool append) : pool(), fileptr(open(filename, append, pool))
+	bool append) : m_priv(std::make_unique<FileOutputStreamPrivate>())
 {
+	m_priv->fileptr = open(filename, append, m_priv->pool);
 }
 
 apr_file_t* FileOutputStream::open(const LogString& filename,
@@ -71,24 +80,24 @@ apr_file_t* FileOutputStream::open(const LogString& filename,
 
 FileOutputStream::~FileOutputStream()
 {
-	if (fileptr != NULL && !APRInitializer::isDestructed)
+	if (m_priv->fileptr != NULL && !APRInitializer::isDestructed)
 	{
-		apr_file_close(fileptr);
+		apr_file_close(m_priv->fileptr);
 	}
 }
 
 void FileOutputStream::close(Pool& /* p */)
 {
-	if (fileptr != NULL)
+	if (m_priv->fileptr != NULL)
 	{
-		apr_status_t stat = apr_file_close(fileptr);
+		apr_status_t stat = apr_file_close(m_priv->fileptr);
 
 		if (stat != APR_SUCCESS)
 		{
 			throw IOException(stat);
 		}
 
-		fileptr = NULL;
+		m_priv->fileptr = NULL;
 	}
 }
 
@@ -98,7 +107,7 @@ void FileOutputStream::flush(Pool& /* p */)
 
 void FileOutputStream::write(ByteBuffer& buf, Pool& /* p */ )
 {
-	if (fileptr == NULL)
+	if (m_priv->fileptr == NULL)
 	{
 		throw IOException(-1);
 	}
@@ -110,7 +119,7 @@ void FileOutputStream::write(ByteBuffer& buf, Pool& /* p */ )
 	while (nbytes > 0)
 	{
 		apr_status_t stat = apr_file_write(
-				fileptr, data + pos, &nbytes);
+				m_priv->fileptr, data + pos, &nbytes);
 
 		if (stat != APR_SUCCESS)
 		{
diff --git a/src/main/cpp/filerenameaction.cpp b/src/main/cpp/filerenameaction.cpp
index 8dc416a..b30bcc5 100644
--- a/src/main/cpp/filerenameaction.cpp
+++ b/src/main/cpp/filerenameaction.cpp
@@ -17,21 +17,35 @@
 
 #include <log4cxx/logstring.h>
 #include <log4cxx/rolling/filerenameaction.h>
+#include <log4cxx/private/action_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::rolling;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<FileRenameActionPrivate*>(m_priv.get())
+
+struct FileRenameAction::FileRenameActionPrivate : public ActionPrivate{
+	FileRenameActionPrivate( const File& toRename,
+							 const File& renameTo,
+							 bool renameEmptyFile1):
+		source(toRename), destination(renameTo), renameEmptyFile(renameEmptyFile1){}
+
+	const File source;
+	const File destination;
+	bool renameEmptyFile;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(FileRenameAction)
 
 FileRenameAction::FileRenameAction(const File& toRename,
 	const File& renameTo,
 	bool renameEmptyFile1)
-	: source(toRename), destination(renameTo), renameEmptyFile(renameEmptyFile1)
+	: Action( std::make_unique<FileRenameActionPrivate>(toRename, renameTo, renameEmptyFile1) )
 {
 }
 
 bool FileRenameAction::execute(log4cxx::helpers::Pool& pool1) const
 {
-	return source.renameTo(destination, pool1);
+	return priv->source.renameTo(priv->destination, pool1);
 }
diff --git a/src/main/cpp/formattinginfo.cpp b/src/main/cpp/formattinginfo.cpp
index c20347b..ce15f5a 100644
--- a/src/main/cpp/formattinginfo.cpp
+++ b/src/main/cpp/formattinginfo.cpp
@@ -22,6 +22,28 @@
 using namespace log4cxx;
 using namespace log4cxx::pattern;
 
+struct FormattingInfo::FormattingInfoPrivate{
+	FormattingInfoPrivate(const bool leftAlign1, const int minLength1, const int maxLength1):
+		minLength(minLength1),
+		maxLength(maxLength1),
+		leftAlign(leftAlign1){}
+
+	/**
+	 * Minimum length.
+	 */
+	const int minLength;
+
+	/**
+	 * Maximum length.
+	 */
+	const int maxLength;
+
+	/**
+	 * Alignment.
+	 */
+	const bool leftAlign;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(FormattingInfo)
 
 /**
@@ -32,12 +54,12 @@ IMPLEMENT_LOG4CXX_OBJECT(FormattingInfo)
  */
 FormattingInfo::FormattingInfo(
 	const bool leftAlign1, const int minLength1, const int maxLength1) :
-	minLength(minLength1),
-	maxLength(maxLength1),
-	leftAlign(leftAlign1)
+	m_priv(std::make_unique<FormattingInfoPrivate>(leftAlign1, minLength1, maxLength1))
 {
 }
 
+FormattingInfo::~FormattingInfo(){}
+
 /**
  * Gets default instance.
  * @return default instance.
@@ -58,20 +80,35 @@ void FormattingInfo::format(const int fieldStart, LogString& buffer) const
 {
 	int rawLength = int(buffer.length() - fieldStart);
 
-	if (rawLength > maxLength)
+	if (rawLength > m_priv->maxLength)
 	{
 		buffer.erase(buffer.begin() + fieldStart,
-			buffer.begin() + fieldStart + (rawLength - maxLength));
+			buffer.begin() + fieldStart + (rawLength - m_priv->maxLength));
 	}
-	else if (rawLength < minLength)
+	else if (rawLength < m_priv->minLength)
 	{
-		if (leftAlign)
+		if (m_priv->leftAlign)
 		{
-			buffer.append(minLength - rawLength, (logchar) 0x20 /* ' ' */);
+			buffer.append(m_priv->minLength - rawLength, (logchar) 0x20 /* ' ' */);
 		}
 		else
 		{
-			buffer.insert(fieldStart, minLength - rawLength, 0x20 /* ' ' */);
+			buffer.insert(fieldStart, m_priv->minLength - rawLength, 0x20 /* ' ' */);
 		}
 	}
 }
+
+bool FormattingInfo::isLeftAligned() const
+{
+	return m_priv->leftAlign;
+}
+
+int FormattingInfo::getMinLength() const
+{
+	return m_priv->minLength;
+}
+
+int FormattingInfo::getMaxLength() const
+{
+	return m_priv->maxLength;
+}
diff --git a/src/main/cpp/gzcompressaction.cpp b/src/main/cpp/gzcompressaction.cpp
index b6735a9..d7af63f 100644
--- a/src/main/cpp/gzcompressaction.cpp
+++ b/src/main/cpp/gzcompressaction.cpp
@@ -20,23 +20,40 @@
 #include <apr_strings.h>
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/private/action_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::rolling;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<GZCompressActionPrivate*>(m_priv.get())
+
+struct GZCompressAction::GZCompressActionPrivate : public ActionPrivate{
+	GZCompressActionPrivate( const File& toRename,
+							 const File& renameTo,
+							 bool deleteSource):
+		source(toRename), destination(renameTo), deleteSource(deleteSource){}
+
+	const File source;
+	const File destination;
+	bool deleteSource;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(GZCompressAction)
 
 GZCompressAction::GZCompressAction(const File& src,
 	const File& dest,
 	bool del)
-	: source(src), destination(dest), deleteSource(del)
+	: Action(std::make_unique<GZCompressActionPrivate>(
+				 src, dest, del))
 {
 }
 
+GZCompressAction::~GZCompressAction(){}
+
 bool GZCompressAction::execute(log4cxx::helpers::Pool& p) const
 {
-	if (source.exists(p))
+	if (priv->source.exists(p))
 	{
 		apr_pool_t* aprpool = p.getAPRPool();
 		apr_procattr_t* attr;
@@ -67,7 +84,7 @@ bool GZCompressAction::execute(log4cxx::helpers::Pool& p) const
 		apr_file_t* child_out;
 		apr_int32_t flags = APR_FOPEN_READ | APR_FOPEN_WRITE |
 			APR_FOPEN_CREATE | APR_FOPEN_TRUNCATE;
-		stat = destination.open(&child_out, flags, APR_OS_DEFAULT, p);
+		stat = priv->destination.open(&child_out, flags, APR_OS_DEFAULT, p);
 
 		if (stat != APR_SUCCESS)
 		{
@@ -102,7 +119,7 @@ bool GZCompressAction::execute(log4cxx::helpers::Pool& p) const
 		int i = 0;
 		args[i++] = "gzip";
 		args[i++] = "-c";
-		args[i++] = Transcoder::encode(source.getPath(), p);
+		args[i++] = Transcoder::encode(priv->source.getPath(), p);
 		args[i++] = NULL;
 
 
@@ -122,9 +139,9 @@ bool GZCompressAction::execute(log4cxx::helpers::Pool& p) const
 			throw IOException(stat);
 		}
 
-		if (deleteSource)
+		if (priv->deleteSource)
 		{
-			source.deleteFile(p);
+			priv->source.deleteFile(p);
 		}
 
 		return true;
diff --git a/src/main/cpp/htmllayout.cpp b/src/main/cpp/htmllayout.cpp
index f63e78e..32e8596 100644
--- a/src/main/cpp/htmllayout.cpp
+++ b/src/main/cpp/htmllayout.cpp
@@ -33,14 +33,25 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+struct HTMLLayout::HTMLLayoutPrivate {
+	HTMLLayoutPrivate() : locationInfo(false), title(LOG4CXX_STR("Log4cxx Log Messages")),
+		dateFormat(){}
+
+	// Print no location info by default
+	bool locationInfo; //= false
+
+	LogString title;
+
+	helpers::ISO8601DateFormat dateFormat;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(HTMLLayout)
 
 
 HTMLLayout::HTMLLayout()
-	: locationInfo(false), title(LOG4CXX_STR("Log4cxx Log Messages")),
-	  dateFormat()
+	: m_priv(std::make_unique<HTMLLayoutPrivate>())
 {
-	dateFormat.setTimeZone(TimeZone::getGMT());
+	m_priv->dateFormat.setTimeZone(TimeZone::getGMT());
 }
 
 
@@ -69,7 +80,7 @@ void HTMLLayout::format(LogString& output,
 	output.append(LOG4CXX_EOL);
 	output.append(LOG4CXX_STR("<td>"));
 
-	dateFormat.format(output, event->getTimeStamp(), p);
+	m_priv->dateFormat.format(output, event->getTimeStamp(), p);
 
 
 	output.append(LOG4CXX_STR("</td>"));
@@ -112,7 +123,7 @@ void HTMLLayout::format(LogString& output,
 	output.append(LOG4CXX_STR("</td>"));
 	output.append(LOG4CXX_EOL);
 
-	if (locationInfo)
+	if (m_priv->locationInfo)
 	{
 		output.append(LOG4CXX_STR("<td>"));
 		const LocationInfo& locInfo = event->getLocationInformation();
@@ -162,7 +173,7 @@ void HTMLLayout::appendHeader(LogString& output, Pool& p)
 	output.append(LOG4CXX_STR("<head>"));
 	output.append(LOG4CXX_EOL);
 	output.append(LOG4CXX_STR("<title>"));
-	output.append(title);
+	output.append(m_priv->title);
 	output.append(LOG4CXX_STR("</title>"));
 	output.append(LOG4CXX_EOL);
 	output.append(LOG4CXX_STR("<style type=\"text/css\">"));
@@ -185,7 +196,7 @@ void HTMLLayout::appendHeader(LogString& output, Pool& p)
 	output.append(LOG4CXX_EOL);
 	output.append(LOG4CXX_STR("Log session start time "));
 
-	dateFormat.format(output, apr_time_now(), p);
+	m_priv->dateFormat.format(output, apr_time_now(), p);
 
 	output.append(LOG4CXX_STR("<br>"));
 	output.append(LOG4CXX_EOL);
@@ -204,7 +215,7 @@ void HTMLLayout::appendHeader(LogString& output, Pool& p)
 	output.append(LOG4CXX_STR("<th>Logger</th>"));
 	output.append(LOG4CXX_EOL);
 
-	if (locationInfo)
+	if (m_priv->locationInfo)
 	{
 		output.append(LOG4CXX_STR("<th>File:Line</th>"));
 		output.append(LOG4CXX_EOL);
@@ -224,3 +235,33 @@ void HTMLLayout::appendFooter(LogString& output, Pool& /* pool */ )
 	output.append(LOG4CXX_EOL);
 	output.append(LOG4CXX_STR("</body></html>"));
 }
+
+void HTMLLayout::setLocationInfo(bool locationInfoFlag)
+{
+	m_priv->locationInfo = locationInfoFlag;
+}
+
+bool HTMLLayout::getLocationInfo() const
+{
+	return m_priv->locationInfo;
+}
+
+void HTMLLayout::setTitle(const LogString& title1)
+{
+	m_priv->title.assign(title1);
+}
+
+const LogString& HTMLLayout::getTitle() const
+{
+	return m_priv->title;
+}
+
+LogString HTMLLayout::getContentType() const
+{
+	return LOG4CXX_STR("text/html");
+}
+
+bool HTMLLayout::ignoresThrowable() const
+{
+	return false;
+}
diff --git a/src/main/cpp/patternlayout.cpp b/src/main/cpp/patternlayout.cpp
index 0f9712b..d5e3db9 100644
--- a/src/main/cpp/patternlayout.cpp
+++ b/src/main/cpp/patternlayout.cpp
@@ -53,26 +53,50 @@ using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 using namespace log4cxx::pattern;
 
+struct PatternLayout::PatternLayoutPrivate{
+	PatternLayoutPrivate(){}
+	PatternLayoutPrivate(const LogString& pattern) :
+		conversionPattern(pattern){}
+
+	/**
+	 * Conversion pattern.
+	 */
+	LogString conversionPattern;
+
+	/**
+	 * Pattern converters.
+	 */
+	LoggingEventPatternConverterList patternConverters;
+
+	/**
+	 * Field widths and alignment corresponding to pattern converters.
+	 */
+	FormattingInfoList patternFields;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(PatternLayout)
 
 
-PatternLayout::PatternLayout()
+PatternLayout::PatternLayout() :
+	m_priv(std::make_unique<PatternLayoutPrivate>())
 {
 }
 
 /**
 Constructs a PatternLayout using the supplied conversion pattern.
 */
-PatternLayout::PatternLayout(const LogString& pattern)
-	: conversionPattern(pattern)
+PatternLayout::PatternLayout(const LogString& pattern) :
+	m_priv(std::make_unique<PatternLayoutPrivate>(pattern))
 {
 	Pool pool;
 	activateOptions(pool);
 }
 
+PatternLayout::~PatternLayout(){}
+
 void PatternLayout::setConversionPattern(const LogString& pattern)
 {
-	conversionPattern = pattern;
+	m_priv->conversionPattern = pattern;
 	Pool pool;
 	activateOptions(pool);
 }
@@ -82,11 +106,11 @@ void PatternLayout::format(LogString& output,
 	Pool& pool) const
 {
 	std::vector<FormattingInfoPtr>::const_iterator formatterIter =
-		patternFields.begin();
+		m_priv->patternFields.begin();
 
 	for (std::vector<LoggingEventPatternConverterPtr>::const_iterator
-		converterIter = patternConverters.begin();
-		converterIter != patternConverters.end();
+		converterIter = m_priv->patternConverters.begin();
+		converterIter != m_priv->patternConverters.end();
 		converterIter++, formatterIter++)
 	{
 		int startField = (int)output.length();
@@ -102,25 +126,25 @@ void PatternLayout::setOption(const LogString& option, const LogString& value)
 			LOG4CXX_STR("CONVERSIONPATTERN"),
 			LOG4CXX_STR("conversionpattern")))
 	{
-		conversionPattern = OptionConverter::convertSpecialChars(value);
+		m_priv->conversionPattern = OptionConverter::convertSpecialChars(value);
 	}
 }
 
 void PatternLayout::activateOptions(Pool&)
 {
-	LogString pat(conversionPattern);
+	LogString pat(m_priv->conversionPattern);
 
 	if (pat.empty())
 	{
 		pat = LOG4CXX_STR("%m%n");
 	}
 
-	patternConverters.erase(patternConverters.begin(), patternConverters.end());
-	patternFields.erase(patternFields.begin(), patternFields.end());
+	m_priv->patternConverters.erase(m_priv->patternConverters.begin(), m_priv->patternConverters.end());
+	m_priv->patternFields.erase(m_priv->patternFields.begin(), m_priv->patternFields.end());
 	std::vector<PatternConverterPtr> converters;
 	PatternParser::parse(pat,
 		converters,
-		patternFields,
+		m_priv->patternFields,
 		getFormatSpecifiers());
 
 	//
@@ -136,7 +160,7 @@ void PatternLayout::activateOptions(Pool&)
 
 		if (eventConverter != NULL)
 		{
-			patternConverters.push_back(eventConverter);
+			m_priv->patternConverters.push_back(eventConverter);
 		}
 	}
 }
@@ -192,6 +216,11 @@ log4cxx::pattern::PatternMap PatternLayout::getFormatSpecifiers()
 	return specs;
 }
 
+LogString PatternLayout::getConversionPattern() const
+{
+	return m_priv->conversionPattern;
+}
+
 
 
 
diff --git a/src/main/cpp/socketoutputstream.cpp b/src/main/cpp/socketoutputstream.cpp
index 250ddd3..34fc06a 100644
--- a/src/main/cpp/socketoutputstream.cpp
+++ b/src/main/cpp/socketoutputstream.cpp
@@ -26,11 +26,17 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct SocketOutputStream::SocketOutputStreamPrivate{
+	ByteList array;
+	SocketPtr socket;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(SocketOutputStream)
 
 SocketOutputStream::SocketOutputStream(const SocketPtr& socket1)
-	: socket(socket1)
+	: m_priv(std::make_unique<SocketOutputStreamPrivate>())
 {
+	m_priv->socket = socket1;
 }
 
 SocketOutputStream::~SocketOutputStream()
@@ -40,16 +46,16 @@ SocketOutputStream::~SocketOutputStream()
 void SocketOutputStream::close(Pool& p)
 {
 	flush(p);
-	socket->close();
+	m_priv->socket->close();
 }
 
 void SocketOutputStream::flush(Pool& /* p */)
 {
-	if (array.size() > 0)
+	if (m_priv->array.size() > 0)
 	{
-		ByteBuffer buf((char*) &array[0], array.size());
-		socket->write(buf);
-		array.resize(0);
+		ByteBuffer buf((char*) &m_priv->array[0], m_priv->array.size());
+		m_priv->socket->write(buf);
+		m_priv->array.resize(0);
 	}
 }
 
@@ -57,9 +63,9 @@ void SocketOutputStream::write(ByteBuffer& buf, Pool& /* p */ )
 {
 	if (buf.remaining() > 0)
 	{
-		size_t sz = array.size();
-		array.resize(sz + buf.remaining());
-		memcpy(&array[sz], buf.current(), buf.remaining());
+		size_t sz = m_priv->array.size();
+		m_priv->array.resize(sz + buf.remaining());
+		memcpy(&m_priv->array[sz], buf.current(), buf.remaining());
 		buf.position(buf.limit());
 	}
 }
diff --git a/src/main/cpp/xmllayout.cpp b/src/main/cpp/xmllayout.cpp
index 1cdae41..2f8d7bd 100644
--- a/src/main/cpp/xmllayout.cpp
+++ b/src/main/cpp/xmllayout.cpp
@@ -32,13 +32,23 @@ using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 using namespace log4cxx::xml;
 
+struct XMLLayout::XMLLayoutPrivate{
+	XMLLayoutPrivate() : locationInfo(false), properties(false){}
+
+	// Print no location info by default
+	bool locationInfo; //= false
+	bool properties; // = false
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(XMLLayout)
 
 XMLLayout::XMLLayout()
-	: locationInfo(false), properties(false)
+	: m_priv(std::make_unique<XMLLayoutPrivate>())
 {
 }
 
+XMLLayout::~XMLLayout(){}
+
 void XMLLayout::setOption(const LogString& option,
 	const LogString& value)
 {
@@ -85,7 +95,7 @@ void XMLLayout::format(LogString& output,
 		output.append(LOG4CXX_EOL);
 	}
 
-	if (locationInfo)
+	if (m_priv->locationInfo)
 	{
 		output.append(LOG4CXX_STR("<log4j:locationInfo class=\""));
 		const LocationInfo& locInfo = event->getLocationInformation();
@@ -103,7 +113,7 @@ void XMLLayout::format(LogString& output,
 		output.append(LOG4CXX_EOL);
 	}
 
-	if (properties)
+	if (m_priv->properties)
 	{
 		LoggingEvent::KeySet propertySet(event->getPropertyKeySet());
 		LoggingEvent::KeySet keySet(event->getMDCKeySet());
@@ -159,3 +169,23 @@ void XMLLayout::format(LogString& output,
 	output.append(LOG4CXX_EOL);
 }
 
+void XMLLayout::setLocationInfo(bool locationInfo1)
+{
+	m_priv->locationInfo = locationInfo1;
+}
+
+bool XMLLayout::getLocationInfo() const
+{
+	return m_priv->locationInfo;
+}
+
+void XMLLayout::setProperties(bool flag)
+{
+	m_priv->properties = flag;
+}
+
+bool XMLLayout::getProperties()
+{
+	return m_priv->properties;
+}
+
diff --git a/src/main/cpp/zipcompressaction.cpp b/src/main/cpp/zipcompressaction.cpp
index de0ac64..410710f 100644
--- a/src/main/cpp/zipcompressaction.cpp
+++ b/src/main/cpp/zipcompressaction.cpp
@@ -20,23 +20,38 @@
 #include <apr_strings.h>
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/private/action_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::rolling;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<ZipCompressActionPrivate*>(m_priv.get())
+
+struct ZipCompressAction::ZipCompressActionPrivate : public ActionPrivate{
+	ZipCompressActionPrivate( const File& toRename,
+							 const File& renameTo,
+							 bool deleteSource):
+		source(toRename), destination(renameTo), deleteSource(deleteSource){}
+
+	const File source;
+	const File destination;
+	bool deleteSource;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(ZipCompressAction)
 
 ZipCompressAction::ZipCompressAction(const File& src,
 	const File& dest,
 	bool del)
-	: source(src), destination(dest), deleteSource(del)
+	: Action(std::make_unique<ZipCompressActionPrivate>(
+				 src, dest, del))
 {
 }
 
 bool ZipCompressAction::execute(log4cxx::helpers::Pool& p) const
 {
-	if (!source.exists(p))
+	if (!priv->source.exists(p))
 	{
 		return false;
 	}
@@ -86,13 +101,13 @@ bool ZipCompressAction::execute(log4cxx::helpers::Pool& p) const
 
 	args[i++] = "zip";
 	args[i++] = "-q";
-	args[i++] = Transcoder::encode(destination.getPath(), p);
-	args[i++] = Transcoder::encode(source.getPath(), p);
+	args[i++] = Transcoder::encode(priv->destination.getPath(), p);
+	args[i++] = Transcoder::encode(priv->source.getPath(), p);
 	args[i++] = NULL;
 
-	if (destination.exists(p))
+	if (priv->destination.exists(p))
 	{
-		destination.deleteFile(p);
+		priv->destination.deleteFile(p);
 	}
 
 	apr_proc_t pid;
@@ -111,9 +126,9 @@ bool ZipCompressAction::execute(log4cxx::helpers::Pool& p) const
 		throw IOException(exitCode);
 	}
 
-	if (deleteSource)
+	if (priv->deleteSource)
 	{
-		source.deleteFile(p);
+		priv->source.deleteFile(p);
 	}
 
 	return true;
diff --git a/src/main/include/log4cxx/helpers/bufferedoutputstream.h b/src/main/include/log4cxx/helpers/bufferedoutputstream.h
deleted file mode 100644
index 0803da6..0000000
--- a/src/main/include/log4cxx/helpers/bufferedoutputstream.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_HELPERS_BUFFEREDOUTPUTSTREAM_H
-#define _LOG4CXX_HELPERS_BUFFEREDOUTPUTSTREAM_H
-
-#include <log4cxx/helpers/outputstream.h>
-
-namespace log4cxx
-{
-
-namespace helpers
-{
-
-/**
-*   Abstract class for writing to character streams.
-*/
-class LOG4CXX_EXPORT BufferedOutputStream : public OutputStream
-{
-	private:
-		size_t count;
-		LogString buf;
-
-	public:
-		DECLARE_ABSTRACT_LOG4CXX_OBJECT(BufferedOutputStream)
-		BEGIN_LOG4CXX_CAST_MAP()
-		LOG4CXX_CAST_ENTRY(BufferedOutputStream)
-		LOG4CXX_CAST_ENTRY_CHAIN(OutputStream)
-		END_LOG4CXX_CAST_MAP()
-
-	protected:
-		BufferedOutputStream(OutputStreamPtr& out, size_t size = 4096);
-		~BufferedOutputStream();
-
-	public:
-		void close(Pool& p);
-		void flush(Pool& p);
-		void write(ByteBuffer& buf, Pool& p);
-
-	private:
-		BufferedOutputStream(const BufferedOutputStream&);
-		BufferedOutputStream& operator=(const BufferedOutputStream&);
-};
-
-LOG4CXX_PTR_DEF(BufferedOutputStream);
-} // namespace helpers
-
-}  //namespace log4cxx
-
-#endif //_LOG4CXX_HELPERS_BUFFEREDOUTPUTSTREAM_H
diff --git a/src/main/include/log4cxx/helpers/fileinputstream.h b/src/main/include/log4cxx/helpers/fileinputstream.h
index 613b33f..d088c4e 100644
--- a/src/main/include/log4cxx/helpers/fileinputstream.h
+++ b/src/main/include/log4cxx/helpers/fileinputstream.h
@@ -21,7 +21,7 @@
 #include <log4cxx/helpers/inputstream.h>
 #include <log4cxx/file.h>
 #include <log4cxx/helpers/pool.h>
-
+#include <memory>
 
 namespace log4cxx
 {
@@ -36,8 +36,8 @@ namespace helpers
 class LOG4CXX_EXPORT FileInputStream : public InputStream
 {
 	private:
-		Pool pool;
-		apr_file_t* fileptr;
+		struct FileInputStreamPrivate;
+		std::unique_ptr<FileInputStreamPrivate> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(FileInputStream)
diff --git a/src/main/include/log4cxx/helpers/fileoutputstream.h b/src/main/include/log4cxx/helpers/fileoutputstream.h
index cb03067..ddade3e 100644
--- a/src/main/include/log4cxx/helpers/fileoutputstream.h
+++ b/src/main/include/log4cxx/helpers/fileoutputstream.h
@@ -35,8 +35,8 @@ namespace helpers
 class LOG4CXX_EXPORT FileOutputStream : public OutputStream
 {
 	private:
-		Pool pool;
-		apr_file_t* fileptr;
+		struct FileOutputStreamPrivate;
+		std::unique_ptr<FileOutputStreamPrivate> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(FileOutputStream)
diff --git a/src/main/include/log4cxx/helpers/socketoutputstream.h b/src/main/include/log4cxx/helpers/socketoutputstream.h
index 4cc9b8a..90000df 100644
--- a/src/main/include/log4cxx/helpers/socketoutputstream.h
+++ b/src/main/include/log4cxx/helpers/socketoutputstream.h
@@ -51,8 +51,8 @@ class LOG4CXX_EXPORT SocketOutputStream : public OutputStream
 		virtual void write(ByteBuffer& buf, Pool& p);
 
 	private:
-		ByteList array;
-		SocketPtr socket;
+		struct SocketOutputStreamPrivate;
+		std::unique_ptr<SocketOutputStreamPrivate> m_priv;
 		//
 		//   prevent copy and assignment statements
 		SocketOutputStream(const SocketOutputStream&);
diff --git a/src/main/include/log4cxx/htmllayout.h b/src/main/include/log4cxx/htmllayout.h
index cc0e225..e7d8ac1 100644
--- a/src/main/include/log4cxx/htmllayout.h
+++ b/src/main/include/log4cxx/htmllayout.h
@@ -37,12 +37,8 @@ This layout outputs events in a HTML table.
 class LOG4CXX_EXPORT HTMLLayout : public Layout
 {
 	private:
-		// Print no location info by default
-		bool locationInfo; //= false
-
-		LogString title;
-
-		helpers::ISO8601DateFormat dateFormat;
+		struct HTMLLayoutPrivate;
+		std::unique_ptr<HTMLLayoutPrivate> m_priv;
 
 	public:
 		DECLARE_LOG4CXX_OBJECT(HTMLLayout)
@@ -64,44 +60,29 @@ class LOG4CXX_EXPORT HTMLLayout : public Layout
 		{@link net::SMTPAppender SMTPAppender} then make sure
 		to set the <b>LocationInfo</b> option of that appender as well.
 		*/
-		inline void setLocationInfo(bool locationInfoFlag)
-		{
-			this->locationInfo = locationInfoFlag;
-		}
+		void setLocationInfo(bool locationInfoFlag);
 
 		/**
 		Returns the current value of the <b>LocationInfo</b> option.
 		*/
-		inline bool getLocationInfo() const
-		{
-			return locationInfo;
-		}
+		bool getLocationInfo() const;
 
 		/**
 		The <b>Title</b> option takes a String value. This option sets the
 		document title of the generated HTML document.
 		<p>Defaults to 'Log4cxx Log Messages'.
 		*/
-		inline void setTitle(const LogString& title1)
-		{
-			this->title.assign(title1);
-		}
+		void setTitle(const LogString& title1);
 
 		/**
 		Returns the current value of the <b>Title</b> option.
 		*/
-		inline const LogString& getTitle() const
-		{
-			return title;
-		}
+		const LogString& getTitle() const;
 
 		/**
 		Returns the content type output by this layout, i.e "text/html".
 		*/
-		virtual LogString getContentType() const
-		{
-			return LOG4CXX_STR("text/html");
-		}
+		virtual LogString getContentType() const;
 
 		/**
 		No options to activate.
@@ -129,10 +110,7 @@ class LOG4CXX_EXPORT HTMLLayout : public Layout
 		/**
 		The HTML layout handles the throwable contained in logging
 		events. Hence, this method return <code>false</code>.  */
-		virtual bool ignoresThrowable() const
-		{
-			return false;
-		}
+		bool ignoresThrowable() const;
 
 }; // class HtmlLayout
 LOG4CXX_PTR_DEF(HTMLLayout);
diff --git a/src/main/include/log4cxx/pattern/formattinginfo.h b/src/main/include/log4cxx/pattern/formattinginfo.h
index d78b985..66c472d 100644
--- a/src/main/include/log4cxx/pattern/formattinginfo.h
+++ b/src/main/include/log4cxx/pattern/formattinginfo.h
@@ -42,21 +42,8 @@ typedef std::shared_ptr<FormattingInfo> FormattingInfoPtr;
  */
 class LOG4CXX_EXPORT FormattingInfo : public virtual log4cxx::helpers::Object
 {
-
-		/**
-		 * Minimum length.
-		 */
-		const int minLength;
-
-		/**
-		 * Maximum length.
-		 */
-		const int maxLength;
-
-		/**
-		 * Alignment.
-		 */
-		const bool leftAlign;
+	struct FormattingInfoPrivate;
+	std::unique_ptr<FormattingInfoPrivate> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(FormattingInfo)
@@ -73,6 +60,7 @@ class LOG4CXX_EXPORT FormattingInfo : public virtual log4cxx::helpers::Object
 		 */
 		FormattingInfo(
 			const bool leftAlign, const int minLength, const int maxLength);
+		~FormattingInfo();
 
 		/**
 		 * Gets default instance.
@@ -84,28 +72,19 @@ class LOG4CXX_EXPORT FormattingInfo : public virtual log4cxx::helpers::Object
 		 * Determine if left aligned.
 		 * @return true if left aligned.
 		 */
-		inline bool isLeftAligned() const
-		{
-			return leftAlign;
-		}
+		bool isLeftAligned() const;
 
 		/**
 		 * Get minimum length.
 		 * @return minimum length.
 		 */
-		inline int getMinLength() const
-		{
-			return minLength;
-		}
+		int getMinLength() const;
 
 		/**
 		 * Get maximum length.
 		 * @return maximum length.
 		 */
-		inline int getMaxLength() const
-		{
-			return maxLength;
-		}
+		int getMaxLength() const;
 
 		/**
 		 * Adjust the content of the buffer based on the specified lengths and alignment.
diff --git a/src/main/include/log4cxx/patternlayout.h b/src/main/include/log4cxx/patternlayout.h
index f722b5e..caae290 100644
--- a/src/main/include/log4cxx/patternlayout.h
+++ b/src/main/include/log4cxx/patternlayout.h
@@ -333,20 +333,8 @@ LOG4CXX_LIST_DEF(FormattingInfoList, log4cxx::pattern::FormattingInfoPtr);
  */
 class LOG4CXX_EXPORT PatternLayout : public Layout
 {
-		/**
-		 * Conversion pattern.
-		 */
-		LogString conversionPattern;
-
-		/**
-		 * Pattern converters.
-		 */
-		LoggingEventPatternConverterList patternConverters;
-
-		/**
-		 * Field widths and alignment corresponding to pattern converters.
-		 */
-		FormattingInfoList patternFields;
+		struct PatternLayoutPrivate;
+		std::unique_ptr<PatternLayoutPrivate> m_priv;
 
 	public:
 		DECLARE_LOG4CXX_OBJECT(PatternLayout)
@@ -365,6 +353,8 @@ class LOG4CXX_EXPORT PatternLayout : public Layout
 		 */
 		PatternLayout(const LogString& pattern);
 
+		~PatternLayout();
+
 		/**
 		 * Set the <strong>ConversionPattern</strong> option. This is the string which
 		 * controls formatting and consists of a mix of literal content and
@@ -375,10 +365,7 @@ class LOG4CXX_EXPORT PatternLayout : public Layout
 		/**
 		 * Returns the value of the <strong>ConversionPattern</strong> option.
 		 */
-		inline LogString getConversionPattern() const
-		{
-			return conversionPattern;
-		}
+		LogString getConversionPattern() const;
 
 		/**
 		 * Call createPatternParser
diff --git a/src/main/cpp/defaultrepositoryselector.cpp b/src/main/include/log4cxx/private/action_priv.h
similarity index 63%
copy from src/main/cpp/defaultrepositoryselector.cpp
copy to src/main/include/log4cxx/private/action_priv.h
index 238e0ac..3fdb29a 100644
--- a/src/main/cpp/defaultrepositoryselector.cpp
+++ b/src/main/include/log4cxx/private/action_priv.h
@@ -14,20 +14,35 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#ifndef LOG4CXX_ACTION_PRIVATE_H
+#define LOG4CXX_ACTION_PRIVATE_H
 
-#include <log4cxx/spi/defaultrepositoryselector.h>
+#include <log4cxx/rolling/action.h>
 
-using namespace log4cxx;
-using namespace log4cxx::spi;
-using namespace log4cxx::helpers;
+namespace log4cxx{
+namespace rolling{
 
+struct Action::ActionPrivate{
+        ActionPrivate() :
+	        complete(false),
+	        interrupted(false),
+	        pool(){}
 
-DefaultRepositorySelector::DefaultRepositorySelector(const LoggerRepositoryPtr repository1)
-	: repository(repository1)
-{
-}
+	/**
+	 * Is action complete.
+	 */
+	bool complete;
+
+	/**
+	 * Is action interrupted.
+	 */
+	bool interrupted;
+
+	log4cxx::helpers::Pool pool;
+	std::mutex mutex;
+};
 
-LoggerRepositoryPtr DefaultRepositorySelector::getLoggerRepository()
-{
-	return repository;
 }
+}
+
+#endif /* LOG4CXX_ACTION_PRIVATE_H */
diff --git a/src/main/include/log4cxx/rolling/action.h b/src/main/include/log4cxx/rolling/action.h
index 31363d5..a69f326 100644
--- a/src/main/include/log4cxx/rolling/action.h
+++ b/src/main/include/log4cxx/rolling/action.h
@@ -39,14 +39,15 @@ class Action : public virtual log4cxx::helpers::Object
 		LOG4CXX_CAST_ENTRY(Action)
 		END_LOG4CXX_CAST_MAP()
 
-		struct priv_data;
-		std::unique_ptr<priv_data> m_priv;
+		struct ActionPrivate;
+		std::unique_ptr<ActionPrivate> m_priv;
 
 	protected:
 		/**
 		 * Constructor.
 		 */
 		Action();
+		Action( std::unique_ptr<ActionPrivate> priv );
 		virtual ~Action();
 
 	public:
diff --git a/src/main/include/log4cxx/rolling/filerenameaction.h b/src/main/include/log4cxx/rolling/filerenameaction.h
index 53338a0..db80da6 100644
--- a/src/main/include/log4cxx/rolling/filerenameaction.h
+++ b/src/main/include/log4cxx/rolling/filerenameaction.h
@@ -29,9 +29,7 @@ namespace rolling
 
 class FileRenameAction : public Action
 {
-		const File source;
-		const File destination;
-		bool renameEmptyFile;
+	struct FileRenameActionPrivate;
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(FileRenameAction)
 		BEGIN_LOG4CXX_CAST_MAP()
diff --git a/src/main/include/log4cxx/rolling/gzcompressaction.h b/src/main/include/log4cxx/rolling/gzcompressaction.h
index 0b99f36..e087cb6 100644
--- a/src/main/include/log4cxx/rolling/gzcompressaction.h
+++ b/src/main/include/log4cxx/rolling/gzcompressaction.h
@@ -34,9 +34,7 @@ namespace rolling
 
 class GZCompressAction : public Action
 {
-		const File source;
-		const File destination;
-		bool deleteSource;
+		struct GZCompressActionPrivate;
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(GZCompressAction)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -50,6 +48,7 @@ class GZCompressAction : public Action
 		GZCompressAction(const File& source,
 			const File& destination,
 			bool deleteSource);
+		~GZCompressAction();
 
 		/**
 		 * Perform action.
diff --git a/src/main/include/log4cxx/rolling/zipcompressaction.h b/src/main/include/log4cxx/rolling/zipcompressaction.h
index 385b3df..bda9a9f 100644
--- a/src/main/include/log4cxx/rolling/zipcompressaction.h
+++ b/src/main/include/log4cxx/rolling/zipcompressaction.h
@@ -35,9 +35,7 @@ namespace rolling
 
 class ZipCompressAction : public Action
 {
-		const File source;
-		const File destination;
-		bool deleteSource;
+	struct ZipCompressActionPrivate;
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(ZipCompressAction)
 		BEGIN_LOG4CXX_CAST_MAP()
diff --git a/src/main/include/log4cxx/spi/defaultrepositoryselector.h b/src/main/include/log4cxx/spi/defaultrepositoryselector.h
index 8788b0d..1e22fed 100644
--- a/src/main/include/log4cxx/spi/defaultrepositoryselector.h
+++ b/src/main/include/log4cxx/spi/defaultrepositoryselector.h
@@ -21,6 +21,7 @@
 #include <log4cxx/spi/repositoryselector.h>
 #include <log4cxx/helpers/object.h>
 #include <log4cxx/spi/loggerrepository.h>
+#include <memory>
 
 namespace log4cxx
 {
@@ -37,10 +38,12 @@ class LOG4CXX_EXPORT DefaultRepositorySelector :
 		END_LOG4CXX_CAST_MAP()
 
 		DefaultRepositorySelector(const LoggerRepositoryPtr repository1);
+		~DefaultRepositorySelector();
 		virtual LoggerRepositoryPtr getLoggerRepository();
 
 	private:
-		LoggerRepositoryPtr repository;
+		struct DefaultRepositorySelectorPrivate;
+		std::unique_ptr<DefaultRepositorySelectorPrivate> m_priv;
 };
 }  // namespace spi
 } // namespace log4cxx
diff --git a/src/main/include/log4cxx/varia/fallbackerrorhandler.h b/src/main/include/log4cxx/varia/fallbackerrorhandler.h
index 1f0f7e4..42395c3 100644
--- a/src/main/include/log4cxx/varia/fallbackerrorhandler.h
+++ b/src/main/include/log4cxx/varia/fallbackerrorhandler.h
@@ -42,9 +42,8 @@ class LOG4CXX_EXPORT FallbackErrorHandler :
 	public virtual helpers::Object
 {
 	private:
-		AppenderWeakPtr backup;
-		AppenderWeakPtr primary;
-		std::vector<LoggerPtr> loggers;
+		struct FallbackErrorHandlerPrivate;
+		std::unique_ptr<FallbackErrorHandlerPrivate> m_priv;
 
 	public:
 		DECLARE_LOG4CXX_OBJECT(FallbackErrorHandler)
@@ -54,6 +53,7 @@ class LOG4CXX_EXPORT FallbackErrorHandler :
 		END_LOG4CXX_CAST_MAP()
 
 		FallbackErrorHandler();
+		~FallbackErrorHandler();
 
 		/**
 		<em>Adds</em> the logger passed as parameter to the list of
diff --git a/src/main/include/log4cxx/xml/domconfigurator.h b/src/main/include/log4cxx/xml/domconfigurator.h
index 98068aa..09b88c6 100644
--- a/src/main/include/log4cxx/xml/domconfigurator.h
+++ b/src/main/include/log4cxx/xml/domconfigurator.h
@@ -70,6 +70,9 @@ class LOG4CXX_EXPORT DOMConfigurator :
 	virtual public spi::Configurator,
 	virtual public helpers::Object
 {
+public:
+	~DOMConfigurator();
+
 	protected:
 		typedef std::map<LogString, AppenderPtr> AppenderMap;
 		/**
@@ -292,16 +295,14 @@ class LOG4CXX_EXPORT DOMConfigurator :
 
 		LogString subst(const LogString& value);
 
-	protected:
-		helpers::Properties props;
-		spi::LoggerRepositoryPtr repository;
-		spi::LoggerFactoryPtr loggerFactory;
-
 	private:
 		//   prevent assignment or copy statements
 		DOMConfigurator(const DOMConfigurator&);
 		DOMConfigurator& operator=(const DOMConfigurator&);
 		static XMLWatchdog* xdog;
+
+		struct DOMConfiguratorPrivate;
+		std::unique_ptr<DOMConfiguratorPrivate> m_priv;
 };
 LOG4CXX_PTR_DEF(DOMConfigurator);
 }  // namespace xml
diff --git a/src/main/include/log4cxx/xml/xmllayout.h b/src/main/include/log4cxx/xml/xmllayout.h
index cff3e89..ffe0a13 100644
--- a/src/main/include/log4cxx/xml/xmllayout.h
+++ b/src/main/include/log4cxx/xml/xmllayout.h
@@ -53,10 +53,8 @@ appender where it is embedded.
 class LOG4CXX_EXPORT XMLLayout : public Layout
 {
 	private:
-
-		// Print no location info by default
-		bool locationInfo; //= false
-		bool properties; // = false
+		struct XMLLayoutPrivate;
+		std::unique_ptr<XMLLayoutPrivate> m_priv;
 
 	public:
 		DECLARE_LOG4CXX_OBJECT(XMLLayout)
@@ -66,6 +64,7 @@ class LOG4CXX_EXPORT XMLLayout : public Layout
 		END_LOG4CXX_CAST_MAP()
 
 		XMLLayout();
+		~XMLLayout();
 
 		/**
 		The <b>LocationInfo</b> option takes a boolean value. By
@@ -78,38 +77,26 @@ class LOG4CXX_EXPORT XMLLayout : public Layout
 		then make sure to set the
 		<b>LocationInfo</b> option of that appender as well.
 		*/
-		inline void setLocationInfo(bool locationInfo1)
-		{
-			this->locationInfo = locationInfo1;
-		}
+		void setLocationInfo(bool locationInfo1);
 
 		/**
 		Returns the current value of the <b>LocationInfo</b> option.
 		*/
-		inline bool getLocationInfo() const
-		{
-			return locationInfo;
-		}
+		bool getLocationInfo() const;
 
 		/**
 		 * Sets whether MDC key-value pairs should be output, default false.
 		 * @param flag new value.
 		 *
 		*/
-		inline void setProperties(bool flag)
-		{
-			properties = flag;
-		}
+		void setProperties(bool flag);
 
 		/**
 		* Gets whether MDC key-value pairs should be output.
 		* @return true if MDC key-value pairs are output.
 		*
 		*/
-		inline bool getProperties()
-		{
-			return properties;
-		}
+		bool getProperties();
 
 
 		/** No options to activate. */

[logging-log4cxx] 05/20: Removed TTCCLayout and DateLayout

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1e294eab856d47aa595d0505f80f1be0316254ab
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Sun Oct 31 12:00:13 2021 -0400

    Removed TTCCLayout and DateLayout
---
 src/main/cpp/CMakeLists.txt                   |   2 -
 src/main/cpp/class.cpp                        |   3 -
 src/main/cpp/datelayout.cpp                   | 127 ----------------
 src/main/cpp/ttcclayout.cpp                   |  79 ----------
 src/main/include/log4cxx/helpers/datelayout.h | 108 --------------
 src/main/include/log4cxx/ttcclayout.h         | 206 --------------------------
 src/test/cpp/CMakeLists.txt                   |   2 +
 src/test/cpp/minimumtestcase.cpp              |  46 ------
 src/test/cpp/net/telnetappendertestcase.cpp   |  13 +-
 src/test/resources/witness/ttcc               |  25 ----
 10 files changed, 11 insertions(+), 600 deletions(-)

diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt
index c83217b..dd8ce88 100644
--- a/src/main/cpp/CMakeLists.txt
+++ b/src/main/cpp/CMakeLists.txt
@@ -37,7 +37,6 @@ target_sources(log4cxx
   datagramsocket.cpp
   date.cpp
   dateformat.cpp
-  datelayout.cpp
   datepatternconverter.cpp
   defaultconfigurator.cpp
   defaultloggerfactory.cpp
@@ -152,7 +151,6 @@ target_sources(log4cxx
   transcoder.cpp
   transform.cpp
   triggeringpolicy.cpp
-  ttcclayout.cpp
   writer.cpp
   writerappender.cpp
   xmllayout.cpp
diff --git a/src/main/cpp/class.cpp b/src/main/cpp/class.cpp
index 80430f7..13adbf2 100644
--- a/src/main/cpp/class.cpp
+++ b/src/main/cpp/class.cpp
@@ -55,7 +55,6 @@
 #include <log4cxx/htmllayout.h>
 #include <log4cxx/simplelayout.h>
 #include <log4cxx/xml/xmllayout.h>
-#include <log4cxx/ttcclayout.h>
 
 #include <log4cxx/filter/levelmatchfilter.h>
 #include <log4cxx/filter/levelrangefilter.h>
@@ -181,11 +180,9 @@ void Class::registerClasses()
 	TelnetAppender::registerClass();
 #endif
 	XMLSocketAppender::registerClass();
-	DateLayout::registerClass();
 	HTMLLayout::registerClass();
 	PatternLayout::registerClass();
 	SimpleLayout::registerClass();
-	TTCCLayout::registerClass();
 	XMLLayout::registerClass();
 	LevelMatchFilter::registerClass();
 	LevelRangeFilter::registerClass();
diff --git a/src/main/cpp/datelayout.cpp b/src/main/cpp/datelayout.cpp
deleted file mode 100644
index eb0f6ff..0000000
--- a/src/main/cpp/datelayout.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <log4cxx/logstring.h>
-#include <log4cxx/helpers/datelayout.h>
-#include <log4cxx/helpers/stringhelper.h>
-#include <log4cxx/spi/loggingevent.h>
-#include <log4cxx/helpers/dateformat.h>
-#include <log4cxx/helpers/relativetimedateformat.h>
-#include <log4cxx/helpers/absolutetimedateformat.h>
-#include <log4cxx/helpers/datetimedateformat.h>
-#include <log4cxx/helpers/iso8601dateformat.h>
-#include <log4cxx/helpers/timezone.h>
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::spi;
-
-DateLayout::DateLayout(const LogString& dateFormatOption1) :
-	timeZoneID(), dateFormatOption(dateFormatOption1), dateFormat(0)
-{
-}
-
-DateLayout::~DateLayout()
-{
-}
-
-
-void DateLayout::setOption(const LogString& option, const LogString& value)
-{
-
-	if (StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("DATEFORMAT"), LOG4CXX_STR("dateformat")))
-	{
-		dateFormatOption = value;
-	}
-	else if (StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("TIMEZONE"), LOG4CXX_STR("timezone")))
-	{
-		timeZoneID = value;
-	}
-}
-
-void DateLayout::activateOptions(Pool&)
-{
-	if (!dateFormatOption.empty())
-	{
-
-		if (dateFormatOption.empty())
-		{
-			dateFormat = 0;
-		}
-		else if (StringHelper::equalsIgnoreCase(dateFormatOption,
-				LOG4CXX_STR("NULL"), LOG4CXX_STR("null")))
-		{
-			dateFormat = 0;
-			dateFormatOption = LOG4CXX_STR("NULL");
-		}
-		else if (StringHelper::equalsIgnoreCase(dateFormatOption,
-				LOG4CXX_STR("RELATIVE"), LOG4CXX_STR("relative")))
-		{
-			dateFormat =  DateFormatPtr(new RelativeTimeDateFormat());
-			dateFormatOption = LOG4CXX_STR("RELATIVE");
-		}
-		else if (StringHelper::equalsIgnoreCase(dateFormatOption,
-				LOG4CXX_STR("ABSOLUTE"),  LOG4CXX_STR("absolute")))
-		{
-			dateFormat =  DateFormatPtr(new AbsoluteTimeDateFormat());
-			dateFormatOption = LOG4CXX_STR("ABSOLUTE");
-		}
-		else if (StringHelper::equalsIgnoreCase(dateFormatOption,
-				LOG4CXX_STR("DATE"), LOG4CXX_STR("date")))
-		{
-			dateFormat =  DateFormatPtr(new DateTimeDateFormat());
-			dateFormatOption = LOG4CXX_STR("DATE");
-		}
-		else if (StringHelper::equalsIgnoreCase(dateFormatOption,
-				LOG4CXX_STR("ISO8601"), LOG4CXX_STR("iso8601")))
-		{
-			dateFormat =  DateFormatPtr(new ISO8601DateFormat());
-			dateFormatOption = LOG4CXX_STR("iso8601");
-		}
-		else
-		{
-			dateFormat = DateFormatPtr(new SimpleDateFormat(dateFormatOption));
-		}
-	}
-
-	if (dateFormat != NULL)
-	{
-		if (timeZoneID.empty())
-		{
-			dateFormat->setTimeZone(TimeZone::getDefault());
-		}
-		else
-		{
-			dateFormat->setTimeZone(TimeZone::getTimeZone(timeZoneID));
-		}
-	}
-}
-
-
-void DateLayout::formatDate(LogString& s,
-	const spi::LoggingEventPtr& event,
-	Pool& p) const
-{
-
-	if (dateFormat != 0)
-	{
-		dateFormat->format(s, event->getTimeStamp(), p);
-		s.append(1, (logchar) 0x20 /* ' ' */);
-	}
-}
-
diff --git a/src/main/cpp/ttcclayout.cpp b/src/main/cpp/ttcclayout.cpp
deleted file mode 100644
index 4a291a8..0000000
--- a/src/main/cpp/ttcclayout.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <log4cxx/logstring.h>
-#include <log4cxx/ttcclayout.h>
-#include <log4cxx/spi/loggingevent.h>
-#include <log4cxx/level.h>
-#include <log4cxx/helpers/stringhelper.h>
-#include <log4cxx/ndc.h>
-
-using namespace log4cxx;
-using namespace log4cxx::spi;
-using namespace log4cxx::helpers;
-
-IMPLEMENT_LOG4CXX_OBJECT(TTCCLayout)
-
-TTCCLayout::TTCCLayout()
-	: DateLayout(LOG4CXX_STR("RELATIVE")), threadPrinting(true), categoryPrefixing(true),
-	  contextPrinting(true), filePrinting(false)
-{
-	Pool pool;
-	activateOptions(pool);
-}
-
-TTCCLayout::TTCCLayout(const LogString& dateFormatType)
-	: DateLayout(dateFormatType), threadPrinting(true), categoryPrefixing(true),
-	  contextPrinting(true), filePrinting(false)
-{
-	Pool pool;
-	activateOptions(pool);
-}
-
-void TTCCLayout::format(LogString& output,
-	const spi::LoggingEventPtr& event,
-	Pool& p) const
-{
-	formatDate(output, event, p);
-
-	if (threadPrinting)
-	{
-		output.append(1, (logchar) 0x5B /* '[' */);
-		output.append(event->getThreadName());
-		output.append(1, (logchar) 0x5D /* ']' */);
-		output.append(1, (logchar) 0x20 /* ' ' */);
-	}
-
-	output.append(event->getLevel()->toString());
-	output.append(1, (logchar) 0x20 /* ' ' */);
-
-	if (categoryPrefixing)
-	{
-		output.append(event->getLoggerName());
-		output.append(1, (logchar) 0x20 /* ' ' */);
-	}
-
-	if (contextPrinting && event->getNDC(output))
-	{
-		output.append(1, (logchar) 0x20 /* ' ' */);
-	}
-
-	output.append(1, (logchar) 0x2D /* '-' */);
-	output.append(1, (logchar) 0x20 /* ' ' */);
-	output.append(event->getRenderedMessage());
-	output.append(LOG4CXX_EOL);
-}
diff --git a/src/main/include/log4cxx/helpers/datelayout.h b/src/main/include/log4cxx/helpers/datelayout.h
deleted file mode 100644
index 744c881..0000000
--- a/src/main/include/log4cxx/helpers/datelayout.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_HELPERS_DATE_LAYOUT_H
-#define _LOG4CXX_HELPERS_DATE_LAYOUT_H
-
-#include <log4cxx/layout.h>
-#include <log4cxx/helpers/dateformat.h>
-#include <log4cxx/helpers/timezone.h>
-
-#if defined(_MSC_VER)
-	#pragma warning ( push )
-	#pragma warning ( disable: 4251 )
-#endif
-
-namespace log4cxx
-{
-namespace helpers
-{
-/**
-This abstract layout takes care of all the date related options and
-formatting work.
-*/
-class LOG4CXX_EXPORT DateLayout : public Layout
-{
-	private:
-		LogString timeZoneID;
-		LogString dateFormatOption;
-
-	protected:
-		DateFormatPtr dateFormat;
-
-	public:
-		DateLayout(const LogString& dateLayoutOption);
-		virtual ~DateLayout();
-
-		virtual void activateOptions(log4cxx::helpers::Pool& p);
-		virtual void setOption(const LogString& option, const LogString& value);
-
-		/**
-		The value of the <b>DateFormat</b> option should be either an
-		argument to the constructor of helpers::DateFormat or one of
-		the strings <b>"NULL"</b>, <b>"RELATIVE"</b>, <b>"ABSOLUTE"</b>,
-		<b>"DATE"</b> or <b>"ISO8601</b>.
-		*/
-		inline void setDateFormat(const LogString& dateFormat1)
-		{
-			this->dateFormatOption.assign(dateFormat1);
-		}
-
-		/**
-		Returns value of the <b>DateFormat</b> option.
-		*/
-		inline const LogString& getDateFormat() const
-		{
-			return dateFormatOption;
-		}
-
-		/**
-		The <b>TimeZoneID</b> option is a time zone ID string in the format
-		expected by the <code>locale</code> C++ standard class.
-		*/
-		inline void setTimeZone(const LogString& timeZone)
-		{
-			this->timeZoneID.assign(timeZone);
-		}
-
-		/**
-		Returns value of the <b>TimeZone</b> option.
-		*/
-		inline const LogString& getTimeZone() const
-		{
-			return timeZoneID;
-		}
-
-		void formatDate(LogString& s,
-			const spi::LoggingEventPtr& event,
-			log4cxx::helpers::Pool& p) const;
-
-	private:
-		//
-		//  prevent copy and assignment
-		DateLayout(const DateLayout&);
-		DateLayout& operator=(const DateLayout&);
-
-};
-}  // namespace helpers
-} // namespace log4cxx
-
-#if defined(_MSC_VER)
-	#pragma warning (pop)
-#endif
-
-#endif // _LOG4CXX_HELPERS_DATE_LAYOUT_H
diff --git a/src/main/include/log4cxx/ttcclayout.h b/src/main/include/log4cxx/ttcclayout.h
deleted file mode 100644
index 4f9a810..0000000
--- a/src/main/include/log4cxx/ttcclayout.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_TTCC_LAYOUT_H
-#define _LOG4CXX_TTCC_LAYOUT_H
-
-#if defined(_MSC_VER)
-	#pragma warning ( push )
-	#pragma warning ( disable: 4231 4251 4275 4786 )
-#endif
-
-#include <log4cxx/helpers/datelayout.h>
-
-namespace log4cxx
-{
-
-/**
-TTCC layout format consists of time, thread, logger name and nested
-diagnostic context information, hence the name.
-
-<p>Each of the four fields can be individually enabled or
-disabled. The time format depends on the <code>DateFormat</code>
-used.
-
-<p>Here is an example TTCCLayout output with the
-{@link helpers::RelativeTimeDateFormat RelativeTimeDateFormat}.
-
-<pre>
-176 [main] INFO  examples.Sort - Populating an array of 2 elements in reverse order.
-225 [main] INFO  examples.SortAlgo - Entered the sort method.
-262 [main] DEBUG examples.SortAlgo.OUTER i=1 - Outer loop.
-276 [main] DEBUG examples.SortAlgo.SWAP i=1 j=0 - Swapping intArray[0] = 1 and intArray[1] = 0
-290 [main] DEBUG examples.SortAlgo.OUTER i=0 - Outer loop.
-304 [main] INFO  examples.SortAlgo.DUMP - Dump of interger array:
-317 [main] INFO  examples.SortAlgo.DUMP - Element [0] = 0
-331 [main] INFO  examples.SortAlgo.DUMP - Element [1] = 1
-343 [main] INFO  examples.Sort - The next log statement should be an error message.
-346 [main] ERROR examples.SortAlgo.DUMP - Tried to dump an uninitialized array.
-467 [main] INFO  examples.Sort - Exiting main method.
-</pre>
-
-<p>The first field is the number of milliseconds elapsed since the
-start of the program. The second field is the thread outputting the
-log statement. The third field is the level, the fourth field is
-the logger to which the statement belongs.
-
-<p>The fifth field (just before the '-') is the nested diagnostic
-context.  Note the nested diagnostic context may be empty as in the
-first two statements. The text after the '-' is the message of the
-statement.
-
-<p><b>WARNING</b> Do not use the same TTCCLayout instance from
-within different appenders. The TTCCLayout is not thread safe when
-used in his way. However, it is perfectly safe to use a TTCCLayout
-instance from just one appender.
-
-<p>PatternLayout offers a much more flexible alternative.
-*/
-class LOG4CXX_EXPORT TTCCLayout : public helpers::DateLayout
-{
-	private:
-		// Internal representation of options
-		bool threadPrinting;
-		bool categoryPrefixing;
-		bool contextPrinting;
-		bool filePrinting;
-
-	public:
-		DECLARE_LOG4CXX_OBJECT(TTCCLayout)
-		BEGIN_LOG4CXX_CAST_MAP()
-		LOG4CXX_CAST_ENTRY(TTCCLayout)
-		LOG4CXX_CAST_ENTRY_CHAIN(Layout)
-		END_LOG4CXX_CAST_MAP()
-
-		/**
-		Instantiate a TTCCLayout object with {@link
-		helpers::RelativeTimeDateFormat RelativeTimeDateFormat} as the date
-		formatter in the local time zone.
-		*/
-		TTCCLayout();
-
-		/**
-		Instantiate a TTCCLayout object using the local time zone. The
-		DateFormat used will depend on the <code>dateFormatType</code>.
-		<p>This constructor just calls the {@link
-		helpers::DateLayout#setDateFormat DateLayout::setDateFormat} method.
-		*/
-		TTCCLayout(const LogString& dateFormatType);
-
-		/**
-		The <b>ThreadPrinting</b> option specifies whether the name of the
-		current thread is part of log output or not. This is true by default.
-		*/
-		inline void setThreadPrinting(bool threadPrinting1)
-		{
-			this->threadPrinting = threadPrinting1;
-		}
-
-		/**
-		Returns value of the <b>ThreadPrinting</b> option.
-		*/
-		inline bool getThreadPrinting() const
-		{
-			return threadPrinting;
-		}
-
-		/**
-		The <b>CategoryPrefixing</b> option specifies whether Logger
-		name is part of log output or not. This is true by default.
-		*/
-		inline void setCategoryPrefixing(bool categoryPrefixing1)
-		{
-			this->categoryPrefixing = categoryPrefixing1;
-		}
-
-		/**
-		Returns value of the <b>CategoryPrefixing</b> option.
-		*/
-		inline bool getCategoryPrefixing() const
-		{
-			return categoryPrefixing;
-		}
-
-		/**
-		The <b>ContextPrinting</b> option specifies log output will include
-		the nested context information belonging to the current thread.
-		This is true by default.
-		*/
-		inline void setContextPrinting(bool contextPrinting1)
-		{
-			this->contextPrinting = contextPrinting1;
-		}
-
-		/**
-		Returns value of the <b>ContextPrinting</b> option.
-		*/
-		inline bool getContextPrinting() const
-		{
-			return contextPrinting;
-		}
-
-		/**
-		The <b>FilePrinting</b> option specifies log output will include
-		the file and the line where the log statement was written.
-		*/
-		inline void setFilePrinting(bool filePrinting1)
-		{
-			this->filePrinting = filePrinting1;
-		}
-
-		/**
-		Returns value of the <b>ContextPrinting</b> option.
-		*/
-		inline bool getFilePrinting() const
-		{
-			return filePrinting;
-		}
-
-		/**
-		In addition to the level of the statement and message, this function
-		writes to the ouput stream time, thread, logger and NDC
-		information.
-
-		<p>Time, thread, logger and diagnostic context are printed
-		depending on options.
-
-		@param output destination to receive formatted output.
-		@param event event to format.
-		@param pool pool used to allocate memory needed during formatting.
-		*/
-		virtual void format(LogString& output,
-			const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool) const;
-
-		/**
-		The TTCCLayout does not handle the throwable contained within
-		{@link spi::LoggingEvent LoggingEvents}. Thus, it returns
-		<code>true</code>.
-		*/
-		virtual bool ignoresThrowable() const
-		{
-			return true;
-		}
-};
-LOG4CXX_PTR_DEF(TTCCLayout);
-}
-
-
-#if defined(_MSC_VER)
-	#pragma warning ( pop )
-#endif
-
-#endif
diff --git a/src/test/cpp/CMakeLists.txt b/src/test/cpp/CMakeLists.txt
index b12db30..29413d9 100644
--- a/src/test/cpp/CMakeLists.txt
+++ b/src/test/cpp/CMakeLists.txt
@@ -118,3 +118,5 @@ foreach(testName IN LISTS ALL_LOG4CXX_TESTS)
         endif()
     endif()
 endforeach()
+
+target_link_libraries(streamtestcase PRIVATE )
diff --git a/src/test/cpp/minimumtestcase.cpp b/src/test/cpp/minimumtestcase.cpp
index 8d171e0..4bb087d 100644
--- a/src/test/cpp/minimumtestcase.cpp
+++ b/src/test/cpp/minimumtestcase.cpp
@@ -17,7 +17,6 @@
 #include "logunit.h"
 #include <log4cxx/logger.h>
 #include <log4cxx/simplelayout.h>
-#include <log4cxx/ttcclayout.h>
 #include <log4cxx/fileappender.h>
 #include <log4cxx/helpers/absolutetimedateformat.h>
 
@@ -39,22 +38,10 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
-
-#define TTCC_PAT  \
-	ABSOLUTE_DATE_AND_TIME_PAT \
-	" \\[0x[0-9A-F]*]\\ (DEBUG|INFO|WARN|ERROR|FATAL) .* - Message [0-9]\\{1,2\\}"
-
-#define TTCC2_PAT \
-	ABSOLUTE_DATE_AND_TIME_PAT \
-	" \\[0x[0-9A-F]*]\\ (DEBUG|INFO|WARN|ERROR|FATAL) .* - " \
-	"Messages should bear numbers 0 through 23\\."
-
-
 LOGUNIT_CLASS(MinimumTestCase)
 {
 	LOGUNIT_TEST_SUITE(MinimumTestCase);
 	LOGUNIT_TEST(simple);
-	LOGUNIT_TEST(ttcc);
 	LOGUNIT_TEST_SUITE_END();
 
 public:
@@ -82,39 +69,6 @@ public:
 		LOGUNIT_ASSERT(Compare::compare(LOG4CXX_FILE("output/simple"), LOG4CXX_FILE("witness/simple")));
 	}
 
-	void ttcc()
-	{
-		LayoutPtr layout = TTCCLayoutPtr(
-				new TTCCLayout(LOG4CXX_STR("DATE")));
-		AppenderPtr appender = FileAppenderPtr(new FileAppender(layout, LOG4CXX_STR("output/ttcc"), false));
-		root->addAppender(appender);
-		common();
-
-		ControlFilter filter1;
-		filter1 << TTCC_PAT << TTCC2_PAT;
-		AbsoluteDateAndTimeFilter filter2;
-		ThreadFilter filter3;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&filter1);
-		filters.push_back(&filter2);
-		filters.push_back(&filter3);
-
-		try
-		{
-			const File output("output/ttcc");
-			Transformer::transform(output, FILTERED, filters);
-		}
-		catch (std::exception& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		const File witness("witness/ttcc");
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, witness));
-	}
-
 	std::string createMessage(int i, Pool & pool)
 	{
 		std::string msg("Message ");
diff --git a/src/test/cpp/net/telnetappendertestcase.cpp b/src/test/cpp/net/telnetappendertestcase.cpp
index 6fc406d..7ba022e 100644
--- a/src/test/cpp/net/telnetappendertestcase.cpp
+++ b/src/test/cpp/net/telnetappendertestcase.cpp
@@ -16,7 +16,7 @@
  */
 
 #include <log4cxx/net/telnetappender.h>
-#include <log4cxx/ttcclayout.h>
+#include <log4cxx/patternlayout.h>
 #include "../appenderskeletontestcase.h"
 #include <apr_thread_proc.h>
 #include <apr_time.h>
@@ -45,6 +45,11 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
 
 		enum { TEST_PORT = 1723 };
 
+		static LayoutPtr createLayout(){
+			PatternLayoutPtr pl = std::make_shared<PatternLayout>();
+			pl->setConversionPattern( "%r [%t] %-5p - %m%n" );
+		}
+
 	public:
 
 		AppenderSkeleton* createAppenderSkeleton() const
@@ -55,7 +60,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
 		void testActivateClose()
 		{
 			TelnetAppenderPtr appender(new TelnetAppender());
-			appender->setLayout(LayoutPtr(new TTCCLayout()));
+			appender->setLayout(createLayout());
 			appender->setPort(TEST_PORT);
 			Pool p;
 			appender->activateOptions(p);
@@ -65,7 +70,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
 		void testActivateSleepClose()
 		{
 			TelnetAppenderPtr appender(new TelnetAppender());
-			appender->setLayout(LayoutPtr(new TTCCLayout()));
+			appender->setLayout(createLayout());
 			appender->setPort(TEST_PORT);
 			Pool p;
 			appender->activateOptions(p);
@@ -76,7 +81,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
 		void testActivateWriteClose()
 		{
 			TelnetAppenderPtr appender(new TelnetAppender());
-			appender->setLayout(LayoutPtr(new TTCCLayout()));
+			appender->setLayout(createLayout());
 			appender->setPort(TEST_PORT);
 			Pool p;
 			appender->activateOptions(p);
diff --git a/src/test/resources/witness/ttcc b/src/test/resources/witness/ttcc
deleted file mode 100644
index 459718b..0000000
--- a/src/test/resources/witness/ttcc
+++ /dev/null
@@ -1,25 +0,0 @@
- [main] FATAL ERR - Message 0
- [main] ERROR ERR - Message 1
- [main] FATAL INF - Message 2
- [main] ERROR INF - Message 3
- [main] WARN INF - Message 4
- [main] INFO INF - Message 5
- [main] FATAL INF.UNDEF - Message 6
- [main] ERROR INF.UNDEF - Message 7
- [main] WARN INF.UNDEF - Message 8
- [main] INFO INF.UNDEF - Message 9
- [main] FATAL INF.ERR - Message 10
- [main] ERROR INF.ERR - Message 11
- [main] FATAL INF.ERR.UNDEF - Message 12
- [main] ERROR INF.ERR.UNDEF - Message 13
- [main] FATAL DEB - Message 14
- [main] ERROR DEB - Message 15
- [main] WARN DEB - Message 16
- [main] INFO DEB - Message 17
- [main] DEBUG DEB - Message 18
- [main] FATAL UNDEF - Message 19
- [main] ERROR UNDEF - Message 20
- [main] WARN UNDEF - Message 21
- [main] INFO UNDEF - Message 22
- [main] DEBUG UNDEF - Message 23
- [main] INFO INF - Messages should bear numbers 0 through 23.

[logging-log4cxx] 02/20: Converted part of the hierarchy to be ABI stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ca2ba838ab2700a8ac8b23b7b78228fd783b4e36
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Sat Sep 25 09:48:53 2021 -0400

    Converted part of the hierarchy to be ABI stable
---
 src/main/cpp/CMakeLists.txt                        |   2 -
 src/main/cpp/action.cpp                            |  38 +++-
 src/main/cpp/andfilter.cpp                         |  25 ++-
 src/main/cpp/appenderattachableimpl.cpp            |  66 +++---
 src/main/cpp/appenderskeleton.cpp                  | 100 +++++----
 src/main/cpp/asyncappender.cpp                     | 249 +++++++++++++++------
 src/main/cpp/class.cpp                             |   5 -
 src/main/cpp/consoleappender.cpp                   |  32 ++-
 src/main/cpp/fileappender.cpp                      | 135 ++++++-----
 src/main/cpp/odbcappender.cpp                      | 118 +++++++---
 src/main/cpp/rollingfileappender.cpp               | 140 +++++++-----
 src/main/cpp/smtpappender.cpp                      | 135 ++++++-----
 src/main/cpp/socketappender.cpp                    |  80 +++----
 src/main/cpp/socketappenderskeleton.cpp            | 169 ++++++++++----
 src/main/cpp/sockethubappender.cpp                 |  83 +++++--
 src/main/cpp/syslogappender.cpp                    | 132 +++++------
 src/main/cpp/telnetappender.cpp                    | 112 +++++----
 src/main/cpp/writerappender.cpp                    |  96 ++++----
 src/main/cpp/xmlsocketappender.cpp                 |  35 +--
 src/main/include/log4cxx/appender.h                |   6 +-
 src/main/include/log4cxx/appenderskeleton.h        |  86 ++-----
 src/main/include/log4cxx/asyncappender.h           | 101 ---------
 src/main/include/log4cxx/consoleappender.h         |   3 -
 src/main/include/log4cxx/db/odbcappender.h         | 109 ++-------
 src/main/include/log4cxx/fileappender.h            |  52 +----
 src/main/include/log4cxx/filter/andfilter.h        |   9 +-
 .../log4cxx/helpers/appenderattachableimpl.h       |  14 +-
 src/main/include/log4cxx/net/smtpappender.h        |  22 +-
 src/main/include/log4cxx/net/socketappender.h      |   3 -
 .../include/log4cxx/net/socketappenderskeleton.h   |  59 +----
 src/main/include/log4cxx/net/sockethubappender.h   |  25 +--
 src/main/include/log4cxx/net/syslogappender.h      |  37 +--
 src/main/include/log4cxx/net/telnetappender.h      |  17 +-
 src/main/include/log4cxx/net/xmlsocketappender.h   |   1 -
 .../log4cxx/private/appenderskeleton_priv.h        |  75 +++++++
 .../include/log4cxx/private/fileappender_priv.h    |  56 +++++
 .../log4cxx/private/nteventlogappender_priv.h      |   0
 .../include/log4cxx/private/odbcappender_priv.h    |  82 +++++++
 .../include/log4cxx/private/syslogappender_priv.h  |  91 ++++++++
 .../include/log4cxx/private/writerappender_priv.h  |  77 +++++++
 src/main/include/log4cxx/rolling/action.h          |  16 +-
 .../include/log4cxx/rolling/rollingfileappender.h  | 102 ++++++++-
 .../log4cxx/rolling/rollingfileappenderskeleton.h  |   1 -
 src/main/include/log4cxx/rolling/rollingpolicy.h   |   1 -
 .../include/log4cxx/rolling/rolloverdescription.h  |   1 -
 .../log4cxx/rolling/timebasedrollingpolicy.h       |   1 -
 src/main/include/log4cxx/writerappender.h          |  39 +---
 src/test/cpp/vectorappender.cpp                    |   4 +-
 src/test/cpp/vectorappender.h                      |   3 +-
 49 files changed, 1675 insertions(+), 1170 deletions(-)

diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt
index 0f8f40d..c83217b 100644
--- a/src/main/cpp/CMakeLists.txt
+++ b/src/main/cpp/CMakeLists.txt
@@ -33,7 +33,6 @@ target_sources(log4cxx
   configurator.cpp
   consoleappender.cpp
   cyclicbuffer.cpp
-  dailyrollingfileappender.cpp
   datagrampacket.cpp
   datagramsocket.cpp
   date.cpp
@@ -99,7 +98,6 @@ target_sources(log4cxx
   ndcpatternconverter.cpp
   nteventlogappender.cpp
   objectoutputstream.cpp
-  obsoleterollingfileappender.cpp
   odbcappender.cpp
   onlyonceerrorhandler.cpp
   optionconverter.cpp
diff --git a/src/main/cpp/action.cpp b/src/main/cpp/action.cpp
index fdc5285..1e6b8b9 100644
--- a/src/main/cpp/action.cpp
+++ b/src/main/cpp/action.cpp
@@ -24,10 +24,28 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(Action)
 
+struct Action::priv_data{
+	priv_data() :
+		complete(false),
+		interrupted(false),
+		pool(){}
+
+	/**
+	 * Is action complete.
+	 */
+	bool complete;
+
+	/**
+	 * Is action interrupted.
+	 */
+	bool interrupted;
+
+	log4cxx::helpers::Pool pool;
+	std::mutex mutex;
+};
+
 Action::Action() :
-	complete(false),
-	interrupted(false),
-	pool()
+	m_priv( std::make_unique<Action::priv_data>() )
 {
 }
 
@@ -40,9 +58,9 @@ Action::~Action()
  */
 void Action::run(log4cxx::helpers::Pool& pool1)
 {
-	std::unique_lock<std::mutex> lock(mutex);
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
 
-	if (!interrupted)
+	if (!m_priv->interrupted)
 	{
 		try
 		{
@@ -53,8 +71,8 @@ void Action::run(log4cxx::helpers::Pool& pool1)
 			reportException(ex);
 		}
 
-		complete = true;
-		interrupted = true;
+		m_priv->complete = true;
+		m_priv->interrupted = true;
 	}
 }
 
@@ -63,8 +81,8 @@ void Action::run(log4cxx::helpers::Pool& pool1)
  */
 void Action::close()
 {
-	std::unique_lock<std::mutex> lock(mutex);
-	interrupted = true;
+	std::unique_lock<std::mutex> lock(m_priv->mutex);
+	m_priv->interrupted = true;
 }
 
 /**
@@ -73,7 +91,7 @@ void Action::close()
  */
 bool Action::isComplete() const
 {
-	return complete;
+	return m_priv->complete;
 }
 
 /**
diff --git a/src/main/cpp/andfilter.cpp b/src/main/cpp/andfilter.cpp
index 0bf16cd..d5a24b0 100644
--- a/src/main/cpp/andfilter.cpp
+++ b/src/main/cpp/andfilter.cpp
@@ -27,36 +27,45 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(AndFilter)
 
+struct AndFilter::priv_data{
+	priv_data() : headFilter(), tailFilter(), acceptOnMatch(true){}
+
+	log4cxx::spi::FilterPtr headFilter;
+	log4cxx::spi::FilterPtr tailFilter;
+	bool acceptOnMatch;
+};
 
 AndFilter::AndFilter()
-	: headFilter(), tailFilter(), acceptOnMatch(true)
+	: m_priv( std::make_unique<priv_data>() )
 {
 }
 
+AndFilter::~AndFilter(){}
+
 void AndFilter::addFilter(const FilterPtr& filter)
 {
-	if (headFilter == NULL)
+	if (m_priv->headFilter == NULL)
 	{
-		headFilter = filter;
-		tailFilter = filter;
+		m_priv->headFilter = filter;
+		m_priv->tailFilter = filter;
 	}
 	else
 	{
-		tailFilter->setNext(filter);
+		m_priv->tailFilter->setNext(filter);
 	}
 }
 
 
 void AndFilter::setAcceptOnMatch(bool newValue)
 {
-	acceptOnMatch = newValue;
+	m_priv->acceptOnMatch = newValue;
 }
 
 Filter::FilterDecision AndFilter::decide(
 	const spi::LoggingEventPtr& event) const
 {
 	bool accepted = true;
-	FilterPtr f(headFilter);
+	FilterPtr f(m_priv->headFilter);
 
 	while (f != NULL)
 	{
@@ -66,7 +75,7 @@ Filter::FilterDecision AndFilter::decide(
 
 	if (accepted)
 	{
-		if (acceptOnMatch)
+		if (m_priv->acceptOnMatch)
 		{
 			return Filter::ACCEPT;
 		}
diff --git a/src/main/cpp/appenderattachableimpl.cpp b/src/main/cpp/appenderattachableimpl.cpp
index 4277a2b..734d9a3 100644
--- a/src/main/cpp/appenderattachableimpl.cpp
+++ b/src/main/cpp/appenderattachableimpl.cpp
@@ -28,12 +28,21 @@ using namespace log4cxx::spi;
 
 IMPLEMENT_LOG4CXX_OBJECT(AppenderAttachableImpl)
 
+struct AppenderAttachableImpl::priv_data{
+	/** Array of appenders. */
+	AppenderList  appenderList;
+	mutable std::mutex m_mutex;
+};
 
-AppenderAttachableImpl::AppenderAttachableImpl(Pool& pool)
-	: appenderList()
+
+AppenderAttachableImpl::AppenderAttachableImpl(Pool& pool) :
+	m_priv(std::make_unique<AppenderAttachableImpl::priv_data>())
 {
 }
 
+AppenderAttachableImpl::~AppenderAttachableImpl(){
+
+}
 
 void AppenderAttachableImpl::addAppender(const AppenderPtr newAppender)
 {
@@ -43,13 +52,13 @@ void AppenderAttachableImpl::addAppender(const AppenderPtr newAppender)
 		return;
 	}
 
-	std::unique_lock<std::mutex> lock( m_mutex );
+	std::unique_lock<std::mutex> lock( m_priv->m_mutex );
 	AppenderList::iterator it = std::find(
-			appenderList.begin(), appenderList.end(), newAppender);
+			m_priv->appenderList.begin(), m_priv->appenderList.end(), newAppender);
 
-	if (it == appenderList.end())
+	if (it == m_priv->appenderList.end())
 	{
-		appenderList.push_back(newAppender);
+		m_priv->appenderList.push_back(newAppender);
 	}
 }
 
@@ -66,8 +75,8 @@ int AppenderAttachableImpl::appendLoopOnAppenders(
 		// appenders fails, we may want to swap it out for a new one.
 		// So, make a local copy of the appenders that we want to iterate over
 		// before actually iterating over them.
-		std::unique_lock<std::mutex> lock( m_mutex );
-		allAppenders = appenderList;
+		std::unique_lock<std::mutex> lock( m_priv->m_mutex );
+		allAppenders = m_priv->appenderList;
 	}
 	for (AppenderList::iterator it = allAppenders.begin();
 		it != allAppenders.end();
@@ -82,7 +91,7 @@ int AppenderAttachableImpl::appendLoopOnAppenders(
 
 AppenderList AppenderAttachableImpl::getAllAppenders() const
 {
-	return appenderList;
+	return m_priv->appenderList;
 }
 
 AppenderPtr AppenderAttachableImpl::getAppender(const LogString& name) const
@@ -92,11 +101,11 @@ AppenderPtr AppenderAttachableImpl::getAppender(const LogString& name) const
 		return 0;
 	}
 
-	std::unique_lock<std::mutex> lock( m_mutex );
-	AppenderList::const_iterator it, itEnd = appenderList.end();
+	std::unique_lock<std::mutex> lock( m_priv->m_mutex );
+	AppenderList::const_iterator it, itEnd = m_priv->appenderList.end();
 	AppenderPtr appender;
 
-	for (it = appenderList.begin(); it != itEnd; it++)
+	for (it = m_priv->appenderList.begin(); it != itEnd; it++)
 	{
 		appender = *it;
 
@@ -116,26 +125,26 @@ bool AppenderAttachableImpl::isAttached(const AppenderPtr appender) const
 		return false;
 	}
 
-	std::unique_lock<std::mutex> lock( m_mutex );
+	std::unique_lock<std::mutex> lock( m_priv->m_mutex );
 	AppenderList::const_iterator it = std::find(
-			appenderList.begin(), appenderList.end(), appender);
+			m_priv->appenderList.begin(), m_priv->appenderList.end(), appender);
 
-	return it != appenderList.end();
+	return it != m_priv->appenderList.end();
 }
 
 void AppenderAttachableImpl::removeAllAppenders()
 {
-	std::unique_lock<std::mutex> lock( m_mutex );
-	AppenderList::iterator it, itEnd = appenderList.end();
+	std::unique_lock<std::mutex> lock( m_priv->m_mutex );
+	AppenderList::iterator it, itEnd = m_priv->appenderList.end();
 	AppenderPtr a;
 
-	for (it = appenderList.begin(); it != itEnd; it++)
+	for (it = m_priv->appenderList.begin(); it != itEnd; it++)
 	{
 		a = *it;
 		a->close();
 	}
 
-	appenderList.clear();
+	m_priv->appenderList.clear();
 }
 
 void AppenderAttachableImpl::removeAppender(const AppenderPtr appender)
@@ -145,13 +154,13 @@ void AppenderAttachableImpl::removeAppender(const AppenderPtr appender)
 		return;
 	}
 
-	std::unique_lock<std::mutex> lock( m_mutex );
+	std::unique_lock<std::mutex> lock( m_priv->m_mutex );
 	AppenderList::iterator it = std::find(
-			appenderList.begin(), appenderList.end(), appender);
+			m_priv->appenderList.begin(), m_priv->appenderList.end(), appender);
 
-	if (it != appenderList.end())
+	if (it != m_priv->appenderList.end())
 	{
-		appenderList.erase(it);
+		m_priv->appenderList.erase(it);
 	}
 }
 
@@ -162,20 +171,23 @@ void AppenderAttachableImpl::removeAppender(const LogString& name)
 		return;
 	}
 
-	std::unique_lock<std::mutex> lock( m_mutex );
-	AppenderList::iterator it, itEnd = appenderList.end();
+	std::unique_lock<std::mutex> lock( m_priv->m_mutex );
+	AppenderList::iterator it, itEnd = m_priv->appenderList.end();
 	AppenderPtr appender;
 
-	for (it = appenderList.begin(); it != itEnd; it++)
+	for (it = m_priv->appenderList.begin(); it != itEnd; it++)
 	{
 		appender = *it;
 
 		if (name == appender->getName())
 		{
-			appenderList.erase(it);
+			m_priv->appenderList.erase(it);
 			return;
 		}
 	}
 }
 
+std::mutex& AppenderAttachableImpl::getMutex(){
+	return m_priv->m_mutex;
+}
 
diff --git a/src/main/cpp/appenderskeleton.cpp b/src/main/cpp/appenderskeleton.cpp
index 6df2551..2c433d8 100644
--- a/src/main/cpp/appenderskeleton.cpp
+++ b/src/main/cpp/appenderskeleton.cpp
@@ -21,6 +21,7 @@
 #include <log4cxx/helpers/onlyonceerrorhandler.h>
 #include <log4cxx/level.h>
 #include <log4cxx/helpers/stringhelper.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
@@ -29,38 +30,31 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(AppenderSkeleton)
 
+AppenderSkeleton::AppenderSkeleton( std::unique_ptr<priv::AppenderSkeletonPrivate> priv )
+	:	m_priv(std::move(priv))
+{
+
+}
 
 AppenderSkeleton::AppenderSkeleton()
-	:   layout(),
-		name(),
-		threshold(Level::getAll()),
-		errorHandler(new OnlyOnceErrorHandler()),
-		headFilter(),
-		tailFilter(),
-		pool()
+	:   m_priv(std::make_unique<priv::AppenderSkeletonPrivate>())
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	closed = false;
+
 }
 
 AppenderSkeleton::AppenderSkeleton(const LayoutPtr& layout1)
-	: layout(layout1),
-	  name(),
-	  threshold(Level::getAll()),
-	  errorHandler(new OnlyOnceErrorHandler()),
-	  headFilter(),
-	  tailFilter(),
-	  pool()
+	:	m_priv(std::make_unique<priv::AppenderSkeletonPrivate>())
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	closed = false;
+
 }
 
+AppenderSkeleton::~AppenderSkeleton(){}
+
 void AppenderSkeleton::finalize()
 {
 	// An appender might be closed then garbage collected. There is no
 	// point in closing twice.
-	if (closed)
+	if (m_priv->closed)
 	{
 		return;
 	}
@@ -68,45 +62,45 @@ void AppenderSkeleton::finalize()
 	close();
 }
 
-void AppenderSkeleton::addFilter(const spi::FilterPtr& newFilter)
+void AppenderSkeleton::addFilter(const spi::FilterPtr newFilter)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
 
-	if (headFilter == 0)
+	if (m_priv->headFilter == nullptr)
 	{
-		headFilter = tailFilter = newFilter;
+		m_priv->headFilter = m_priv->tailFilter = newFilter;
 	}
 	else
 	{
-		tailFilter->setNext(newFilter);
-		tailFilter = newFilter;
+		m_priv->tailFilter->setNext(newFilter);
+		m_priv->tailFilter = newFilter;
 	}
 }
 
 void AppenderSkeleton::clearFilters()
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	headFilter = tailFilter = 0;
+	std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
+	m_priv->headFilter = m_priv->tailFilter = nullptr;
 }
 
 bool AppenderSkeleton::isAsSevereAsThreshold(const LevelPtr& level) const
 {
-	return ((level == 0) || level->isGreaterOrEqual(threshold));
+	return ((level == 0) || level->isGreaterOrEqual(m_priv->threshold));
 }
 
 void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
 
 	doAppendImpl(event, pool1);
 }
 
 void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& pool1)
 {
-	if (closed)
+	if (m_priv->closed)
 	{
 		LogLog::error(((LogString) LOG4CXX_STR("Attempted to append to closed appender named ["))
-			+ name + LOG4CXX_STR("]."));
+			+ m_priv->name + LOG4CXX_STR("]."));
 		return;
 	}
 
@@ -115,7 +109,7 @@ void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& poo
 		return;
 	}
 
-	FilterPtr f = headFilter;
+	FilterPtr f = m_priv->headFilter;
 
 
 	while (f != 0)
@@ -126,7 +120,7 @@ void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& poo
 				return;
 
 			case Filter::ACCEPT:
-				f = 0;
+				f = nullptr;
 				break;
 
 			case Filter::NEUTRAL:
@@ -139,9 +133,9 @@ void AppenderSkeleton::doAppendImpl(const spi::LoggingEventPtr& event, Pool& poo
 
 void AppenderSkeleton::setErrorHandler(const spi::ErrorHandlerPtr errorHandler1)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
 
-	if (errorHandler1 == 0)
+	if (errorHandler1 == nullptr)
 	{
 		// We do not throw exception here since the cause is probably a
 		// bad config file.
@@ -149,14 +143,14 @@ void AppenderSkeleton::setErrorHandler(const spi::ErrorHandlerPtr errorHandler1)
 	}
 	else
 	{
-		this->errorHandler = errorHandler1;
+		m_priv->errorHandler = errorHandler1;
 	}
 }
 
 void AppenderSkeleton::setThreshold(const LevelPtr& threshold1)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	this->threshold = threshold1;
+	std::unique_lock<log4cxx::shared_mutex> lock(m_priv->mutex);
+	m_priv->threshold = threshold1;
 }
 
 void AppenderSkeleton::setOption(const LogString& option,
@@ -169,4 +163,34 @@ void AppenderSkeleton::setOption(const LogString& option,
 	}
 }
 
+const spi::ErrorHandlerPtr AppenderSkeleton::getErrorHandler() const{
+	return m_priv->errorHandler;
+}
+
+spi::FilterPtr AppenderSkeleton::getFilter() const{
+	return m_priv->headFilter;
+}
+
+const spi::FilterPtr AppenderSkeleton::getFirstFilter() const{
+	return m_priv->headFilter;
+}
+
+LayoutPtr AppenderSkeleton::getLayout() const{
+	return m_priv->layout;
+}
+
+LogString AppenderSkeleton::getName() const{
+	return m_priv->name;
+}
 
+const LevelPtr AppenderSkeleton::getThreshold() const{
+	return m_priv->threshold;
+}
+
+void AppenderSkeleton::setLayout(const LayoutPtr layout1){
+	m_priv->layout = layout1;
+}
+
+void AppenderSkeleton::setName(const LogString& name1){
+	m_priv->name.assign(name1);
+}
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index d357ff0..f878038 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -31,38 +31,145 @@
 #include <apr_atomic.h>
 #include <log4cxx/helpers/optionconverter.h>
 #include <log4cxx/helpers/threadutility.h>
-
+#include <log4cxx/private/appenderskeleton_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+/**
+ * The default buffer size is set to 128 events.
+*/
+enum { DEFAULT_BUFFER_SIZE = 128 };
+
+class DiscardSummary
+{
+	private:
+		/**
+		 * First event of the highest severity.
+		*/
+		::log4cxx::spi::LoggingEventPtr maxEvent;
+
+		/**
+		* Total count of messages discarded.
+		*/
+		int count;
+
+	public:
+		/**
+		 * Create new instance.
+		 *
+		 * @param event event, may not be null.
+		*/
+		DiscardSummary(const ::log4cxx::spi::LoggingEventPtr& event);
+		/** Copy constructor.  */
+		DiscardSummary(const DiscardSummary& src);
+		/** Assignment operator. */
+		DiscardSummary& operator=(const DiscardSummary& src);
+
+		/**
+		 * Add discarded event to summary.
+		 *
+		 * @param event event, may not be null.
+		*/
+		void add(const ::log4cxx::spi::LoggingEventPtr& event);
+
+		/**
+		 * Create event with summary information.
+		 *
+		 * @return new event.
+		 */
+		::log4cxx::spi::LoggingEventPtr createEvent(::log4cxx::helpers::Pool& p);
+
+		static
+		::log4cxx::spi::LoggingEventPtr createEvent(::log4cxx::helpers::Pool& p,
+			size_t discardedCount);
+};
+
+typedef std::map<LogString, DiscardSummary> DiscardMap;
+
+struct AsyncAppenderPriv : public priv::AppenderSkeletonPrivate {
+	AsyncAppenderPriv()	:
+		buffer(),
+		bufferSize(DEFAULT_BUFFER_SIZE),
+		appenders(std::make_shared<AppenderAttachableImpl>(pool)),
+		dispatcher(),
+		locationInfo(false),
+		blocking(true){}
+
+	/**
+	 * Event buffer.
+	*/
+#if defined(NON_BLOCKING)
+	boost::lockfree::queue<log4cxx::spi::LoggingEvent* > buffer;
+	std::atomic<size_t> discardedCount;
+#else
+	LoggingEventList buffer;
+#endif
+
+	/**
+	 *  Mutex used to guard access to buffer and discardMap.
+	 */
+	std::mutex bufferMutex;
+
+#if defined(NON_BLOCKING)
+	::log4cxx::helpers::Semaphore bufferNotFull;
+	::log4cxx::helpers::Semaphore bufferNotEmpty;
+#else
+	std::condition_variable bufferNotFull;
+	std::condition_variable bufferNotEmpty;
+#endif
+
+	/**
+	  * Map of DiscardSummary objects keyed by logger name.
+	*/
+	DiscardMap discardMap;
+
+	/**
+	 * Buffer size.
+	*/
+	int bufferSize;
+
+	/**
+	 * Nested appenders.
+	*/
+	helpers::AppenderAttachableImplPtr appenders;
+
+	/**
+	 *  Dispatcher.
+	 */
+	std::thread dispatcher;
+
+	/**
+	 * Should location info be included in dispatched messages.
+	*/
+	bool locationInfo;
+
+	/**
+	 * Does appender block when buffer is full.
+	*/
+	bool blocking;
+};
+
 
 IMPLEMENT_LOG4CXX_OBJECT(AsyncAppender)
 
+#define priv static_cast<AsyncAppenderPriv*>(m_priv.get())
 
 AsyncAppender::AsyncAppender()
-	: AppenderSkeleton(),
-	  buffer(),
-	  discardMap(new DiscardMap()),
-	  bufferSize(DEFAULT_BUFFER_SIZE),
-	  appenders(new AppenderAttachableImpl(pool)),
-	  dispatcher(),
-	  locationInfo(false),
-	  blocking(true)
+	: AppenderSkeleton(std::make_unique<AsyncAppenderPriv>())
 {
-	dispatcher = ThreadUtility::instance()->createThread( LOG4CXX_STR("AsyncAppender"), &AsyncAppender::dispatch, this );
+	priv->dispatcher = ThreadUtility::instance()->createThread( LOG4CXX_STR("AsyncAppender"), &AsyncAppender::dispatch, this );
 }
 
 AsyncAppender::~AsyncAppender()
 {
 	finalize();
-	delete discardMap;
 }
 
 void AsyncAppender::addAppender(const AppenderPtr newAppender)
 {
-	appenders->addAppender(newAppender);
+	priv->appenders->addAppender(newAppender);
 }
 
 
@@ -92,7 +199,7 @@ void AsyncAppender::setOption(const LogString& option,
 
 void AsyncAppender::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(priv->mutex);
 
 	doAppendImpl(event, pool1);
 }
@@ -103,10 +210,10 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	//   if dispatcher has died then
 	//      append subsequent events synchronously
 	//
-	if (!dispatcher.joinable() || bufferSize <= 0)
+	if (!priv->dispatcher.joinable() || priv->bufferSize <= 0)
 	{
-		std::unique_lock<std::mutex> lock(appenders->getMutex());
-		appenders->appendLoopOnAppenders(event, p);
+		std::unique_lock<std::mutex> lock(priv->appenders->getMutex());
+		priv->appenders->appendLoopOnAppenders(event, p);
 		return;
 	}
 
@@ -120,19 +227,19 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 
 	{
-		std::unique_lock<std::mutex> lock(bufferMutex);
+		std::unique_lock<std::mutex> lock(priv->bufferMutex);
 
 		while (true)
 		{
-			size_t previousSize = buffer.size();
+			size_t previousSize = priv->buffer.size();
 
-			if (previousSize < (size_t)bufferSize)
+			if (previousSize < (size_t)priv->bufferSize)
 			{
-				buffer.push_back(event);
+				priv->buffer.push_back(event);
 
 				if (previousSize == 0)
 				{
-					bufferNotEmpty.notify_all();
+					priv->bufferNotEmpty.notify_all();
 				}
 
 				break;
@@ -147,13 +254,13 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 			//      wait for a buffer notification
 			bool discard = true;
 
-			if (blocking
+			if (priv->blocking
 				//&& !Thread::interrupted()
-				&& (dispatcher.get_id() != std::this_thread::get_id()) )
+				&& (priv->dispatcher.get_id() != std::this_thread::get_id()) )
 			{
 				try
 				{
-					bufferNotFull.wait(lock);
+					priv->bufferNotFull.wait(lock);
 					discard = false;
 				}
 				catch (InterruptedException&)
@@ -173,12 +280,12 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 			if (discard)
 			{
 				LogString loggerName = event->getLoggerName();
-				DiscardMap::iterator iter = discardMap->find(loggerName);
+				DiscardMap::iterator iter = priv->discardMap.find(loggerName);
 
-				if (iter == discardMap->end())
+				if (iter == priv->discardMap.end())
 				{
 					DiscardSummary summary(event);
-					discardMap->insert(DiscardMap::value_type(loggerName, summary));
+					priv->discardMap.insert(DiscardMap::value_type(loggerName, summary));
 				}
 				else
 				{
@@ -195,20 +302,20 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 void AsyncAppender::close()
 {
 	{
-		std::unique_lock<std::mutex> lock(bufferMutex);
-		closed = true;
-		bufferNotEmpty.notify_all();
-		bufferNotFull.notify_all();
+		std::unique_lock<std::mutex> lock(priv->bufferMutex);
+		priv->closed = true;
+		priv->bufferNotEmpty.notify_all();
+		priv->bufferNotFull.notify_all();
 	}
 
-	if ( dispatcher.joinable() )
+	if ( priv->dispatcher.joinable() )
 	{
-		dispatcher.join();
+		priv->dispatcher.join();
 	}
 
 	{
-		std::unique_lock<std::mutex> lock(appenders->getMutex());
-		AppenderList appenderList = appenders->getAllAppenders();
+		std::unique_lock<std::mutex> lock(priv->appenders->getMutex());
+		AppenderList appenderList = priv->appenders->getAllAppenders();
 
 		for (AppenderList::iterator iter = appenderList.begin();
 			iter != appenderList.end();
@@ -221,17 +328,17 @@ void AsyncAppender::close()
 
 AppenderList AsyncAppender::getAllAppenders() const
 {
-	return appenders->getAllAppenders();
+	return priv->appenders->getAllAppenders();
 }
 
 AppenderPtr AsyncAppender::getAppender(const LogString& n) const
 {
-	return appenders->getAppender(n);
+	return priv->appenders->getAppender(n);
 }
 
 bool AsyncAppender::isAttached(const AppenderPtr appender) const
 {
-	return appenders->isAttached(appender);
+	return priv->appenders->isAttached(appender);
 }
 
 bool AsyncAppender::requiresLayout() const
@@ -241,27 +348,27 @@ bool AsyncAppender::requiresLayout() const
 
 void AsyncAppender::removeAllAppenders()
 {
-	appenders->removeAllAppenders();
+	priv->appenders->removeAllAppenders();
 }
 
 void AsyncAppender::removeAppender(const AppenderPtr appender)
 {
-	appenders->removeAppender(appender);
+	priv->appenders->removeAppender(appender);
 }
 
 void AsyncAppender::removeAppender(const LogString& n)
 {
-	appenders->removeAppender(n);
+	priv->appenders->removeAppender(n);
 }
 
 bool AsyncAppender::getLocationInfo() const
 {
-	return locationInfo;
+	return priv->locationInfo;
 }
 
 void AsyncAppender::setLocationInfo(bool flag)
 {
-	locationInfo = flag;
+	priv->locationInfo = flag;
 }
 
 
@@ -272,46 +379,46 @@ void AsyncAppender::setBufferSize(int size)
 		throw IllegalArgumentException(LOG4CXX_STR("size argument must be non-negative"));
 	}
 
-	std::unique_lock<std::mutex> lock(bufferMutex);
-	bufferSize = (size < 1) ? 1 : size;
-	bufferNotFull.notify_all();
+	std::unique_lock<std::mutex> lock(priv->bufferMutex);
+	priv->bufferSize = (size < 1) ? 1 : size;
+	priv->bufferNotFull.notify_all();
 }
 
 int AsyncAppender::getBufferSize() const
 {
-	return bufferSize;
+	return priv->bufferSize;
 }
 
 void AsyncAppender::setBlocking(bool value)
 {
-	std::unique_lock<std::mutex> lock(bufferMutex);
-	blocking = value;
-	bufferNotFull.notify_all();
+	std::unique_lock<std::mutex> lock(priv->bufferMutex);
+	priv->blocking = value;
+	priv->bufferNotFull.notify_all();
 }
 
 bool AsyncAppender::getBlocking() const
 {
-	return blocking;
+	return priv->blocking;
 }
 
-AsyncAppender::DiscardSummary::DiscardSummary(const LoggingEventPtr& event) :
+DiscardSummary::DiscardSummary(const LoggingEventPtr& event) :
 	maxEvent(event), count(1)
 {
 }
 
-AsyncAppender::DiscardSummary::DiscardSummary(const DiscardSummary& src) :
+DiscardSummary::DiscardSummary(const DiscardSummary& src) :
 	maxEvent(src.maxEvent), count(src.count)
 {
 }
 
-AsyncAppender::DiscardSummary& AsyncAppender::DiscardSummary::operator=(const DiscardSummary& src)
+DiscardSummary& DiscardSummary::operator=(const DiscardSummary& src)
 {
 	maxEvent = src.maxEvent;
 	count = src.count;
 	return *this;
 }
 
-void AsyncAppender::DiscardSummary::add(const LoggingEventPtr& event)
+void DiscardSummary::add(const LoggingEventPtr& event)
 {
 	if (event->getLevel()->toInt() > maxEvent->getLevel()->toInt())
 	{
@@ -321,7 +428,7 @@ void AsyncAppender::DiscardSummary::add(const LoggingEventPtr& event)
 	count++;
 }
 
-LoggingEventPtr AsyncAppender::DiscardSummary::createEvent(Pool& p)
+LoggingEventPtr DiscardSummary::createEvent(Pool& p)
 {
 	LogString msg(LOG4CXX_STR("Discarded "));
 	StringHelper::toString(count, p, msg);
@@ -335,7 +442,7 @@ LoggingEventPtr AsyncAppender::DiscardSummary::createEvent(Pool& p)
 }
 
 ::log4cxx::spi::LoggingEventPtr
-AsyncAppender::DiscardSummary::createEvent(::log4cxx::helpers::Pool& p,
+DiscardSummary::createEvent(::log4cxx::helpers::Pool& p,
 	size_t discardedCount)
 {
 	LogString msg(LOG4CXX_STR("Discarded "));
@@ -363,41 +470,41 @@ void AsyncAppender::dispatch()
 			Pool p;
 			LoggingEventList events;
 			{
-				std::unique_lock<std::mutex> lock(bufferMutex);
-				size_t bufferSize = buffer.size();
-				isActive = !closed;
+				std::unique_lock<std::mutex> lock(priv->bufferMutex);
+				size_t bufferSize = priv->buffer.size();
+				isActive = !priv->closed;
 
 				while ((bufferSize == 0) && isActive)
 				{
-					bufferNotEmpty.wait(lock);
-					bufferSize = buffer.size();
-					isActive = !closed;
+					priv->bufferNotEmpty.wait(lock);
+					bufferSize = priv->buffer.size();
+					isActive = !priv->closed;
 				}
 
-				for (LoggingEventList::iterator eventIter = buffer.begin();
-					eventIter != buffer.end();
+				for (LoggingEventList::iterator eventIter = priv->buffer.begin();
+					eventIter != priv->buffer.end();
 					eventIter++)
 				{
 					events.push_back(*eventIter);
 				}
 
-				for (DiscardMap::iterator discardIter = discardMap->begin();
-					discardIter != discardMap->end();
+				for (DiscardMap::iterator discardIter = priv->discardMap.begin();
+					discardIter != priv->discardMap.end();
 					discardIter++)
 				{
 					events.push_back(discardIter->second.createEvent(p));
 				}
 
-				buffer.clear();
-				discardMap->clear();
-				bufferNotFull.notify_all();
+				priv->buffer.clear();
+				priv->discardMap.clear();
+				priv->bufferNotFull.notify_all();
 			}
 
 			for (LoggingEventList::iterator iter = events.begin();
 				iter != events.end();
 				iter++)
 			{
-				appenders->appendLoopOnAppenders(*iter, p);
+				priv->appenders->appendLoopOnAppenders(*iter, p);
 			}
 		}
 	}
diff --git a/src/main/cpp/class.cpp b/src/main/cpp/class.cpp
index 307a7cb..80430f7 100644
--- a/src/main/cpp/class.cpp
+++ b/src/main/cpp/class.cpp
@@ -30,8 +30,6 @@
 	#define LOG4CXX 1
 #endif
 #include <log4cxx/private/log4cxx_private.h>
-#include <log4cxx/rollingfileappender.h>
-#include <log4cxx/dailyrollingfileappender.h>
 
 
 #include <log4cxx/asyncappender.h>
@@ -173,7 +171,6 @@ void Class::registerClasses()
 #endif
 	log4cxx::nt::OutputDebugStringAppender::registerClass();
 #endif
-	log4cxx::RollingFileAppender::registerClass();
 	SMTPAppender::registerClass();
 	SocketAppender::registerClass();
 #if APR_HAS_THREADS
@@ -193,9 +190,7 @@ void Class::registerClasses()
 	LevelMatchFilter::registerClass();
 	LevelRangeFilter::registerClass();
 	StringMatchFilter::registerClass();
-	log4cxx::RollingFileAppender::registerClass();
 	log4cxx::rolling::RollingFileAppender::registerClass();
-	DailyRollingFileAppender::registerClass();
 	log4cxx::rolling::SizeBasedTriggeringPolicy::registerClass();
 	log4cxx::rolling::TimeBasedRollingPolicy::registerClass();
 	log4cxx::rolling::ManualTriggeringPolicy::registerClass();
diff --git a/src/main/cpp/consoleappender.cpp b/src/main/cpp/consoleappender.cpp
index c81661d..c77c409 100644
--- a/src/main/cpp/consoleappender.cpp
+++ b/src/main/cpp/consoleappender.cpp
@@ -21,19 +21,31 @@
 #include <log4cxx/helpers/systemerrwriter.h>
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/layout.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
+#include <log4cxx/private/writerappender_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct ConsoleAppenderPriv : public priv::WriterAppenderPriv{
+	ConsoleAppenderPriv(LogString target) :
+		WriterAppenderPriv(),
+		target(target){}
+
+	LogString target;
+};
+
+#define _priv static_cast<ConsoleAppenderPriv*>(m_priv.get())
+
 IMPLEMENT_LOG4CXX_OBJECT(ConsoleAppender)
 
 ConsoleAppender::ConsoleAppender()
-	: target(getSystemOut())
+	: WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
 {
 }
 
 ConsoleAppender::ConsoleAppender(const LayoutPtr& layout1)
-	: target(getSystemOut())
+	: WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
 {
 	setLayout(layout1);
 	Pool p;
@@ -43,7 +55,7 @@ ConsoleAppender::ConsoleAppender(const LayoutPtr& layout1)
 }
 
 ConsoleAppender::ConsoleAppender(const LayoutPtr& layout1, const LogString& target1)
-	: target(target1)
+	: WriterAppender (std::make_unique<ConsoleAppenderPriv>(getSystemOut()))
 {
 	setLayout(layout1);
 	Pool p;
@@ -74,12 +86,12 @@ void ConsoleAppender::setTarget(const LogString& value)
 	if (StringHelper::equalsIgnoreCase(v,
 			LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
 	{
-		target = getSystemOut();
+		_priv->target = getSystemOut();
 	}
 	else if (StringHelper::equalsIgnoreCase(v,
 			LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
 	{
-		target = getSystemErr();
+		_priv->target = getSystemErr();
 	}
 	else
 	{
@@ -89,7 +101,7 @@ void ConsoleAppender::setTarget(const LogString& value)
 
 LogString ConsoleAppender::getTarget() const
 {
-	return target;
+	return _priv->target;
 }
 
 void ConsoleAppender::targetWarn(const LogString& val)
@@ -101,16 +113,16 @@ void ConsoleAppender::targetWarn(const LogString& val)
 
 void ConsoleAppender::activateOptions(Pool& p)
 {
-	if (StringHelper::equalsIgnoreCase(target,
+	if (StringHelper::equalsIgnoreCase(_priv->target,
 			LOG4CXX_STR("SYSTEM.OUT"), LOG4CXX_STR("system.out")))
 	{
-		WriterPtr writer1(new SystemOutWriter());
+		WriterPtr writer1 = std::make_shared<SystemOutWriter>();
 		setWriter(writer1);
 	}
-	else if (StringHelper::equalsIgnoreCase(target,
+	else if (StringHelper::equalsIgnoreCase(_priv->target,
 			LOG4CXX_STR("SYSTEM.ERR"), LOG4CXX_STR("system.err")))
 	{
-		WriterPtr writer1(new SystemErrWriter());
+		WriterPtr writer1 = std::make_shared<SystemErrWriter>();
 		setWriter(writer1);
 	}
 
diff --git a/src/main/cpp/fileappender.cpp b/src/main/cpp/fileappender.cpp
index cca1abb..29ed49c 100644
--- a/src/main/cpp/fileappender.cpp
+++ b/src/main/cpp/fileappender.cpp
@@ -25,6 +25,8 @@
 #include <log4cxx/helpers/outputstreamwriter.h>
 #include <log4cxx/helpers/bufferedwriter.h>
 #include <log4cxx/helpers/bytebuffer.h>
+#include <log4cxx/private/writerappender_priv.h>
+#include <log4cxx/private/fileappender_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
@@ -33,59 +35,56 @@ using namespace log4cxx::spi;
 
 IMPLEMENT_LOG4CXX_OBJECT(FileAppender)
 
+#define _priv static_cast<priv::FileAppenderPriv*>(m_priv.get())
 
-FileAppender::FileAppender()
+FileAppender::FileAppender() :
+	WriterAppender (std::make_unique<priv::FileAppenderPriv>())
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	fileAppend = true;
-	bufferedIO = false;
-	bufferSize = 8 * 1024;
+	_priv->fileAppend = true;
+	_priv->bufferedIO = false;
+	_priv->bufferSize = 8 * 1024;
 }
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1,
 	bool append1, bool bufferedIO1, int bufferSize1)
-	: WriterAppender(layout1)
+	: WriterAppender(std::make_unique<priv::FileAppenderPriv>(layout1))
 {
-	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		fileAppend = append1;
-		fileName = fileName1;
-		bufferedIO = bufferedIO1;
-		bufferSize = bufferSize1;
-	}
+	_priv->fileAppend = append1;
+	_priv->fileName = fileName1;
+	_priv->bufferedIO = bufferedIO1;
+	_priv->bufferSize = bufferSize1;
 	Pool p;
 	activateOptions(p);
 }
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1,
 	bool append1)
-	: WriterAppender(layout1)
+	: WriterAppender(std::make_unique<priv::FileAppenderPriv>(layout1))
 {
-	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		fileAppend = append1;
-		fileName = fileName1;
-		bufferedIO = false;
-		bufferSize = 8 * 1024;
-	}
+	_priv->fileAppend = append1;
+	_priv->fileName = fileName1;
+	_priv->bufferedIO = false;
+	_priv->bufferSize = 8 * 1024;
 	Pool p;
 	activateOptions(p);
 }
 
 FileAppender::FileAppender(const LayoutPtr& layout1, const LogString& fileName1)
-	: WriterAppender(layout1)
+	: WriterAppender(std::make_unique<priv::FileAppenderPriv>(layout1))
 {
-	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		fileAppend = true;
-		fileName = fileName1;
-		bufferedIO = false;
-		bufferSize = 8 * 1024;
-	}
+	_priv->fileAppend = true;
+	_priv->fileName = fileName1;
+	_priv->bufferedIO = false;
+	_priv->bufferSize = 8 * 1024;
 	Pool p;
 	activateOptions(p);
 }
 
+FileAppender::FileAppender(std::unique_ptr<priv::FileAppenderPriv> priv) :
+	WriterAppender (std::move(priv)){
+
+}
+
 FileAppender::~FileAppender()
 {
 	finalize();
@@ -93,25 +92,25 @@ FileAppender::~FileAppender()
 
 void FileAppender::setAppend(bool fileAppend1)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	this->fileAppend = fileAppend1;
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+	_priv->fileAppend = fileAppend1;
 }
 
 void FileAppender::setFile(const LogString& file)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 	setFileInternal(file);
 }
 
 void FileAppender::setFileInternal(const LogString& file)
 {
-	fileName = file;
+	_priv->fileName = file;
 }
 
 void FileAppender::setBufferedIO(bool bufferedIO1)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	this->bufferedIO = bufferedIO1;
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+	_priv->bufferedIO = bufferedIO1;
 
 	if (bufferedIO1)
 	{
@@ -125,28 +124,28 @@ void FileAppender::setOption(const LogString& option,
 	if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("FILE"), LOG4CXX_STR("file"))
 		|| StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("FILENAME"), LOG4CXX_STR("filename")))
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		fileName = stripDuplicateBackslashes(value);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+		_priv->fileName = stripDuplicateBackslashes(value);
 	}
 	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("APPEND"), LOG4CXX_STR("append")))
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		fileAppend = OptionConverter::toBoolean(value, true);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+		_priv->fileAppend = OptionConverter::toBoolean(value, true);
 	}
 	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFEREDIO"), LOG4CXX_STR("bufferedio")))
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		bufferedIO = OptionConverter::toBoolean(value, true);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+		_priv->bufferedIO = OptionConverter::toBoolean(value, true);
 	}
 	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("IMMEDIATEFLUSH"), LOG4CXX_STR("immediateflush")))
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		bufferedIO = !OptionConverter::toBoolean(value, false);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+		_priv->bufferedIO = !OptionConverter::toBoolean(value, false);
 	}
 	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFERSIZE"), LOG4CXX_STR("buffersize")))
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		bufferSize = OptionConverter::toFileSize(value, 8 * 1024);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+		_priv->bufferSize = OptionConverter::toFileSize(value, 8 * 1024);
 	}
 	else
 	{
@@ -156,7 +155,7 @@ void FileAppender::setOption(const LogString& option,
 
 void FileAppender::activateOptions(Pool& p)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 	activateOptionsInternal(p);
 }
 
@@ -164,28 +163,28 @@ void FileAppender::activateOptionsInternal(Pool& p)
 {
 	int errors = 0;
 
-	if (!fileName.empty())
+	if (!_priv->fileName.empty())
 	{
 		try
 		{
-			setFileInternal(fileName, fileAppend, bufferedIO, bufferSize, p);
+			setFileInternal(_priv->fileName, _priv->fileAppend, _priv->bufferedIO, _priv->bufferSize, p);
 		}
 		catch (IOException& e)
 		{
 			errors++;
 			LogString msg(LOG4CXX_STR("setFile("));
-			msg.append(fileName);
+			msg.append(_priv->fileName);
 			msg.append(1, (logchar) 0x2C /* ',' */);
-			StringHelper::toString(fileAppend, msg);
+			StringHelper::toString(_priv->fileAppend, msg);
 			msg.append(LOG4CXX_STR(") call failed."));
-			errorHandler->error(msg, e, ErrorCode::FILE_OPEN_FAILURE);
+			_priv->errorHandler->error(msg, e, ErrorCode::FILE_OPEN_FAILURE);
 		}
 	}
 	else
 	{
 		errors++;
 		LogLog::error(LogString(LOG4CXX_STR("File option not set for appender ["))
-			+  name + LOG4CXX_STR("]."));
+			+  _priv->name + LOG4CXX_STR("]."));
 		LogLog::warn(LOG4CXX_STR("Are you using FileAppender instead of ConsoleAppender?"));
 	}
 
@@ -355,11 +354,35 @@ void FileAppender::setFileInternal(
 
 	setWriterInternal(newWriter);
 
-	this->fileAppend = append1;
-	this->bufferedIO = bufferedIO1;
-	this->fileName = filename;
-	this->bufferSize = (int)bufferSize1;
+	_priv->fileAppend = append1;
+	_priv->bufferedIO = bufferedIO1;
+	_priv->fileName = filename;
+	_priv->bufferSize = (int)bufferSize1;
 	writeHeader(p);
 
 }
 
+LogString FileAppender::getFile() const
+{
+	return _priv->fileName;
+}
+
+bool FileAppender::getBufferedIO() const
+{
+	return _priv->bufferedIO;
+}
+
+int FileAppender::getBufferSize() const
+{
+	return _priv->bufferSize;
+}
+
+void FileAppender::setBufferSize(int bufferSize1)
+{
+	_priv->bufferSize = bufferSize1;
+}
+
+bool FileAppender::getAppend() const
+{
+	return _priv->fileAppend;
+}
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index a8fa380..fb1632c 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -21,6 +21,7 @@
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/patternlayout.h>
 #include <apr_strings.h>
+#include <log4cxx/private/odbcappender_priv.h>
 
 #if !defined(LOG4CXX)
 	#define LOG4CXX 1
@@ -90,10 +91,10 @@ const char* SQLException::formatMessage(short fHandleType,
 
 IMPLEMENT_LOG4CXX_OBJECT(ODBCAppender)
 
-
+#define _priv static_cast<priv::ODBCAppenderPriv*>(m_priv.get())
 
 ODBCAppender::ODBCAppender()
-	: connection(0), env(0), bufferSize(1)
+	: AppenderSkeleton (std::make_unique<priv::ODBCAppenderPriv>())
 {
 }
 
@@ -143,9 +144,9 @@ void ODBCAppender::activateOptions(log4cxx::helpers::Pool&)
 void ODBCAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p)
 {
 #if LOG4CXX_HAVE_ODBC
-	buffer.push_back(event);
+	_priv->buffer.push_back(event);
 
-	if (buffer.size() >= bufferSize)
+	if (_priv->buffer.size() >=_priv->bufferSize)
 	{
 		flushBuffer(p);
 	}
@@ -219,46 +220,46 @@ ODBCAppender::SQLHDBC ODBCAppender::getConnection(log4cxx::helpers::Pool& p)
 #if LOG4CXX_HAVE_ODBC
 	SQLRETURN ret;
 
-	if (env == SQL_NULL_HENV)
+	if (_priv->env == SQL_NULL_HENV)
 	{
-		ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
+		ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &_priv->env);
 
 		if (ret < 0)
 		{
-			SQLException ex(SQL_HANDLE_ENV, env, "Failed to allocate SQL handle.", p);
-			env = SQL_NULL_HENV;
+			SQLException ex(SQL_HANDLE_ENV, _priv->env, "Failed to allocate SQL handle.", p);
+			_priv->env = SQL_NULL_HENV;
 			throw ex;
 		}
 
-		ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
+		ret = SQLSetEnvAttr(_priv->env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
 
 		if (ret < 0)
 		{
-			SQLException ex(SQL_HANDLE_ENV, env, "Failed to set odbc version.", p);
-			SQLFreeHandle(SQL_HANDLE_ENV, env);
-			env = SQL_NULL_HENV;
+			SQLException ex(SQL_HANDLE_ENV, _priv->env, "Failed to set odbc version.", p);
+			SQLFreeHandle(SQL_HANDLE_ENV, _priv->env);
+			_priv->env = SQL_NULL_HENV;
 			throw ex;
 		}
 	}
 
-	if (connection == SQL_NULL_HDBC)
+	if (_priv->connection == SQL_NULL_HDBC)
 	{
-		ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &connection);
+		ret = SQLAllocHandle(SQL_HANDLE_DBC, _priv->env, &_priv->connection);
 
 		if (ret < 0)
 		{
-			SQLException ex(SQL_HANDLE_DBC, connection, "Failed to allocate sql handle.", p);
-			connection = SQL_NULL_HDBC;
+			SQLException ex(SQL_HANDLE_DBC, _priv->connection, "Failed to allocate sql handle.", p);
+			_priv->connection = SQL_NULL_HDBC;
 			throw ex;
 		}
 
 
 		SQLWCHAR* wURL, *wUser, *wPwd;
-		encode(&wURL, databaseURL, p);
-		encode(&wUser, databaseUser, p);
-		encode(&wPwd, databasePassword, p);
+		encode(&wURL, _priv->databaseURL, p);
+		encode(&wUser, _priv->databaseUser, p);
+		encode(&wPwd, _priv->databasePassword, p);
 
-		ret = SQLConnectW( connection,
+		ret = SQLConnectW( _priv->connection,
 				wURL, SQL_NTS,
 				wUser, SQL_NTS,
 				wPwd, SQL_NTS);
@@ -266,14 +267,14 @@ ODBCAppender::SQLHDBC ODBCAppender::getConnection(log4cxx::helpers::Pool& p)
 
 		if (ret < 0)
 		{
-			SQLException ex(SQL_HANDLE_DBC, connection, "Failed to connect to database.", p);
-			SQLFreeHandle(SQL_HANDLE_DBC, connection);
-			connection = SQL_NULL_HDBC;
+			SQLException ex(SQL_HANDLE_DBC, _priv->connection, "Failed to connect to database.", p);
+			SQLFreeHandle(SQL_HANDLE_DBC, _priv->connection);
+			_priv->connection = SQL_NULL_HDBC;
 			throw ex;
 		}
 	}
 
-	return connection;
+	return _priv->connection;
 #else
 	return 0;
 #endif
@@ -281,7 +282,7 @@ ODBCAppender::SQLHDBC ODBCAppender::getConnection(log4cxx::helpers::Pool& p)
 
 void ODBCAppender::close()
 {
-	if (closed)
+	if (_priv->closed)
 	{
 		return;
 	}
@@ -294,32 +295,32 @@ void ODBCAppender::close()
 	}
 	catch (SQLException& e)
 	{
-		errorHandler->error(LOG4CXX_STR("Error closing connection"),
+		_priv->errorHandler->error(LOG4CXX_STR("Error closing connection"),
 			e, ErrorCode::GENERIC_FAILURE);
 	}
 
 #if LOG4CXX_HAVE_ODBC
 
-	if (connection != SQL_NULL_HDBC)
+	if (_priv->connection != SQL_NULL_HDBC)
 	{
-		SQLDisconnect(connection);
-		SQLFreeHandle(SQL_HANDLE_DBC, connection);
+		SQLDisconnect(_priv->connection);
+		SQLFreeHandle(SQL_HANDLE_DBC, _priv->connection);
 	}
 
-	if (env != SQL_NULL_HENV)
+	if (_priv->env != SQL_NULL_HENV)
 	{
-		SQLFreeHandle(SQL_HANDLE_ENV, env);
+		SQLFreeHandle(SQL_HANDLE_ENV, _priv->env);
 	}
 
 #endif
-	this->closed = true;
+	_priv->closed = true;
 }
 
 void ODBCAppender::flushBuffer(Pool& p)
 {
 	std::list<spi::LoggingEventPtr>::iterator i;
 
-	for (i = buffer.begin(); i != buffer.end(); i++)
+	for (i = _priv->buffer.begin(); i != _priv->buffer.end(); i++)
 	{
 		try
 		{
@@ -329,18 +330,18 @@ void ODBCAppender::flushBuffer(Pool& p)
 		}
 		catch (SQLException& e)
 		{
-			errorHandler->error(LOG4CXX_STR("Failed to execute sql"), e,
+			_priv->errorHandler->error(LOG4CXX_STR("Failed to execute sql"), e,
 				ErrorCode::FLUSH_FAILURE);
 		}
 	}
 
 	// clear the buffer of reported events
-	buffer.clear();
+	_priv->buffer.clear();
 }
 
 void ODBCAppender::setSql(const LogString& s)
 {
-	sqlStatement = s;
+	_priv->sqlStatement = s;
 
 	if (getLayout() == 0)
 	{
@@ -397,3 +398,48 @@ void ODBCAppender::encode(unsigned short** dest,
 	*current = 0;
 }
 
+const LogString& ODBCAppender::getSql() const
+{
+	return _priv->sqlStatement;
+}
+
+void ODBCAppender::setUser(const LogString& user)
+{
+	_priv->databaseUser = user;
+}
+
+void ODBCAppender::setURL(const LogString& url)
+{
+	_priv->databaseURL = url;
+}
+
+void ODBCAppender::setPassword(const LogString& password)
+{
+	_priv->databasePassword = password;
+}
+
+void ODBCAppender::setBufferSize(size_t newBufferSize)
+{
+	_priv->bufferSize = newBufferSize;
+}
+
+const LogString& ODBCAppender::getUser() const
+{
+	return _priv->databaseUser;
+}
+
+const LogString& ODBCAppender::getURL() const
+{
+	return _priv->databaseURL;
+}
+
+const LogString& ODBCAppender::getPassword() const
+{
+	return _priv->databasePassword;
+}
+
+size_t ODBCAppender::getBufferSize() const
+{
+	return _priv->bufferSize;
+}
+
diff --git a/src/main/cpp/rollingfileappender.cpp b/src/main/cpp/rollingfileappender.cpp
index 7d236f4..fe0cfa1 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -40,6 +40,7 @@
 #include <log4cxx/rolling/fixedwindowrollingpolicy.h>
 #include <log4cxx/rolling/manualtriggeringpolicy.h>
 #include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/private/fileappender_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
@@ -47,61 +48,84 @@ using namespace log4cxx::rolling;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+struct RollingFileAppenderPriv : public priv::FileAppenderPriv{
+	RollingFileAppenderPriv() :
+		FileAppenderPriv(),
+		fileLength(0){}
+
+	/**
+	 * Triggering policy.
+	 */
+	TriggeringPolicyPtr triggeringPolicy;
+
+	/**
+	 * Rolling policy.
+	 */
+	RollingPolicyPtr rollingPolicy;
+
+	/**
+	 * Length of current active log file.
+	 */
+	size_t fileLength;
+
+	/**
+	 *  save the loggingevent
+	 */
+	spi::LoggingEventPtr _event;
+};
+
+#define _priv static_cast<RollingFileAppenderPriv*>(m_priv.get())
 
-IMPLEMENT_LOG4CXX_OBJECT(RollingFileAppenderSkeleton)
 IMPLEMENT_LOG4CXX_OBJECT(RollingFileAppender)
 
 
 /**
  * Construct a new instance.
  */
-RollingFileAppenderSkeleton::RollingFileAppenderSkeleton() : _event(NULL)
-{
-}
-
-RollingFileAppender::RollingFileAppender()
+RollingFileAppender::RollingFileAppender() :
+	FileAppender (std::make_unique<RollingFileAppenderPriv>())
 {
 }
 
 /**
  * Prepare instance of use.
  */
-void RollingFileAppenderSkeleton::activateOptions(Pool& p)
+void RollingFileAppender::activateOptions(Pool& p)
 {
-	if (rollingPolicy == NULL)
+	if (_priv->rollingPolicy == NULL)
 	{
 		FixedWindowRollingPolicyPtr fwrp = FixedWindowRollingPolicyPtr(new FixedWindowRollingPolicy());
 		fwrp->setFileNamePattern(getFile() + LOG4CXX_STR(".%i"));
-		rollingPolicy = fwrp;
+		_priv->rollingPolicy = fwrp;
 	}
 
 	//
 	//  if no explicit triggering policy and rolling policy is both.
 	//
-	if (triggeringPolicy == NULL)
+	if (_priv->triggeringPolicy == NULL)
 	{
-		TriggeringPolicyPtr trig = log4cxx::cast<TriggeringPolicy>(rollingPolicy);
+		TriggeringPolicyPtr trig = log4cxx::cast<TriggeringPolicy>(_priv->rollingPolicy);
 
 		if (trig != NULL)
 		{
-			triggeringPolicy = trig;
+			_priv->triggeringPolicy = trig;
 		}
 	}
 
-	if (triggeringPolicy == NULL)
+	if (_priv->triggeringPolicy == NULL)
 	{
-		triggeringPolicy = TriggeringPolicyPtr(new ManualTriggeringPolicy());
+		_priv->triggeringPolicy = TriggeringPolicyPtr(new ManualTriggeringPolicy());
 	}
 
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-		triggeringPolicy->activateOptions(p);
-		rollingPolicy->activateOptions(p);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+		_priv->triggeringPolicy->activateOptions(p);
+		_priv->rollingPolicy->activateOptions(p);
 
 		try
 		{
 			RolloverDescriptionPtr rollover1 =
-				rollingPolicy->initialize(getFile(), getAppend(), p);
+				_priv->rollingPolicy->initialize(getFile(), getAppend(), p);
 
 			if (rollover1 != NULL)
 			{
@@ -112,8 +136,8 @@ void RollingFileAppenderSkeleton::activateOptions(Pool& p)
 					syncAction->execute(p);
 				}
 
-				fileName = rollover1->getActiveFileName();
-				fileAppend = rollover1->getAppend();
+				_priv->fileName = rollover1->getActiveFileName();
+				_priv->fileAppend = rollover1->getAppend();
 
 				//
 				//  async action not yet implemented
@@ -131,11 +155,11 @@ void RollingFileAppenderSkeleton::activateOptions(Pool& p)
 
 			if (getAppend())
 			{
-				fileLength = activeFile.length(p);
+				_priv->fileLength = activeFile.length(p);
 			}
 			else
 			{
-				fileLength = 0;
+				_priv->fileLength = 0;
 			}
 
 			FileAppender::activateOptionsInternal(p);
@@ -181,18 +205,18 @@ void RollingFileAppenderSkeleton::releaseFileLock(apr_file_t* lock_file)
 
  * @return true if rollover performed.
  */
-bool RollingFileAppenderSkeleton::rollover(Pool& p)
+bool RollingFileAppender::rollover(Pool& p)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 	return rolloverInternal(p);
 }
 
-bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
+bool RollingFileAppender::rolloverInternal(Pool& p)
 {
 	//
 	//   can't roll without a policy
 	//
-	if (rollingPolicy != NULL)
+	if (_priv->rollingPolicy != NULL)
 	{
 
 		{
@@ -289,7 +313,7 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 
 				try
 				{
-					RolloverDescriptionPtr rollover1(rollingPolicy->rollover(this->getFile(), this->getAppend(), p));
+					RolloverDescriptionPtr rollover1(_priv->rollingPolicy->rollover(this->getFile(), this->getAppend(), p));
 
 					if (rollover1 != NULL)
 					{
@@ -312,7 +336,7 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 									LogLog::warn(LOG4CXX_STR("Exception on rollover"));
 									LogString exmsg;
 									log4cxx::helpers::Transcoder::decode(ex.what(), exmsg);
-									errorHandler->error(exmsg, ex, 0);
+									_priv->errorHandler->error(exmsg, ex, 0);
 								}
 							}
 
@@ -320,11 +344,11 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 							{
 								if (rollover1->getAppend())
 								{
-									fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
+									_priv->fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
 								}
 								else
 								{
-									fileLength = 0;
+									_priv->fileLength = 0;
 								}
 
 								//
@@ -339,12 +363,12 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 
 								setFileInternal(
 									rollover1->getActiveFileName(), rollover1->getAppend(),
-									bufferedIO, bufferSize, p);
+									_priv->bufferedIO, _priv->bufferSize, p);
 							}
 							else
 							{
 								setFileInternal(
-									rollover1->getActiveFileName(), true, bufferedIO, bufferSize, p);
+									rollover1->getActiveFileName(), true, _priv->bufferedIO, _priv->bufferSize, p);
 							}
 						}
 						else
@@ -373,7 +397,7 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 									LogLog::warn(LOG4CXX_STR("Exception during rollover"));
 									LogString exmsg;
 									log4cxx::helpers::Transcoder::decode(ex.what(), exmsg);
-									errorHandler->error(exmsg, ex, 0);
+									_priv->errorHandler->error(exmsg, ex, 0);
 								}
 							}
 
@@ -381,11 +405,11 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 							{
 								if (rollover1->getAppend())
 								{
-									fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
+									_priv->fileLength = File().setPath(rollover1->getActiveFileName()).length(p);
 								}
 								else
 								{
-									fileLength = 0;
+									_priv->fileLength = 0;
 								}
 
 								//
@@ -413,7 +437,7 @@ bool RollingFileAppenderSkeleton::rolloverInternal(Pool& p)
 					LogLog::warn(LOG4CXX_STR("Exception during rollover"));
 					LogString exmsg;
 					log4cxx::helpers::Transcoder::decode(ex.what(), exmsg);
-					errorHandler->error(exmsg, ex, 0);
+					_priv->errorHandler->error(exmsg, ex, 0);
 				}
 
 #ifdef LOG4CXX_MULTI_PROCESS
@@ -451,12 +475,12 @@ void RollingFileAppenderSkeleton::reopenLatestFile(Pool& p)
 /**
  * {@inheritDoc}
 */
-void RollingFileAppenderSkeleton::subAppend(const LoggingEventPtr& event, Pool& p)
+void RollingFileAppender::subAppend(const LoggingEventPtr& event, Pool& p)
 {
 	// The rollover check must precede actual writing. This is the
 	// only correct behavior for time driven triggers.
 	if (
-		triggeringPolicy->isTriggeringEvent(
+		_priv->triggeringPolicy->isTriggeringEvent(
 			this, event, getFile(), getFileLength()))
 	{
 		//
@@ -466,7 +490,7 @@ void RollingFileAppenderSkeleton::subAppend(const LoggingEventPtr& event, Pool&
 		//     condition and the append should still happen.
 		try
 		{
-			_event = &(const_cast<LoggingEventPtr&>(event));
+			_priv->_event = event;
 			rolloverInternal(p);
 		}
 		catch (std::exception& ex)
@@ -474,7 +498,7 @@ void RollingFileAppenderSkeleton::subAppend(const LoggingEventPtr& event, Pool&
 			LogLog::warn(LOG4CXX_STR("Exception during rollover attempt."));
 			LogString exmsg;
 			log4cxx::helpers::Transcoder::decode(ex.what(), exmsg);
-			errorHandler->error(exmsg);
+			_priv->errorHandler->error(exmsg);
 		}
 	}
 
@@ -516,42 +540,42 @@ void RollingFileAppenderSkeleton::subAppend(const LoggingEventPtr& event, Pool&
  * Get rolling policy.
  * @return rolling policy.
  */
-RollingPolicyPtr RollingFileAppenderSkeleton::getRollingPolicy() const
+RollingPolicyPtr RollingFileAppender::getRollingPolicy() const
 {
-	return rollingPolicy;
+	return _priv->rollingPolicy;
 }
 
 /**
  * Get triggering policy.
  * @return triggering policy.
  */
-TriggeringPolicyPtr RollingFileAppenderSkeleton::getTriggeringPolicy() const
+TriggeringPolicyPtr RollingFileAppender::getTriggeringPolicy() const
 {
-	return triggeringPolicy;
+	return _priv->triggeringPolicy;
 }
 
 /**
  * Sets the rolling policy.
  * @param policy rolling policy.
  */
-void RollingFileAppenderSkeleton::setRollingPolicy(const RollingPolicyPtr& policy)
+void RollingFileAppender::setRollingPolicy(const RollingPolicyPtr& policy)
 {
-	rollingPolicy = policy;
+	_priv->rollingPolicy = policy;
 }
 
 /**
  * Set triggering policy.
  * @param policy triggering policy.
  */
-void RollingFileAppenderSkeleton::setTriggeringPolicy(const TriggeringPolicyPtr& policy)
+void RollingFileAppender::setTriggeringPolicy(const TriggeringPolicyPtr& policy)
 {
-	triggeringPolicy = policy;
+	_priv->triggeringPolicy = policy;
 }
 
 /**
  * Close appender.  Waits for any asynchronous file compression actions to be completed.
  */
-void RollingFileAppenderSkeleton::close()
+void RollingFileAppender::close()
 {
 	FileAppender::close();
 }
@@ -575,7 +599,7 @@ class CountingOutputStream : public OutputStream
 		/**
 		 * Rolling file appender to inform of stream writes.
 		 */
-		RollingFileAppenderSkeleton* rfa;
+		RollingFileAppender* rfa;
 
 	public:
 		/**
@@ -584,7 +608,7 @@ class CountingOutputStream : public OutputStream
 		 * @param rfa rolling file appender to inform.
 		 */
 		CountingOutputStream(
-			OutputStreamPtr& os1, RollingFileAppenderSkeleton* rfa1) :
+			OutputStreamPtr& os1, RollingFileAppender* rfa1) :
 			os(os1), rfa(rfa1)
 		{
 		}
@@ -642,7 +666,7 @@ class CountingOutputStream : public OutputStream
  @param os output stream, may not be null.
  @return new writer.
  */
-WriterPtr RollingFileAppenderSkeleton::createWriter(OutputStreamPtr& os)
+WriterPtr RollingFileAppender::createWriter(OutputStreamPtr& os)
 {
 	OutputStreamPtr cos(new CountingOutputStream(os, this));
 	return FileAppender::createWriter(cos);
@@ -652,15 +676,15 @@ WriterPtr RollingFileAppenderSkeleton::createWriter(OutputStreamPtr& os)
  * Get byte length of current active log file.
  * @return byte length of current active log file.
  */
-size_t RollingFileAppenderSkeleton::getFileLength() const
+size_t RollingFileAppender::getFileLength() const
 {
-	return fileLength;
+	return _priv->fileLength;
 }
 
 #ifdef LOG4CXX_MULTI_PROCESS
-void RollingFileAppenderSkeleton::setFileLength(size_t length)
+void RollingFileAppender::setFileLength(size_t length)
 {
-	fileLength = length;
+	_priv->fileLength = length;
 }
 #endif
 
@@ -668,7 +692,7 @@ void RollingFileAppenderSkeleton::setFileLength(size_t length)
  * Increments estimated byte length of current active log file.
  * @param increment additional bytes written to log file.
  */
-void RollingFileAppenderSkeleton::incrementFileLength(size_t increment)
+void RollingFileAppender::incrementFileLength(size_t increment)
 {
-	fileLength += increment;
+	_priv->fileLength += increment;
 }
diff --git a/src/main/cpp/smtpappender.cpp b/src/main/cpp/smtpappender.cpp
index 28ec806..41b6153 100644
--- a/src/main/cpp/smtpappender.cpp
+++ b/src/main/cpp/smtpappender.cpp
@@ -27,7 +27,7 @@
 	#define LOG4CXX 1
 #endif
 #include <log4cxx/private/log4cxx_private.h>
-
+#include <log4cxx/private/appenderskeleton_priv.h>
 
 
 #include <apr_strings.h>
@@ -377,6 +377,40 @@ class LOG4CXX_EXPORT DefaultEvaluator :
 IMPLEMENT_LOG4CXX_OBJECT(DefaultEvaluator)
 IMPLEMENT_LOG4CXX_OBJECT(SMTPAppender)
 
+struct SMTPPriv : public priv::AppenderSkeletonPrivate {
+	SMTPPriv() :
+		priv::AppenderSkeletonPrivate(),
+		smtpPort(25),
+		bufferSize(512),
+		locationInfo(false),
+		cb(bufferSize),
+		evaluator(new DefaultEvaluator()){}
+
+	SMTPPriv(spi::TriggeringEventEvaluatorPtr evaluator) :
+		priv::AppenderSkeletonPrivate(),
+		smtpPort(25),
+		bufferSize(512),
+		locationInfo(false),
+		cb(bufferSize),
+		evaluator(evaluator){}
+
+	LogString to;
+	LogString cc;
+	LogString bcc;
+	LogString from;
+	LogString subject;
+	LogString smtpHost;
+	LogString smtpUsername;
+	LogString smtpPassword;
+	int smtpPort;
+	int bufferSize; // 512
+	bool locationInfo;
+	helpers::CyclicBuffer cb;
+	spi::TriggeringEventEvaluatorPtr evaluator;
+};
+
+#define _priv static_cast<SMTPPriv*>(m_priv.get())
+
 DefaultEvaluator::DefaultEvaluator()
 {
 }
@@ -387,8 +421,7 @@ bool DefaultEvaluator::isTriggeringEvent(const spi::LoggingEventPtr& event)
 }
 
 SMTPAppender::SMTPAppender()
-	: smtpPort(25), bufferSize(512), locationInfo(false), cb(bufferSize),
-	  evaluator(new DefaultEvaluator())
+	: AppenderSkeleton (std::make_unique<SMTPPriv>())
 {
 }
 
@@ -396,8 +429,7 @@ SMTPAppender::SMTPAppender()
 Use <code>evaluator</code> passed as parameter as the
 TriggeringEventEvaluator for this SMTPAppender.  */
 SMTPAppender::SMTPAppender(spi::TriggeringEventEvaluatorPtr evaluator)
-	: smtpPort(25), bufferSize(512), locationInfo(false), cb(bufferSize),
-	  evaluator(evaluator)
+	: AppenderSkeleton (std::make_unique<SMTPPriv>(evaluator))
 {
 }
 
@@ -414,73 +446,73 @@ bool SMTPAppender::requiresLayout() const
 
 LogString SMTPAppender::getFrom() const
 {
-	return from;
+	return _priv->from;
 }
 
 void SMTPAppender::setFrom(const LogString& newVal)
 {
-	from = newVal;
+	_priv->from = newVal;
 }
 
 
 LogString SMTPAppender::getSubject() const
 {
-	return subject;
+	return _priv->subject;
 }
 
 void SMTPAppender::setSubject(const LogString& newVal)
 {
-	subject = newVal;
+	_priv->subject = newVal;
 }
 
 LogString SMTPAppender::getSMTPHost() const
 {
-	return smtpHost;
+	return _priv->smtpHost;
 }
 
 void SMTPAppender::setSMTPHost(const LogString& newVal)
 {
-	smtpHost = newVal;
+	_priv->smtpHost = newVal;
 }
 
 int SMTPAppender::getSMTPPort() const
 {
-	return smtpPort;
+	return _priv->smtpPort;
 }
 
 void SMTPAppender::setSMTPPort(int newVal)
 {
-	smtpPort = newVal;
+	_priv->smtpPort = newVal;
 }
 
 bool SMTPAppender::getLocationInfo() const
 {
-	return locationInfo;
+	return _priv->locationInfo;
 }
 
 void SMTPAppender::setLocationInfo(bool newVal)
 {
-	locationInfo = newVal;
+	_priv->locationInfo = newVal;
 }
 
 LogString SMTPAppender::getSMTPUsername() const
 {
-	return smtpUsername;
+	return _priv->smtpUsername;
 }
 
 void SMTPAppender::setSMTPUsername(const LogString& newVal)
 {
-	smtpUsername = newVal;
+	_priv->smtpUsername = newVal;
 }
 
 LogString SMTPAppender::getSMTPPassword() const
 {
-	return smtpPassword;
+	return _priv->smtpPassword;
 }
 
 void SMTPAppender::setSMTPPassword(const LogString& newVal)
 {
-	smtpPassword = newVal;
+	_priv->smtpPassword = newVal;
 }
 
 
@@ -564,40 +596,40 @@ void SMTPAppender::activateOptions(Pool& p)
 {
 	bool activate = true;
 
-	if (layout == 0)
+	if (_priv->layout == 0)
 	{
-		errorHandler->error(LOG4CXX_STR("No layout set for appender named [") + name + LOG4CXX_STR("]."));
+		_priv->errorHandler->error(LOG4CXX_STR("No layout set for appender named [") + _priv->name + LOG4CXX_STR("]."));
 		activate = false;
 	}
 
-	if (evaluator == 0)
+	if (_priv->evaluator == 0)
 	{
-		errorHandler->error(LOG4CXX_STR("No TriggeringEventEvaluator is set for appender [") +
-			name + LOG4CXX_STR("]."));
+		_priv->errorHandler->error(LOG4CXX_STR("No TriggeringEventEvaluator is set for appender [") +
+			_priv->name + LOG4CXX_STR("]."));
 		activate = false;
 	}
 
-	if (smtpHost.empty())
+	if (_priv->smtpHost.empty())
 	{
-		errorHandler->error(LOG4CXX_STR("No smtpHost is set for appender [") +
-			name + LOG4CXX_STR("]."));
+		_priv->errorHandler->error(LOG4CXX_STR("No smtpHost is set for appender [") +
+			_priv->name + LOG4CXX_STR("]."));
 		activate = false;
 	}
 
-	if (to.empty() && cc.empty() && bcc.empty())
+	if (_priv->to.empty() && _priv->cc.empty() && _priv->bcc.empty())
 	{
-		errorHandler->error(LOG4CXX_STR("No recipient address is set for appender [") +
-			name + LOG4CXX_STR("]."));
+		_priv->errorHandler->error(LOG4CXX_STR("No recipient address is set for appender [") +
+			_priv->name + LOG4CXX_STR("]."));
 		activate = false;
 	}
 
-	activate &= asciiCheck(to, LOG4CXX_STR("to"));
-	activate &= asciiCheck(cc, LOG4CXX_STR("cc"));
-	activate &= asciiCheck(bcc, LOG4CXX_STR("bcc"));
-	activate &= asciiCheck(from, LOG4CXX_STR("from"));
+	activate &= asciiCheck(_priv->to, LOG4CXX_STR("to"));
+	activate &= asciiCheck(_priv->cc, LOG4CXX_STR("cc"));
+	activate &= asciiCheck(_priv->bcc, LOG4CXX_STR("bcc"));
+	activate &= asciiCheck(_priv->from, LOG4CXX_STR("from"));
 
 #if !LOG4CXX_HAVE_LIBESMTP
-	errorHandler->error(LOG4CXX_STR("log4cxx built without SMTP support."));
+	_priv->errorHandler->error(LOG4CXX_STR("log4cxx built without SMTP support."));
 	activate = false;
 #endif
 
@@ -624,9 +656,9 @@ void SMTPAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	// Get a copy of this thread's MDC.
 	event->getMDCCopy();
 
-	cb.add(event);
+	_priv->cb.add(event);
 
-	if (evaluator->isTriggeringEvent(event))
+	if (_priv->evaluator->isTriggeringEvent(event))
 	{
 		sendBuffer(p);
 	}
@@ -671,37 +703,37 @@ bool SMTPAppender::checkEntryConditions()
 
 void SMTPAppender::close()
 {
-	this->closed = true;
+	_priv->closed = true;
 }
 
 LogString SMTPAppender::getTo() const
 {
-	return to;
+	return _priv->to;
 }
 
 void SMTPAppender::setTo(const LogString& addressStr)
 {
-	to = addressStr;
+	_priv->to = addressStr;
 }
 
 LogString SMTPAppender::getCc() const
 {
-	return cc;
+	return _priv->cc;
 }
 
 void SMTPAppender::setCc(const LogString& addressStr)
 {
-	cc = addressStr;
+	_priv->cc = addressStr;
 }
 
 LogString SMTPAppender::getBcc() const
 {
-	return bcc;
+	return _priv->bcc;
 }
 
 void SMTPAppender::setBcc(const LogString& addressStr)
 {
-	bcc = addressStr;
+	_priv->bcc = addressStr;
 }
 
 /**
@@ -749,17 +781,17 @@ Returns value of the <b>EvaluatorClass</b> option.
 */
 LogString SMTPAppender::getEvaluatorClass()
 {
-	return evaluator == 0 ? LogString() : evaluator->getClass().getName();
+	return _priv->evaluator == 0 ? LogString() : _priv->evaluator->getClass().getName();
 }
 
 log4cxx::spi::TriggeringEventEvaluatorPtr SMTPAppender::getEvaluator() const
 {
-	return evaluator;
+	return _priv->evaluator;
 }
 
 void SMTPAppender::setEvaluator(log4cxx::spi::TriggeringEventEvaluatorPtr& trigger)
 {
-	evaluator = trigger;
+	_priv->evaluator = trigger;
 }
 
 /**
@@ -771,8 +803,8 @@ buffer. By default the size of the cyclic buffer is 512 events.
 */
 void SMTPAppender::setBufferSize(int sz)
 {
-	this->bufferSize = sz;
-	cb.resize(sz);
+	_priv->bufferSize = sz;
+	_priv->cb.resize(sz);
 }
 
 /**
@@ -785,6 +817,9 @@ for the SMTPAppender.
 void SMTPAppender::setEvaluatorClass(const LogString& value)
 {
 	ObjectPtr obj = ObjectPtr(Loader::loadClass(value).newInstance());
-	evaluator = log4cxx::cast<TriggeringEventEvaluator>(obj);
+	_priv->evaluator = log4cxx::cast<TriggeringEventEvaluator>(obj);
 }
 
+int SMTPAppender::getBufferSize() const{
+
+}
diff --git a/src/main/cpp/socketappender.cpp b/src/main/cpp/socketappender.cpp
index 57f8ade..d2d987c 100644
--- a/src/main/cpp/socketappender.cpp
+++ b/src/main/cpp/socketappender.cpp
@@ -78,53 +78,53 @@ int SocketAppender::getDefaultPort() const
 
 void SocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+//	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
 
-	SocketOutputStreamPtr sock = SocketOutputStreamPtr(new SocketOutputStream(socket));
-	oos = ObjectOutputStreamPtr(new ObjectOutputStream(sock, p));
+//	SocketOutputStreamPtr sock = SocketOutputStreamPtr(new SocketOutputStream(socket));
+//	oos = ObjectOutputStreamPtr(new ObjectOutputStream(sock, p));
 }
 
 void SocketAppender::cleanUp(Pool& p)
 {
-	if (oos == 0)
-	{
-		return;
-	}
-
-	try
-	{
-		oos->close(p);
-		oos = 0;
-	}
-	catch (std::exception&)
-	{}
+//	if (oos == 0)
+//	{
+//		return;
+//	}
+
+//	try
+//	{
+//		oos->close(p);
+//		oos = 0;
+//	}
+//	catch (std::exception&)
+//	{}
 }
 
 void SocketAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p)
 {
-	if (oos == 0)
-	{
-		return;
-	}
-
-	LogString ndcVal;
-	event->getNDC(ndcVal);
-	event->getThreadName();
-	event->getMDCCopy();
-
-	try
-	{
-		event->write(*oos, p);
-		oos->reset(p);
-	}
-	catch (std::exception& e)
-	{
-		oos = 0;
-		LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
-
-		if (getReconnectionDelay() > 0)
-		{
-			fireConnector();
-		}
-	}
+//	if (oos == 0)
+//	{
+//		return;
+//	}
+
+//	LogString ndcVal;
+//	event->getNDC(ndcVal);
+//	event->getThreadName();
+//	event->getMDCCopy();
+
+//	try
+//	{
+//		event->write(*oos, p);
+//		oos->reset(p);
+//	}
+//	catch (std::exception& e)
+//	{
+//		oos = 0;
+//		LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
+
+//		if (getReconnectionDelay() > 0)
+//		{
+//			fireConnector();
+//		}
+//	}
 }
diff --git a/src/main/cpp/socketappenderskeleton.cpp b/src/main/cpp/socketappenderskeleton.cpp
index e3e1375..c1d6beb 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -27,41 +27,75 @@
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/helpers/bytearrayoutputstream.h>
 #include <log4cxx/helpers/threadutility.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
 #include <functional>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::net;
 
+struct SocketAppenderSkeletonPriv : public priv::AppenderSkeletonPrivate {
+	SocketAppenderSkeletonPriv(int defaultPort, int reconnectionDelay) :
+		AppenderSkeletonPrivate(),
+		remoteHost(),
+		address(),
+		port(defaultPort),
+		reconnectionDelay(reconnectionDelay),
+		locationInfo(false),
+		thread(){}
+
+	SocketAppenderSkeletonPriv(InetAddressPtr address, int defaultPort, int reconnectionDelay) :
+		AppenderSkeletonPrivate(),
+		remoteHost(),
+		address(address),
+		port(defaultPort),
+		reconnectionDelay(reconnectionDelay),
+		locationInfo(false),
+		thread(){}
+
+	SocketAppenderSkeletonPriv(const LogString& host, int port, int delay) :
+		AppenderSkeletonPrivate(),
+		remoteHost(host),
+		address(InetAddress::getByName(host)),
+		port(port),
+		reconnectionDelay(delay),
+		locationInfo(false),
+		thread(){}
+
+	/**
+	host name
+	*/
+	LogString remoteHost;
+
+	/**
+	IP address
+	*/
+	helpers::InetAddressPtr address;
+
+	int port;
+	int reconnectionDelay;
+	bool locationInfo;
+	std::thread thread;
+	std::condition_variable interrupt;
+	std::mutex interrupt_mutex;
+};
+
+#define _priv static_cast<SocketAppenderSkeletonPriv*>(m_priv.get())
+
 SocketAppenderSkeleton::SocketAppenderSkeleton(int defaultPort, int reconnectionDelay1)
-	:  remoteHost(),
-	   address(),
-	   port(defaultPort),
-	   reconnectionDelay(reconnectionDelay1),
-	   locationInfo(false),
-	   thread()
+	:  AppenderSkeleton (std::make_unique<SocketAppenderSkeletonPriv>(defaultPort, reconnectionDelay1))
 {
 }
 
 SocketAppenderSkeleton::SocketAppenderSkeleton(InetAddressPtr address1, int port1, int delay)
-	:
-	remoteHost(),
-	address(address1),
-	port(port1),
-	reconnectionDelay(delay),
-	locationInfo(false),
-	thread()
+	:AppenderSkeleton (std::make_unique<SocketAppenderSkeletonPriv>(address1, port1, delay))
+
 {
-	remoteHost = this->address->getHostName();
+	_priv->remoteHost = _priv->address->getHostName();
 }
 
 SocketAppenderSkeleton::SocketAppenderSkeleton(const LogString& host, int port1, int delay)
-	:   remoteHost(host),
-		address(InetAddress::getByName(host)),
-		port(port1),
-		reconnectionDelay(delay),
-		locationInfo(false),
-		thread()
+	:   AppenderSkeleton (std::make_unique<SocketAppenderSkeletonPriv>(host, port1, delay))
 {
 }
 
@@ -78,33 +112,33 @@ void SocketAppenderSkeleton::activateOptions(Pool& p)
 
 void SocketAppenderSkeleton::close()
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
-	if (closed)
+	if (_priv->closed)
 	{
 		return;
 	}
 
-	closed = true;
-	cleanUp(pool);
+	_priv->closed = true;
+	cleanUp(_priv->pool);
 
 	{
-		std::unique_lock<std::mutex> lock2(interrupt_mutex);
-		interrupt.notify_all();
+		std::unique_lock<std::mutex> lock2(_priv->interrupt_mutex);
+		_priv->interrupt.notify_all();
 	}
 
-	if ( thread.joinable() )
+	if ( _priv->thread.joinable() )
 	{
-		thread.join();
+		_priv->thread.join();
 	}
 }
 
 void SocketAppenderSkeleton::connect(Pool& p)
 {
-	if (address == 0)
+	if (_priv->address == 0)
 	{
 		LogLog::error(LogString(LOG4CXX_STR("No remote host is set for Appender named \"")) +
-			name + LOG4CXX_STR("\"."));
+			_priv->name + LOG4CXX_STR("\"."));
 	}
 	else
 	{
@@ -112,15 +146,15 @@ void SocketAppenderSkeleton::connect(Pool& p)
 
 		try
 		{
-			SocketPtr socket(new Socket(address, port));
+			SocketPtr socket(new Socket(_priv->address, _priv->port));
 			setSocket(socket, p);
 		}
 		catch (SocketException& e)
 		{
 			LogString msg = LOG4CXX_STR("Could not connect to remote log4cxx server at [")
-				+ address->getHostName() + LOG4CXX_STR("].");
+				+ _priv->address->getHostName() + LOG4CXX_STR("].");
 
-			if (reconnectionDelay > 0)
+			if (_priv->reconnectionDelay > 0)
 			{
 				msg += LOG4CXX_STR(" We will try again later. ");
 			}
@@ -157,36 +191,36 @@ void SocketAppenderSkeleton::setOption(const LogString& option, const LogString&
 
 void SocketAppenderSkeleton::fireConnector()
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
-	if ( !thread.joinable() )
+	if ( !_priv->thread.joinable() )
 	{
 		LogLog::debug(LOG4CXX_STR("Connector thread not alive: starting monitor."));
 
-		thread = ThreadUtility::instance()->createThread( LOG4CXX_STR("SocketAppend"), &SocketAppenderSkeleton::monitor, this );
+		_priv->thread = ThreadUtility::instance()->createThread( LOG4CXX_STR("SocketAppend"), &SocketAppenderSkeleton::monitor, this );
 	}
 }
 
 void SocketAppenderSkeleton::monitor()
 {
 	SocketPtr socket;
-	bool isClosed = closed;
+	bool isClosed = _priv->closed;
 
 	while (!isClosed)
 	{
 		try
 		{
-			std::this_thread::sleep_for( std::chrono::milliseconds( reconnectionDelay ) );
+			std::this_thread::sleep_for( std::chrono::milliseconds( _priv->reconnectionDelay ) );
 
-			std::unique_lock<std::mutex> lock( interrupt_mutex );
-			interrupt.wait_for( lock, std::chrono::milliseconds( reconnectionDelay ),
+			std::unique_lock<std::mutex> lock( _priv->interrupt_mutex );
+			_priv->interrupt.wait_for( lock, std::chrono::milliseconds( _priv->reconnectionDelay ),
 				std::bind(&SocketAppenderSkeleton::is_closed, this) );
 
-			if (!closed)
+			if (!_priv->closed)
 			{
 				LogLog::debug(LogString(LOG4CXX_STR("Attempting connection to "))
-					+ address->getHostName());
-				socket = SocketPtr(new Socket(address, port));
+					+ _priv->address->getHostName());
+				socket = SocketPtr(new Socket(_priv->address, _priv->port));
 				Pool p;
 				setSocket(socket, p);
 				LogLog::debug(LOG4CXX_STR("Connection established. Exiting connector thread."));
@@ -202,7 +236,7 @@ void SocketAppenderSkeleton::monitor()
 		catch (ConnectException&)
 		{
 			LogLog::debug(LOG4CXX_STR("Remote host ")
-				+ address->getHostName()
+				+ _priv->address->getHostName()
 				+ LOG4CXX_STR(" refused connection."));
 		}
 		catch (IOException& e)
@@ -211,12 +245,12 @@ void SocketAppenderSkeleton::monitor()
 			log4cxx::helpers::Transcoder::decode(e.what(), exmsg);
 
 			LogLog::debug(((LogString) LOG4CXX_STR("Could not connect to "))
-				+ address->getHostName()
+				+ _priv->address->getHostName()
 				+ LOG4CXX_STR(". Exception is ")
 				+ exmsg);
 		}
 
-		isClosed = closed;
+		isClosed = _priv->closed;
 	}
 
 	LogLog::debug(LOG4CXX_STR("Exiting Connector.run() method."));
@@ -224,5 +258,46 @@ void SocketAppenderSkeleton::monitor()
 
 bool SocketAppenderSkeleton::is_closed()
 {
-	return closed;
+	return _priv->closed;
+}
+
+void SocketAppenderSkeleton::setRemoteHost(const LogString& host)
+{
+	_priv->address = helpers::InetAddress::getByName(host);
+	_priv->remoteHost.assign(host);
+}
+
+const LogString& SocketAppenderSkeleton::getRemoteHost() const
+{
+	return _priv->remoteHost;
+}
+
+void SocketAppenderSkeleton::setPort(int port1)
+{
+	_priv->port = port1;
+}
+
+int SocketAppenderSkeleton::getPort() const
+{
+	return _priv->port;
+}
+
+void SocketAppenderSkeleton::setLocationInfo(bool locationInfo1)
+{
+	_priv->locationInfo = locationInfo1;
+}
+
+bool SocketAppenderSkeleton::getLocationInfo() const
+{
+	return _priv->locationInfo;
+}
+
+void SocketAppenderSkeleton::setReconnectionDelay(int reconnectionDelay1)
+{
+	_priv->reconnectionDelay = reconnectionDelay1;
+}
+
+int SocketAppenderSkeleton::getReconnectionDelay() const
+{
+	return _priv->reconnectionDelay;
 }
diff --git a/src/main/cpp/sockethubappender.cpp b/src/main/cpp/sockethubappender.cpp
index 7d83a23..15ec6d1 100644
--- a/src/main/cpp/sockethubappender.cpp
+++ b/src/main/cpp/sockethubappender.cpp
@@ -31,6 +31,7 @@
 #include <log4cxx/helpers/socketoutputstream.h>
 #include <log4cxx/helpers/exception.h>
 #include <log4cxx/helpers/threadutility.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
@@ -42,18 +43,34 @@ IMPLEMENT_LOG4CXX_OBJECT(SocketHubAppender)
 
 int SocketHubAppender::DEFAULT_PORT = 4560;
 
+struct SocketHubAppenderPriv : public priv::AppenderSkeletonPrivate{
+	SocketHubAppenderPriv(int port) :
+		AppenderSkeletonPrivate(),
+		port(port),
+		streams(),
+		locationInfo(false),
+		thread(){}
+
+	int port;
+	ObjectOutputStreamList streams;
+	bool locationInfo;
+	std::thread thread;
+};
+
+#define _priv static_cast<SocketHubAppenderPriv*>(m_priv.get())
+
 SocketHubAppender::~SocketHubAppender()
 {
 	finalize();
 }
 
 SocketHubAppender::SocketHubAppender()
-	: port(DEFAULT_PORT), streams(), locationInfo(false), thread()
+	:AppenderSkeleton (std::make_unique<SocketHubAppenderPriv>(SocketHubAppender::DEFAULT_PORT))
 {
 }
 
 SocketHubAppender::SocketHubAppender(int port1)
-	: port(port1), streams(), locationInfo(false), thread()
+	: AppenderSkeleton (std::make_unique<SocketHubAppenderPriv>(port1))
 {
 	startServer();
 }
@@ -84,14 +101,14 @@ void SocketHubAppender::setOption(const LogString& option,
 void SocketHubAppender::close()
 {
 	{
-		std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+		std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
-		if (closed)
+		if (_priv->closed)
 		{
 			return;
 		}
 
-		closed = true;
+		_priv->closed = true;
 	}
 
 	LogLog::debug(LOG4CXX_STR("closing SocketHubAppender ") + getName());
@@ -99,24 +116,24 @@ void SocketHubAppender::close()
 	//
 	//  wait until the server thread completes
 	//
-	if ( thread.joinable() )
+	if ( _priv->thread.joinable() )
 	{
-		thread.join();
+		_priv->thread.join();
 	}
 
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 	// close all of the connections
 	LogLog::debug(LOG4CXX_STR("closing client connections"));
 
-	for (std::vector<helpers::ObjectOutputStreamPtr>::iterator iter = streams.begin();
-		iter != streams.end();
+	for (std::vector<helpers::ObjectOutputStreamPtr>::iterator iter = _priv->streams.begin();
+		iter != _priv->streams.end();
 		iter++)
 	{
 		if ( (*iter) != NULL)
 		{
 			try
 			{
-				(*iter)->close(pool);
+				(*iter)->close(_priv->pool);
 			}
 			catch (SocketException& e)
 			{
@@ -125,7 +142,7 @@ void SocketHubAppender::close()
 		}
 	}
 
-	streams.erase(streams.begin(), streams.end());
+	_priv->streams.erase(_priv->streams.begin(), _priv->streams.end());
 
 
 	LogLog::debug(LOG4CXX_STR("SocketHubAppender ")
@@ -136,7 +153,7 @@ void SocketHubAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 {
 
 	// if no open connections, exit now
-	if (streams.empty())
+	if (_priv->streams.empty())
 	{
 		return;
 	}
@@ -149,8 +166,8 @@ void SocketHubAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 
 	// loop through the current set of open connections, appending the event to each
-	std::vector<ObjectOutputStreamPtr>::iterator it = streams.begin();
-	std::vector<ObjectOutputStreamPtr>::iterator itEnd = streams.end();
+	std::vector<ObjectOutputStreamPtr>::iterator it = _priv->streams.begin();
+	std::vector<ObjectOutputStreamPtr>::iterator itEnd = _priv->streams.end();
 
 	while (it != itEnd)
 	{
@@ -169,8 +186,8 @@ void SocketHubAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 		catch (std::exception& e)
 		{
 			// there was an io exception so just drop the connection
-			it = streams.erase(it);
-			itEnd = streams.end();
+			it = _priv->streams.erase(it);
+			itEnd = _priv->streams.end();
 			LogLog::debug(LOG4CXX_STR("dropped connection"), e);
 		}
 	}
@@ -178,7 +195,7 @@ void SocketHubAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 void SocketHubAppender::startServer()
 {
-	thread = ThreadUtility::instance()->createThread( LOG4CXX_STR("SocketHub"), &SocketHubAppender::monitor, this );
+	_priv->thread = ThreadUtility::instance()->createThread( LOG4CXX_STR("SocketHub"), &SocketHubAppender::monitor, this );
 }
 
 void SocketHubAppender::monitor()
@@ -187,7 +204,7 @@ void SocketHubAppender::monitor()
 
 	try
 	{
-		serverSocket = new ServerSocket(port);
+		serverSocket = new ServerSocket(_priv->port);
 		serverSocket->setSoTimeout(1000);
 	}
 	catch (SocketException& e)
@@ -197,7 +214,7 @@ void SocketHubAppender::monitor()
 		return;
 	}
 
-	bool stopRunning = closed;
+	bool stopRunning = _priv->closed;
 
 	while (!stopRunning)
 	{
@@ -234,11 +251,11 @@ void SocketHubAppender::monitor()
 					+ LOG4CXX_STR(")"));
 
 				// add it to the oosList.
-				std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+				std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 				OutputStreamPtr os(new SocketOutputStream(socket));
 				Pool p;
 				ObjectOutputStreamPtr oos(new ObjectOutputStream(os, p));
-				streams.push_back(oos);
+				_priv->streams.push_back(oos);
 			}
 			catch (IOException& e)
 			{
@@ -246,8 +263,28 @@ void SocketHubAppender::monitor()
 			}
 		}
 
-		stopRunning = (stopRunning || closed);
+		stopRunning = (stopRunning || _priv->closed);
 	}
 
 	delete serverSocket;
 }
+
+void SocketHubAppender::setPort(int port1)
+{
+	_priv->port = port1;
+}
+
+int SocketHubAppender::getPort() const
+{
+	return _priv->port;
+}
+
+void SocketHubAppender::setLocationInfo(bool locationInfo1)
+{
+	_priv->locationInfo = locationInfo1;
+}
+
+bool SocketHubAppender::getLocationInfo() const
+{
+	return _priv->locationInfo;
+}
diff --git a/src/main/cpp/syslogappender.cpp b/src/main/cpp/syslogappender.cpp
index 99d91f6..527d855 100644
--- a/src/main/cpp/syslogappender.cpp
+++ b/src/main/cpp/syslogappender.cpp
@@ -26,36 +26,8 @@
 #if !defined(LOG4CXX)
 	#define LOG4CXX 1
 #endif
-#include <log4cxx/private/log4cxx_private.h>
 #include <apr_strings.h>
-
-#if LOG4CXX_HAVE_SYSLOG
-	#include <syslog.h>
-#else
-	/* facility codes */
-	#define   LOG_KERN (0<<3)   /* kernel messages */
-	#define   LOG_USER (1<<3)   /* random user-level messages */
-	#define   LOG_MAIL (2<<3)   /* mail system */
-	#define   LOG_DAEMON  (3<<3)   /* system daemons */
-	#define   LOG_AUTH (4<<3)   /* security/authorization messages */
-	#define   LOG_SYSLOG  (5<<3)   /* messages generated internally by syslogd */
-	#define   LOG_LPR     (6<<3)   /* line printer subsystem */
-	#define   LOG_NEWS (7<<3)   /* network news subsystem */
-	#define   LOG_UUCP (8<<3)   /* UUCP subsystem */
-	#define   LOG_CRON (9<<3)   /* clock daemon */
-	#define   LOG_AUTHPRIV   (10<<3)  /* security/authorization messages (private) */
-	#define   LOG_FTP     (11<<3)  /* ftp daemon */
-
-	/* other codes through 15 reserved for system use */
-	#define   LOG_LOCAL0  (16<<3)  /* reserved for local use */
-	#define   LOG_LOCAL1  (17<<3)  /* reserved for local use */
-	#define   LOG_LOCAL2  (18<<3)  /* reserved for local use */
-	#define   LOG_LOCAL3  (19<<3)  /* reserved for local use */
-	#define   LOG_LOCAL4  (20<<3)  /* reserved for local use */
-	#define   LOG_LOCAL5  (21<<3)  /* reserved for local use */
-	#define   LOG_LOCAL6  (22<<3)  /* reserved for local use */
-	#define   LOG_LOCAL7  (23<<3)  /* reserved for local use */
-#endif
+#include <log4cxx/private/syslogappender_priv.h>
 
 #define LOG_UNDEF -1
 
@@ -65,8 +37,10 @@ using namespace log4cxx::net;
 
 IMPLEMENT_LOG4CXX_OBJECT(SyslogAppender)
 
+#define _priv static_cast<priv::SyslogAppenderPriv*>(m_priv.get())
+
 SyslogAppender::SyslogAppender()
-	: syslogFacility(LOG_USER), facilityPrinting(false), sw(0), maxMessageLength(1024)
+	: AppenderSkeleton (std::make_unique<priv::SyslogAppenderPriv>())
 {
 	this->initSyslogFacilityStr();
 
@@ -74,17 +48,15 @@ SyslogAppender::SyslogAppender()
 
 SyslogAppender::SyslogAppender(const LayoutPtr& layout1,
 	int syslogFacility1)
-	: syslogFacility(syslogFacility1), facilityPrinting(false), sw(0), maxMessageLength(1024)
+	: AppenderSkeleton (std::make_unique<priv::SyslogAppenderPriv>(layout1, syslogFacility1))
 {
-	this->layout = layout1;
 	this->initSyslogFacilityStr();
 }
 
 SyslogAppender::SyslogAppender(const LayoutPtr& layout1,
 	const LogString& syslogHost1, int syslogFacility1)
-	: syslogFacility(syslogFacility1), facilityPrinting(false), sw(0), maxMessageLength(1024)
+	: AppenderSkeleton (std::make_unique<priv::SyslogAppenderPriv>(layout1, syslogHost1, syslogFacility1))
 {
-	this->layout = layout1;
 	this->initSyslogFacilityStr();
 	setSyslogHost(syslogHost1);
 }
@@ -97,32 +69,31 @@ SyslogAppender::~SyslogAppender()
 /** Release any resources held by this SyslogAppender.*/
 void SyslogAppender::close()
 {
-	closed = true;
+	_priv->closed = true;
 
-	if (sw != 0)
+	if (_priv->sw)
 	{
-		delete sw;
-		sw = 0;
+		_priv->sw = nullptr;
 	}
 }
 
 void SyslogAppender::initSyslogFacilityStr()
 {
-	facilityStr = getFacilityString(this->syslogFacility);
+	_priv->facilityStr = getFacilityString(_priv->syslogFacility);
 
-	if (facilityStr.empty())
+	if (_priv->facilityStr.empty())
 	{
 		Pool p;
 		LogString msg(LOG4CXX_STR("\""));
-		StringHelper::toString(syslogFacility, p, msg);
+		StringHelper::toString(_priv->syslogFacility, p, msg);
 		msg.append(LOG4CXX_STR("\" is an unknown syslog facility. Defaulting to \"USER\"."));
 		LogLog::error(msg);
-		this->syslogFacility = LOG_USER;
-		facilityStr = LOG4CXX_STR("user:");
+		_priv->syslogFacility = LOG_USER;
+		_priv->facilityStr = LOG4CXX_STR("user:");
 	}
 	else
 	{
-		facilityStr += LOG4CXX_STR(":");
+		_priv->facilityStr += LOG4CXX_STR(":");
 	}
 }
 
@@ -309,7 +280,7 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 
 	LogString msg;
 	std::string encoded;
-	layout->format(msg, event, p);
+	_priv->layout->format(msg, event, p);
 
 	Transcoder::encode(msg, encoded);
 
@@ -320,13 +291,13 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	// to indicate how far through the message we are
 	std::vector<LogString> packets;
 
-	if ( msg.size() > maxMessageLength )
+	if ( msg.size() > _priv->maxMessageLength )
 	{
 		LogString::iterator start = msg.begin();
 
 		while ( start != msg.end() )
 		{
-			LogString::iterator end = start + maxMessageLength - 12;
+			LogString::iterator end = start + _priv->maxMessageLength - 12;
 
 			if ( end > msg.end() )
 			{
@@ -359,14 +330,14 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 	// if it is available
 #if LOG4CXX_HAVE_SYSLOG
 
-	if (sw == 0)
+	if (_priv->sw == 0)
 	{
 		for ( std::vector<LogString>::iterator it = packets.begin();
 			it != packets.end();
 			it++ )
 		{
 			// use of "%s" to avoid a security hole
-			::syslog(syslogFacility | event->getLevel()->getSyslogEquivalent(),
+			::syslog(_priv->syslogFacility | event->getLevel()->getSyslogEquivalent(),
 				"%s", it->c_str());
 		}
 
@@ -376,10 +347,10 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 #endif
 
 	// We must not attempt to append if sw is null.
-	if (sw == 0)
+	if (_priv->sw == 0)
 	{
-		errorHandler->error(LOG4CXX_STR("No syslog host is set for SyslogAppedender named \"") +
-			this->name + LOG4CXX_STR("\"."));
+		_priv->errorHandler->error(LOG4CXX_STR("No syslog host is set for SyslogAppedender named \"") +
+			_priv->name + LOG4CXX_STR("\"."));
 		return;
 	}
 
@@ -388,16 +359,16 @@ void SyslogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 		it++ )
 	{
 		LogString sbuf(1, 0x3C /* '<' */);
-		StringHelper::toString((syslogFacility | event->getLevel()->getSyslogEquivalent()), p, sbuf);
+		StringHelper::toString((_priv->syslogFacility | event->getLevel()->getSyslogEquivalent()), p, sbuf);
 		sbuf.append(1, (logchar) 0x3E /* '>' */);
 
-		if (facilityPrinting)
+		if (_priv->facilityPrinting)
 		{
-			sbuf.append(facilityStr);
+			sbuf.append(_priv->facilityStr);
 		}
 
 		sbuf.append(*it);
-		sw->write(sbuf);
+		_priv->sw->write(sbuf);
 	}
 }
 
@@ -427,10 +398,9 @@ void SyslogAppender::setOption(const LogString& option, const LogString& value)
 
 void SyslogAppender::setSyslogHost(const LogString& syslogHost1)
 {
-	if (this->sw != 0)
+	if (_priv->sw != 0)
 	{
-		delete this->sw;
-		this->sw = 0;
+		_priv->sw = nullptr;
 	}
 
 	LogString slHost = syslogHost1;
@@ -455,15 +425,15 @@ void SyslogAppender::setSyslogHost(const LogString& syslogHost1)
 #endif
 		if (slHostPort >= 0)
 		{
-			this->sw = new SyslogWriter(slHost, slHostPort);
+			_priv->sw = std::make_unique<SyslogWriter>(slHost, slHostPort);
 		}
 		else
 		{
-			this->sw = new SyslogWriter(slHost);
+			_priv->sw = std::make_unique<SyslogWriter>(slHost);
 		}
 
-	this->syslogHost = slHost;
-	this->syslogHostPort = slHostPort;
+	_priv->syslogHost = slHost;
+	_priv->syslogHostPort = slHostPort;
 }
 
 
@@ -474,15 +444,45 @@ void SyslogAppender::setFacility(const LogString& facilityName)
 		return;
 	}
 
-	syslogFacility = getFacility(facilityName);
+	_priv->syslogFacility = getFacility(facilityName);
 
-	if (syslogFacility == LOG_UNDEF)
+	if (_priv->syslogFacility == LOG_UNDEF)
 	{
 		LogLog::error(LOG4CXX_STR("[") + facilityName +
 			LOG4CXX_STR("] is an unknown syslog facility. Defaulting to [USER]."));
-		syslogFacility = LOG_USER;
+		_priv->syslogFacility = LOG_USER;
 	}
 
 	this->initSyslogFacilityStr();
 }
 
+const LogString& SyslogAppender::getSyslogHost() const
+{
+	return _priv->syslogHost;
+}
+
+LogString SyslogAppender::getFacility() const
+{
+	return getFacilityString(_priv->syslogFacility);
+}
+
+void SyslogAppender::setFacilityPrinting(bool facilityPrinting1)
+{
+	_priv->facilityPrinting = facilityPrinting1;
+}
+
+bool SyslogAppender::getFacilityPrinting() const
+{
+	return _priv->facilityPrinting;
+}
+
+void SyslogAppender::setMaxMessageLength(int maxMessageLength1)
+{
+	_priv->maxMessageLength = maxMessageLength1;
+}
+
+int SyslogAppender::getMaxMessageLength() const
+{
+	return _priv->maxMessageLength;
+}
+
diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp
index 9087242..8071937 100644
--- a/src/main/cpp/telnetappender.cpp
+++ b/src/main/cpp/telnetappender.cpp
@@ -25,6 +25,7 @@
 #include <log4cxx/helpers/charsetencoder.h>
 #include <log4cxx/helpers/bytebuffer.h>
 #include <log4cxx/helpers/threadutility.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
@@ -33,6 +34,26 @@ using namespace log4cxx::net;
 
 IMPLEMENT_LOG4CXX_OBJECT(TelnetAppender)
 
+struct TelnetAppenderPriv : public priv::AppenderSkeletonPrivate{
+	TelnetAppenderPriv( int port, int maxConnections ) : AppenderSkeletonPrivate(),
+		port(port),
+		connections(maxConnections),
+		encoding(LOG4CXX_STR("UTF-8")),
+		encoder(CharsetEncoder::getUTF8Encoder()),
+		sh(),
+		activeConnections(0){}
+
+	int port;
+	ConnectionList connections;
+	LogString encoding;
+	log4cxx::helpers::CharsetEncoderPtr encoder;
+	std::unique_ptr<helpers::ServerSocket> serverSocket;
+	std::thread sh;
+	size_t activeConnections;
+};
+
+#define _priv static_cast<TelnetAppenderPriv*>(m_priv.get())
+
 /** The default telnet server port */
 const int TelnetAppender::DEFAULT_PORT = 23;
 
@@ -40,29 +61,24 @@ const int TelnetAppender::DEFAULT_PORT = 23;
 const int TelnetAppender::MAX_CONNECTIONS = 20;
 
 TelnetAppender::TelnetAppender()
-	: port(DEFAULT_PORT), connections(MAX_CONNECTIONS),
-	  encoding(LOG4CXX_STR("UTF-8")),
-	  encoder(CharsetEncoder::getUTF8Encoder()),
-	  serverSocket(NULL), sh()
+	: AppenderSkeleton (std::make_unique<TelnetAppenderPriv>(DEFAULT_PORT,MAX_CONNECTIONS))
 {
-	activeConnections = 0;
 }
 
 TelnetAppender::~TelnetAppender()
 {
 	finalize();
-	delete serverSocket;
 }
 
 void TelnetAppender::activateOptions(Pool& /* p */)
 {
-	if (serverSocket == NULL)
+	if (_priv->serverSocket == NULL)
 	{
-		serverSocket = new ServerSocket(port);
-		serverSocket->setSoTimeout(1000);
+		_priv->serverSocket = std::make_unique<ServerSocket>(_priv->port);
+		_priv->serverSocket->setSoTimeout(1000);
 	}
 
-	sh = ThreadUtility::instance()->createThread( LOG4CXX_STR("TelnetAppender"), &TelnetAppender::acceptConnections, this );
+	_priv->sh = ThreadUtility::instance()->createThread( LOG4CXX_STR("TelnetAppender"), &TelnetAppender::acceptConnections, this );
 }
 
 void TelnetAppender::setOption(const LogString& option,
@@ -84,33 +100,33 @@ void TelnetAppender::setOption(const LogString& option,
 
 LogString TelnetAppender::getEncoding() const
 {
-	log4cxx::shared_lock<log4cxx::shared_mutex> lock(mutex);
-	return encoding;
+	log4cxx::shared_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+	return _priv->encoding;
 }
 
 void TelnetAppender::setEncoding(const LogString& value)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	encoder = CharsetEncoder::getEncoder(value);
-	encoding = value;
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+	_priv->encoder = CharsetEncoder::getEncoder(value);
+	_priv->encoding = value;
 }
 
 
 void TelnetAppender::close()
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
-	if (closed)
+	if (_priv->closed)
 	{
 		return;
 	}
 
-	closed = true;
+	_priv->closed = true;
 
 	SocketPtr nullSocket;
 
-	for (ConnectionList::iterator iter = connections.begin();
-		iter != connections.end();
+	for (ConnectionList::iterator iter = _priv->connections.begin();
+		iter != _priv->connections.end();
 		iter++)
 	{
 		if (*iter != 0)
@@ -120,30 +136,30 @@ void TelnetAppender::close()
 		}
 	}
 
-	if (serverSocket != NULL)
+	if (_priv->serverSocket != NULL)
 	{
 		try
 		{
-			serverSocket->close();
+			_priv->serverSocket->close();
 		}
 		catch (Exception&)
 		{
 		}
 	}
 
-	if ( sh.joinable() )
+	if ( _priv->sh.joinable() )
 	{
-		sh.join();
+		_priv->sh.join();
 	}
 
-	activeConnections = 0;
+	_priv->activeConnections = 0;
 }
 
 
 void TelnetAppender::write(ByteBuffer& buf)
 {
-	for (ConnectionList::iterator iter = connections.begin();
-		iter != connections.end();
+	for (ConnectionList::iterator iter = _priv->connections.begin();
+		iter != _priv->connections.end();
 		iter++)
 	{
 		if (*iter != 0)
@@ -157,7 +173,7 @@ void TelnetAppender::write(ByteBuffer& buf)
 			{
 				// The client has closed the connection, remove it from our list:
 				*iter = 0;
-				activeConnections--;
+				_priv->activeConnections--;
 			}
 		}
 	}
@@ -173,7 +189,7 @@ void TelnetAppender::writeStatus(const SocketPtr& socket, const LogString& msg,
 
 	while (msgIter != msg.end())
 	{
-		encoder->encode(msg, msgIter, buf);
+		_priv->encoder->encode(msg, msgIter, buf);
 		buf.flip();
 		socket->write(buf);
 		buf.clear();
@@ -182,12 +198,12 @@ void TelnetAppender::writeStatus(const SocketPtr& socket, const LogString& msg,
 
 void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 {
-	size_t count = activeConnections;
+	size_t count = _priv->activeConnections;
 
 	if (count > 0)
 	{
 		LogString msg;
-		this->layout->format(msg, event, pool);
+		_priv->layout->format(msg, event, _priv->pool);
 		msg.append(LOG4CXX_STR("\r\n"));
 		size_t bytesSize = msg.size() * 2;
 		char* bytes = p.pstralloc(bytesSize);
@@ -195,11 +211,11 @@ void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 		LogString::const_iterator msgIter(msg.begin());
 		ByteBuffer buf(bytes, bytesSize);
 
-		log4cxx::shared_lock<log4cxx::shared_mutex> lock(mutex);
+		log4cxx::shared_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
 		while (msgIter != msg.end())
 		{
-			log4cxx_status_t stat = encoder->encode(msg, msgIter, buf);
+			log4cxx_status_t stat = _priv->encoder->encode(msg, msgIter, buf);
 			buf.flip();
 			write(buf);
 			buf.clear();
@@ -208,7 +224,7 @@ void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p)
 			{
 				LogString unrepresented(1, 0x3F /* '?' */);
 				LogString::const_iterator unrepresentedIter(unrepresented.begin());
-				stat = encoder->encode(unrepresented, unrepresentedIter, buf);
+				stat = _priv->encoder->encode(unrepresented, unrepresentedIter, buf);
 				buf.flip();
 				write(buf);
 				buf.clear();
@@ -226,8 +242,8 @@ void TelnetAppender::acceptConnections()
 	{
 		try
 		{
-			SocketPtr newClient = serverSocket->accept();
-			bool done = closed;
+			SocketPtr newClient = _priv->serverSocket->accept();
+			bool done = _priv->closed;
 
 			if (done)
 			{
@@ -238,9 +254,9 @@ void TelnetAppender::acceptConnections()
 				break;
 			}
 
-			size_t count = activeConnections;
+			size_t count = _priv->activeConnections;
 
-			if (count >= connections.size())
+			if (count >= _priv->connections.size())
 			{
 				Pool p;
 				writeStatus(newClient, LOG4CXX_STR("Too many connections.\r\n"), p);
@@ -251,16 +267,16 @@ void TelnetAppender::acceptConnections()
 				//
 				//   find unoccupied connection
 				//
-				std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+				std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
-				for (ConnectionList::iterator iter = connections.begin();
-					iter != connections.end();
+				for (ConnectionList::iterator iter = _priv->connections.begin();
+					iter != _priv->connections.end();
 					iter++)
 				{
 					if (*iter == NULL)
 					{
 						*iter = newClient;
-						activeConnections++;
+						_priv->activeConnections++;
 
 						break;
 					}
@@ -275,14 +291,14 @@ void TelnetAppender::acceptConnections()
 		}
 		catch (InterruptedIOException&)
 		{
-			if (closed)
+			if (_priv->closed)
 			{
 				break;
 			}
 		}
 		catch (Exception& e)
 		{
-			if (!closed)
+			if (!_priv->closed)
 			{
 				LogLog::error(LOG4CXX_STR("Encountered error while in SocketHandler loop."), e);
 			}
@@ -294,3 +310,11 @@ void TelnetAppender::acceptConnections()
 	}
 
 }
+
+int TelnetAppender::getPort() const{
+	return _priv->port;
+}
+
+void TelnetAppender::setPort(int port1){
+	_priv->port = port1;
+}
diff --git a/src/main/cpp/writerappender.cpp b/src/main/cpp/writerappender.cpp
index 57996f5..bbd4842 100644
--- a/src/main/cpp/writerappender.cpp
+++ b/src/main/cpp/writerappender.cpp
@@ -19,34 +19,40 @@
 #include <log4cxx/helpers/loglog.h>
 #include <log4cxx/layout.h>
 #include <log4cxx/helpers/stringhelper.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
+#include <log4cxx/private/writerappender_priv.h>
 #include <mutex>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+#define _priv static_cast<priv::WriterAppenderPriv*>(m_priv.get())
+
 IMPLEMENT_LOG4CXX_OBJECT(WriterAppender)
 
-WriterAppender::WriterAppender()
+WriterAppender::WriterAppender() :
+	AppenderSkeleton (std::make_unique<priv::WriterAppenderPriv>())
 {
-	immediateFlush = true;
 }
 
 WriterAppender::WriterAppender(const LayoutPtr& layout1,
 	log4cxx::helpers::WriterPtr& writer1)
-	: AppenderSkeleton(layout1), writer(writer1)
+	: AppenderSkeleton (std::make_unique<priv::WriterAppenderPriv>(layout1, writer1))
 {
 	Pool p;
-	immediateFlush = true;
 	activateOptions(p);
 }
 
 WriterAppender::WriterAppender(const LayoutPtr& layout1)
-	: AppenderSkeleton(layout1)
+	: AppenderSkeleton (std::make_unique<priv::WriterAppenderPriv>(layout1))
 {
-	immediateFlush = true;
 }
 
+WriterAppender::WriterAppender(std::unique_ptr<priv::WriterAppenderPriv> priv)
+	: AppenderSkeleton (std::move(priv)){
+
+}
 
 WriterAppender::~WriterAppender()
 {
@@ -57,19 +63,19 @@ void WriterAppender::activateOptions(Pool& p)
 {
 	int errors = 0;
 
-	if (layout == 0)
+	if (_priv->layout == 0)
 	{
-		errorHandler->error(
+		_priv->errorHandler->error(
 			((LogString) LOG4CXX_STR("No layout set for the appender named ["))
-			+ name + LOG4CXX_STR("]."));
+			+ _priv->name + LOG4CXX_STR("]."));
 		errors++;
 	}
 
-	if (writer == 0)
+	if (_priv->writer == 0)
 	{
-		errorHandler->error(
+		_priv->errorHandler->error(
 			((LogString) LOG4CXX_STR("No writer set for the appender named ["))
-			+ name + LOG4CXX_STR("]."));
+			+ _priv->name + LOG4CXX_STR("]."));
 		errors++;
 	}
 
@@ -103,7 +109,7 @@ bool WriterAppender::checkEntryConditions() const
 	static bool warnedClosed = false;
 	static bool warnedNoWriter = false;
 
-	if (closed)
+	if (_priv->closed)
 	{
 		if (!warnedClosed)
 		{
@@ -114,24 +120,24 @@ bool WriterAppender::checkEntryConditions() const
 		return false;
 	}
 
-	if (writer == 0)
+	if (_priv->writer == 0)
 	{
 		if (warnedNoWriter)
 		{
-			errorHandler->error(
+			_priv->errorHandler->error(
 				LogString(LOG4CXX_STR("No output stream or file set for the appender named [")) +
-				name + LOG4CXX_STR("]."));
+				_priv->name + LOG4CXX_STR("]."));
 			warnedNoWriter = true;
 		}
 
 		return false;
 	}
 
-	if (layout == 0)
+	if (_priv->layout == 0)
 	{
-		errorHandler->error(
+		_priv->errorHandler->error(
 			LogString(LOG4CXX_STR("No layout set for the appender named [")) +
-			name + LOG4CXX_STR("]."));
+			_priv->name + LOG4CXX_STR("]."));
 		return false;
 	}
 
@@ -151,14 +157,14 @@ bool WriterAppender::checkEntryConditions() const
    */
 void WriterAppender::close()
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 
-	if (closed)
+	if (_priv->closed)
 	{
 		return;
 	}
 
-	closed = true;
+	_priv->closed = true;
 	closeWriter();
 }
 
@@ -167,7 +173,7 @@ void WriterAppender::close()
  * */
 void WriterAppender::closeWriter()
 {
-	if (writer != NULL)
+	if (_priv->writer != NULL)
 	{
 		try
 		{
@@ -176,13 +182,13 @@ 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(pool);
-			writer->close(pool);
-			writer = 0;
+			writeFooter(_priv->pool);
+			_priv->writer->close(_priv->pool);
+			_priv->writer = 0;
 		}
 		catch (IOException& e)
 		{
-			LogLog::error(LogString(LOG4CXX_STR("Could not close writer for WriterAppender named ")) + name, e);
+			LogLog::error(LogString(LOG4CXX_STR("Could not close writer for WriterAppender named ")) + _priv->name, e);
 		}
 	}
 
@@ -230,26 +236,26 @@ WriterPtr WriterAppender::createWriter(OutputStreamPtr& os)
 
 LogString WriterAppender::getEncoding() const
 {
-	return encoding;
+	return _priv->encoding;
 }
 
 void WriterAppender::setEncoding(const LogString& enc)
 {
-	encoding = enc;
+	_priv->encoding = enc;
 }
 
 void WriterAppender::subAppend(const spi::LoggingEventPtr& event, Pool& p)
 {
 	LogString msg;
-	layout->format(msg, event, p);
+	_priv->layout->format(msg, event, p);
 
-	if (writer != NULL)
+	if (_priv->writer != NULL)
 	{
-		writer->write(msg, p);
+		_priv->writer->write(msg, p);
 
-		if (immediateFlush)
+		if (_priv->immediateFlush)
 		{
-			writer->flush(p);
+			_priv->writer->flush(p);
 		}
 	}
 }
@@ -257,34 +263,34 @@ void WriterAppender::subAppend(const spi::LoggingEventPtr& event, Pool& p)
 
 void WriterAppender::writeFooter(Pool& p)
 {
-	if (layout != NULL)
+	if (_priv->layout != NULL)
 	{
 		LogString foot;
-		layout->appendFooter(foot, p);
-		writer->write(foot, p);
+		_priv->layout->appendFooter(foot, p);
+		_priv->writer->write(foot, p);
 	}
 }
 
 void WriterAppender::writeHeader(Pool& p)
 {
-	if (layout != NULL)
+	if (_priv->layout != NULL)
 	{
 		LogString header;
-		layout->appendHeader(header, p);
-		writer->write(header, p);
+		_priv->layout->appendHeader(header, p);
+		_priv->writer->write(header, p);
 	}
 }
 
 
 void WriterAppender::setWriter(const WriterPtr& newWriter)
 {
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
 	setWriterInternal(newWriter);
 }
 
 void WriterAppender::setWriterInternal(const WriterPtr& newWriter)
 {
-	writer = newWriter;
+	_priv->writer = newWriter;
 }
 
 bool WriterAppender::requiresLayout() const
@@ -307,5 +313,9 @@ void WriterAppender::setOption(const LogString& option, const LogString& value)
 
 void WriterAppender::setImmediateFlush(bool value)
 {
-	immediateFlush = value;
+	_priv->immediateFlush = value;
+}
+
+bool WriterAppender::getImmediateFlush() const{
+	return _priv->immediateFlush;
 }
diff --git a/src/main/cpp/xmlsocketappender.cpp b/src/main/cpp/xmlsocketappender.cpp
index d5b9942..1b34573 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -26,6 +26,7 @@
 #include <log4cxx/helpers/transform.h>
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/helpers/socketoutputstream.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
@@ -34,6 +35,14 @@ using namespace log4cxx::xml;
 
 IMPLEMENT_LOG4CXX_OBJECT(XMLSocketAppender)
 
+struct XMLSocketAppenderPriv : public priv::AppenderSkeletonPrivate {
+	XMLSocketAppenderPriv() : AppenderSkeletonPrivate(){}
+
+	log4cxx::helpers::WriterPtr writer;
+};
+
+#define _priv static_cast<XMLSocketAppenderPriv*>(m_priv.get())
+
 // The default port number of remote logging server (4560)
 int XMLSocketAppender::DEFAULT_PORT                 = 4560;
 
@@ -45,13 +54,13 @@ const int XMLSocketAppender::MAX_EVENT_LEN          = 1024;
 XMLSocketAppender::XMLSocketAppender()
 	: SocketAppenderSkeleton(DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY)
 {
-	layout = XMLLayoutPtr(new XMLLayout());
+	_priv->layout = std::make_shared<XMLLayout>();
 }
 
 XMLSocketAppender::XMLSocketAppender(InetAddressPtr address1, int port1)
 	: SocketAppenderSkeleton(address1, port1, DEFAULT_RECONNECTION_DELAY)
 {
-	layout = XMLLayoutPtr(new XMLLayout());
+	_priv->layout = std::make_shared<XMLLayout>();
 	Pool p;
 	activateOptions(p);
 }
@@ -59,7 +68,7 @@ XMLSocketAppender::XMLSocketAppender(InetAddressPtr address1, int port1)
 XMLSocketAppender::XMLSocketAppender(const LogString& host, int port1)
 	: SocketAppenderSkeleton(host, port1, DEFAULT_RECONNECTION_DELAY)
 {
-	layout = XMLLayoutPtr(new XMLLayout());
+	_priv->layout = std::make_shared<XMLLayout>();
 	Pool p;
 	activateOptions(p);
 }
@@ -84,18 +93,18 @@ void XMLSocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p)
 {
 	OutputStreamPtr os(new SocketOutputStream(socket));
 	CharsetEncoderPtr charset(CharsetEncoder::getUTF8Encoder());
-	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-	writer = OutputStreamWriterPtr(new OutputStreamWriter(os, charset));
+	std::unique_lock<log4cxx::shared_mutex> lock(_priv->mutex);
+	_priv->writer = std::make_shared<OutputStreamWriter>(os, charset);
 }
 
 void XMLSocketAppender::cleanUp(Pool& p)
 {
-	if (writer != 0)
+	if (_priv->writer)
 	{
 		try
 		{
-			writer->close(p);
-			writer = 0;
+			_priv->writer->close(p);
+			_priv->writer = nullptr;
 		}
 		catch (std::exception&)
 		{
@@ -105,19 +114,19 @@ void XMLSocketAppender::cleanUp(Pool& p)
 
 void XMLSocketAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p)
 {
-	if (writer != 0)
+	if (_priv->writer)
 	{
 		LogString output;
-		layout->format(output, event, p);
+		_priv->layout->format(output, event, p);
 
 		try
 		{
-			writer->write(output, p);
-			writer->flush(p);
+			_priv->writer->write(output, p);
+			_priv->writer->flush(p);
 		}
 		catch (std::exception& e)
 		{
-			writer = 0;
+			_priv->writer = nullptr;
 			LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
 
 			if (getReconnectionDelay() > 0)
diff --git a/src/main/include/log4cxx/appender.h b/src/main/include/log4cxx/appender.h
index d3c3b76..6402c52 100644
--- a/src/main/include/log4cxx/appender.h
+++ b/src/main/include/log4cxx/appender.h
@@ -60,12 +60,10 @@ class LOG4CXX_EXPORT Appender :
 
 		virtual ~Appender() {}
 
-		void asdf();
-
 		/**
 		 Add a filter to the end of the filter list.
 		*/
-		virtual void addFilter(const spi::FilterPtr& newFilter) = 0;
+		virtual void addFilter(const spi::FilterPtr newFilter) = 0;
 
 		/**
 		 Returns the head Filter. The Filters are organized in a linked list
@@ -106,7 +104,7 @@ class LOG4CXX_EXPORT Appender :
 		/**
 		 Set the Layout for this appender.
 		*/
-		virtual void setLayout(const LayoutPtr& layout) = 0;
+		virtual void setLayout(const LayoutPtr layout) = 0;
 
 		/**
 		 Returns this appenders layout.
diff --git a/src/main/include/log4cxx/appenderskeleton.h b/src/main/include/log4cxx/appenderskeleton.h
index b89b09e..1076335 100644
--- a/src/main/include/log4cxx/appenderskeleton.h
+++ b/src/main/include/log4cxx/appenderskeleton.h
@@ -34,6 +34,11 @@
 
 namespace log4cxx
 {
+namespace priv
+{
+struct AppenderSkeletonPrivate;
+}
+
 /**
 *  Implementation base class for all appenders.
 *
@@ -45,36 +50,7 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 	public virtual helpers::Object
 {
 	protected:
-		/** The layout variable does not need to be set if the appender
-		implementation has its own layout. */
-		LayoutPtr layout;
-
-		/** Appenders are named. */
-		LogString name;
-
-		/**
-		There is no level threshold filtering by default.  */
-		LevelPtr threshold;
-
-		/**
-		It is assumed and enforced that errorHandler is never null.
-		*/
-		spi::ErrorHandlerPtr errorHandler;
-
-		/** The first filter in the filter chain. Set to <code>null</code>
-		initially. */
-		spi::FilterPtr headFilter;
-
-		/** The last filter in the filter chain. */
-		spi::FilterPtr tailFilter;
-
-		/**
-		Is this appender closed?
-		*/
-		bool closed;
-
-		log4cxx::helpers::Pool pool;
-		mutable log4cxx::shared_mutex mutex;
+		AppenderSkeleton( std::unique_ptr<priv::AppenderSkeletonPrivate> priv );
 
 		/**
 		Subclasses of <code>AppenderSkeleton</code> should implement this
@@ -95,6 +71,7 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 
 		AppenderSkeleton();
 		AppenderSkeleton(const LayoutPtr& layout);
+		virtual ~AppenderSkeleton();
 
 		/**
 		Finalize this appender by calling the derived class'
@@ -112,7 +89,7 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		/**
 		Add a filter to end of the filter list.
 		*/
-		void addFilter(const spi::FilterPtr& newFilter) ;
+		void addFilter(const spi::FilterPtr newFilter) ;
 
 	public:
 		/**
@@ -124,54 +101,36 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		Return the currently set spi::ErrorHandler for this
 		Appender.
 		*/
-		const spi::ErrorHandlerPtr& getErrorHandler() const
-		{
-			return errorHandler;
-		}
+		const spi::ErrorHandlerPtr getErrorHandler() const;
 
 		/**
 		Returns the head Filter.
 		*/
-		spi::FilterPtr getFilter() const
-		{
-			return headFilter;
-		}
+		spi::FilterPtr getFilter() const;
 
 		/**
 		Return the first filter in the filter chain for this
-		Appender. The return value may be <code>0</code> if no is
+		Appender. The return value may be <code>nullptr</code> if no is
 		filter is set.
 		*/
-		const spi::FilterPtr& getFirstFilter() const
-		{
-			return headFilter;
-		}
+		const spi::FilterPtr getFirstFilter() const;
 
 		/**
-		Returns the layout of this appender. The value may be 0.
+		Returns the layout of this appender. The value may be nullptr.
 		*/
-		LayoutPtr getLayout() const
-		{
-			return layout;
-		}
+		LayoutPtr getLayout() const;
 
 
 		/**
 		Returns the name of this Appender.
 		*/
-		LogString getName() const
-		{
-			return name;
-		}
+		LogString getName() const;
 
 		/**
 		Returns this appenders threshold level. See the #setThreshold
 		method for the meaning of this option.
 		*/
-		const LevelPtr& getThreshold() const
-		{
-			return threshold;
-		}
+		const LevelPtr getThreshold() const;
 
 		/**
 		Check whether the message level is below the appender's
@@ -199,18 +158,12 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		{@link net::SocketAppender SocketAppender} ignores the layout set
 		here.
 		*/
-		void setLayout(const LayoutPtr& layout1)
-		{
-			this->layout = layout1;
-		}
+		void setLayout(const LayoutPtr layout1);
 
 		/**
 		Set the name of this Appender.
 		*/
-		void setName(const LogString& name1)
-		{
-			this->name.assign(name1);
-		}
+		void setName(const LogString& name1);
 
 
 		/**
@@ -223,6 +176,9 @@ class LOG4CXX_EXPORT AppenderSkeleton :
 		*/
 		void setThreshold(const LevelPtr& threshold);
 
+protected:
+		std::unique_ptr<priv::AppenderSkeletonPrivate> m_priv;
+
 }; // class AppenderSkeleton
 }  // namespace log4cxx
 
diff --git a/src/main/include/log4cxx/asyncappender.h b/src/main/include/log4cxx/asyncappender.h
index d4a69ef..1f767b2 100644
--- a/src/main/include/log4cxx/asyncappender.h
+++ b/src/main/include/log4cxx/asyncappender.h
@@ -189,107 +189,6 @@ class LOG4CXX_EXPORT AsyncAppender :
 	private:
 		AsyncAppender(const AsyncAppender&);
 		AsyncAppender& operator=(const AsyncAppender&);
-		/**
-		 * The default buffer size is set to 128 events.
-		*/
-		enum { DEFAULT_BUFFER_SIZE = 128 };
-
-		/**
-		 * Event buffer.
-		*/
-#if defined(NON_BLOCKING)
-		boost::lockfree::queue<log4cxx::spi::LoggingEvent* > buffer;
-		std::atomic<size_t> discardedCount;
-#else
-		LoggingEventList buffer;
-#endif
-
-		/**
-		 *  Mutex used to guard access to buffer and discardMap.
-		 */
-		std::mutex bufferMutex;
-
-#if defined(NON_BLOCKING)
-		::log4cxx::helpers::Semaphore bufferNotFull;
-		::log4cxx::helpers::Semaphore bufferNotEmpty;
-#else
-		std::condition_variable bufferNotFull;
-		std::condition_variable bufferNotEmpty;
-#endif
-		class DiscardSummary
-		{
-			private:
-				/**
-				 * First event of the highest severity.
-				*/
-				::log4cxx::spi::LoggingEventPtr maxEvent;
-
-				/**
-				* Total count of messages discarded.
-				*/
-				int count;
-
-			public:
-				/**
-				 * Create new instance.
-				 *
-				 * @param event event, may not be null.
-				*/
-				DiscardSummary(const ::log4cxx::spi::LoggingEventPtr& event);
-				/** Copy constructor.  */
-				DiscardSummary(const DiscardSummary& src);
-				/** Assignment operator. */
-				DiscardSummary& operator=(const DiscardSummary& src);
-
-				/**
-				 * Add discarded event to summary.
-				 *
-				 * @param event event, may not be null.
-				*/
-				void add(const ::log4cxx::spi::LoggingEventPtr& event);
-
-				/**
-				 * Create event with summary information.
-				 *
-				 * @return new event.
-				 */
-				::log4cxx::spi::LoggingEventPtr createEvent(::log4cxx::helpers::Pool& p);
-
-				static
-				::log4cxx::spi::LoggingEventPtr createEvent(::log4cxx::helpers::Pool& p,
-					size_t discardedCount);
-		};
-
-		/**
-		  * Map of DiscardSummary objects keyed by logger name.
-		*/
-		typedef std::map<LogString, DiscardSummary> DiscardMap;
-		DiscardMap* discardMap;
-
-		/**
-		 * Buffer size.
-		*/
-		int bufferSize;
-
-		/**
-		 * Nested appenders.
-		*/
-		helpers::AppenderAttachableImplPtr appenders;
-
-		/**
-		 *  Dispatcher.
-		 */
-		std::thread dispatcher;
-
-		/**
-		 * Should location info be included in dispatched messages.
-		*/
-		bool locationInfo;
-
-		/**
-		 * Does appender block when buffer is full.
-		*/
-		bool blocking;
 
 		/**
 		 *  Dispatch routine.
diff --git a/src/main/include/log4cxx/consoleappender.h b/src/main/include/log4cxx/consoleappender.h
index 0c67c2c..31bfb17 100644
--- a/src/main/include/log4cxx/consoleappender.h
+++ b/src/main/include/log4cxx/consoleappender.h
@@ -35,9 +35,6 @@ namespace log4cxx
 */
 class LOG4CXX_EXPORT ConsoleAppender : public WriterAppender
 {
-	private:
-		LogString target;
-
 	public:
 		DECLARE_LOG4CXX_OBJECT(ConsoleAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
diff --git a/src/main/include/log4cxx/db/odbcappender.h b/src/main/include/log4cxx/db/odbcappender.h
index fdc144f..b16baaa 100644
--- a/src/main/include/log4cxx/db/odbcappender.h
+++ b/src/main/include/log4cxx/db/odbcappender.h
@@ -30,6 +30,7 @@
 #include <log4cxx/appenderskeleton.h>
 #include <log4cxx/spi/loggingevent.h>
 #include <list>
+#include <memory>
 
 namespace log4cxx
 {
@@ -97,59 +98,6 @@ sql option value.
 
 class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 {
-	protected:
-		/**
-		* URL of the DB for default connection handling
-		*/
-		LogString databaseURL;
-
-		/**
-		* User to connect as for default connection handling
-		*/
-		LogString databaseUser;
-
-		/**
-		* User to use for default connection handling
-		*/
-		LogString databasePassword;
-
-		typedef void* SQLHDBC;
-		typedef void* SQLHENV;
-		typedef void* SQLHANDLE;
-		typedef short SQLSMALLINT;
-
-		/**
-		* Connection used by default.  The connection is opened the first time it
-		* is needed and then held open until the appender is closed (usually at
-		* garbage collection).  This behavior is best modified by creating a
-		* sub-class and overriding the <code>getConnection</code> and
-		* <code>closeConnection</code> methods.
-		*/
-		SQLHDBC connection;
-		SQLHENV env;
-
-		/**
-		* Stores the string given to the pattern layout for conversion into a SQL
-		* statement, eg: insert into LogTable (Thread, File, Message) values
-		* ("%t", "%F", "%m")
-		*
-		* Be careful of quotes in your messages!
-		*
-		* Also see PatternLayout.
-		*/
-		LogString sqlStatement;
-
-		/**
-		* size of LoggingEvent buffer before writing to the database.
-		* Default is 1.
-		*/
-		size_t bufferSize;
-
-		/**
-		* ArrayList holding the buffer of Logging Events.
-		*/
-		std::list<spi::LoggingEventPtr> buffer;
-
 	public:
 		DECLARE_LOG4CXX_OBJECT(ODBCAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -157,6 +105,11 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 		LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton)
 		END_LOG4CXX_CAST_MAP()
 
+		typedef void* SQLHDBC;
+		typedef void* SQLHENV;
+		typedef void* SQLHANDLE;
+		typedef short SQLSMALLINT;
+
 		ODBCAppender();
 		virtual ~ODBCAppender();
 
@@ -247,56 +200,24 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
 		/**
 		* Returns pre-formated statement eg: insert into LogTable (msg) values ("%m")
 		*/
-		inline const LogString& getSql() const
-		{
-			return sqlStatement;
-		}
-
-
-		inline void setUser(const LogString& user)
-		{
-			databaseUser = user;
-		}
-
-
-		inline void setURL(const LogString& url)
-		{
-			databaseURL = url;
-		}
+		const LogString& getSql() const;
 
 
-		inline void setPassword(const LogString& password)
-		{
-			databasePassword = password;
-		}
+		void setUser(const LogString& user);
 
+		void setURL(const LogString& url);
 
-		inline void setBufferSize(size_t newBufferSize)
-		{
-			bufferSize = newBufferSize;
-		}
-
-		inline const LogString& getUser() const
-		{
-			return databaseUser;
-		}
+		void setPassword(const LogString& password);
 
+		void setBufferSize(size_t newBufferSize);
 
-		inline const LogString& getURL() const
-		{
-			return databaseURL;
-		}
+		const LogString& getUser() const;
 
+		const LogString& getURL() const;
 
-		inline const LogString& getPassword() const
-		{
-			return databasePassword;
-		}
+		const LogString& getPassword() const;
 
-		inline size_t getBufferSize() const
-		{
-			return bufferSize;
-		}
+		size_t getBufferSize() const;
 	private:
 		ODBCAppender(const ODBCAppender&);
 		ODBCAppender& operator=(const ODBCAppender&);
diff --git a/src/main/include/log4cxx/fileappender.h b/src/main/include/log4cxx/fileappender.h
index e5a2fbb..bca07da 100644
--- a/src/main/include/log4cxx/fileappender.h
+++ b/src/main/include/log4cxx/fileappender.h
@@ -35,6 +35,9 @@ namespace helpers
 {
 class Pool;
 }
+namespace priv{
+struct FileAppenderPriv;
+}
 
 /**
 *  FileAppender appends log events to a file.
@@ -45,28 +48,6 @@ class Pool;
 */
 class LOG4CXX_EXPORT FileAppender : public WriterAppender
 {
-	protected:
-		/** Append to or truncate the file? The default value for this
-		variable is <code>true</code>, meaning that by default a
-		<code>FileAppender</code> will append to an existing file and
-		not truncate it.
-		<p>This option is meaningful only if the FileAppender opens the
-		file.
-		*/
-		bool fileAppend;
-
-		/**
-		The name of the log file. */
-		LogString fileName;
-
-		/**
-		Do we do bufferedIO? */
-		bool bufferedIO;
-
-		/**
-		How big should the IO buffer be? Default is 8K. */
-		int bufferSize;
-
 	public:
 		DECLARE_LOG4CXX_OBJECT(FileAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -130,16 +111,10 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
 		/**
 		Returns the value of the <b>Append</b> option.
 		*/
-		inline bool getAppend() const
-		{
-			return fileAppend;
-		}
+		bool getAppend() const;
 
 		/** Returns the value of the <b>File</b> option. */
-		inline LogString getFile() const
-		{
-			return fileName;
-		}
+		LogString getFile() const;
 
 		/**
 		<p>Sets and <i>opens</i> the file where the log output will
@@ -158,18 +133,12 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
 		loaded systems.
 
 		*/
-		inline bool getBufferedIO() const
-		{
-			return bufferedIO;
-		}
+		bool getBufferedIO() const;
 
 		/**
 		Get the size of the IO buffer.
 		*/
-		inline  int getBufferSize() const
-		{
-			return bufferSize;
-		}
+		int getBufferSize() const;
 
 		/**
 		The <b>Append</b> option takes a boolean value. It is set to
@@ -197,10 +166,7 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
 		/**
 		Set the size of the IO buffer.
 		*/
-		void setBufferSize(int bufferSize1)
-		{
-			this->bufferSize = bufferSize1;
-		}
+		void setBufferSize(int bufferSize1);
 
 		/**
 		 *   Replaces double backslashes with single backslashes
@@ -242,6 +208,8 @@ class LOG4CXX_EXPORT FileAppender : public WriterAppender
 	private:
 		FileAppender(const FileAppender&);
 		FileAppender& operator=(const FileAppender&);
+protected:
+		FileAppender(std::unique_ptr<priv::FileAppenderPriv> priv);
 
 }; // class FileAppender
 LOG4CXX_PTR_DEF(FileAppender);
diff --git a/src/main/include/log4cxx/filter/andfilter.h b/src/main/include/log4cxx/filter/andfilter.h
index e035540..03c43a4 100644
--- a/src/main/include/log4cxx/filter/andfilter.h
+++ b/src/main/include/log4cxx/filter/andfilter.h
@@ -25,6 +25,7 @@
 
 
 #include <log4cxx/spi/filter.h>
+#include <memory>
 
 namespace log4cxx
 {
@@ -78,13 +79,12 @@ namespace filter
 class LOG4CXX_EXPORT AndFilter: public log4cxx::spi::Filter
 {
 	private:
-		log4cxx::spi::FilterPtr headFilter;
-		log4cxx::spi::FilterPtr tailFilter;
-		bool acceptOnMatch;
+		struct priv_data;
+		std::unique_ptr<priv_data> m_priv;
+
 		AndFilter(const AndFilter&);
 		AndFilter& operator=(const AndFilter&);
 
-
 	public:
 		DECLARE_LOG4CXX_OBJECT(AndFilter)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -92,6 +92,7 @@ class LOG4CXX_EXPORT AndFilter: public log4cxx::spi::Filter
 		END_LOG4CXX_CAST_MAP()
 
 		AndFilter();
+		~AndFilter();
 
 		void addFilter(const log4cxx::spi::FilterPtr& filter);
 
diff --git a/src/main/include/log4cxx/helpers/appenderattachableimpl.h b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
index b80b5aa..f8aa46b 100644
--- a/src/main/include/log4cxx/helpers/appenderattachableimpl.h
+++ b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
@@ -46,8 +46,7 @@ class LOG4CXX_EXPORT AppenderAttachableImpl :
 	public virtual helpers::Object
 {
 	protected:
-		/** Array of appenders. */
-		AppenderList  appenderList;
+		AppenderList& appenderList();
 
 	public:
 		/**
@@ -56,6 +55,8 @@ class LOG4CXX_EXPORT AppenderAttachableImpl :
 		 */
 		AppenderAttachableImpl(Pool& pool);
 
+		~AppenderAttachableImpl();
+
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(AppenderAttachableImpl)
 		BEGIN_LOG4CXX_CAST_MAP()
 		LOG4CXX_CAST_ENTRY(AppenderAttachableImpl)
@@ -106,13 +107,12 @@ class LOG4CXX_EXPORT AppenderAttachableImpl :
 		 */
 		virtual void removeAppender(const LogString& name);
 
-		inline std::mutex& getMutex() const
-		{
-			return m_mutex;
-		}
+		std::mutex& getMutex();
 
 	private:
-		mutable std::mutex m_mutex;
+		struct priv_data;
+		std::unique_ptr<priv_data> m_priv;
+
 		AppenderAttachableImpl(const AppenderAttachableImpl&);
 		AppenderAttachableImpl& operator=(const AppenderAttachableImpl&);
 };
diff --git a/src/main/include/log4cxx/net/smtpappender.h b/src/main/include/log4cxx/net/smtpappender.h
index da40c77..593950d 100644
--- a/src/main/include/log4cxx/net/smtpappender.h
+++ b/src/main/include/log4cxx/net/smtpappender.h
@@ -45,11 +45,10 @@ delivering useful application context.
 class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
 {
 	private:
-
-	private:
 		SMTPAppender(const SMTPAppender&);
 		SMTPAppender& operator=(const SMTPAppender&);
 		static bool asciiCheck(const LogString& value, const LogString& label);
+
 		/**
 		This method determines if there is a sense in attempting to append.
 		<p>It checks whether there is a set output target and also if
@@ -57,20 +56,6 @@ class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
 		value <code>false</code> is returned. */
 		bool checkEntryConditions();
 
-		LogString to;
-		LogString cc;
-		LogString bcc;
-		LogString from;
-		LogString subject;
-		LogString smtpHost;
-		LogString smtpUsername;
-		LogString smtpPassword;
-		int smtpPort;
-		int bufferSize; // 512
-		bool locationInfo;
-		helpers::CyclicBuffer cb;
-		spi::TriggeringEventEvaluatorPtr evaluator;
-
 	public:
 		DECLARE_LOG4CXX_OBJECT(SMTPAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -243,10 +228,7 @@ class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton
 		/**
 		Returns value of the <b>BufferSize</b> option.
 		*/
-		inline int getBufferSize() const
-		{
-			return bufferSize;
-		}
+		int getBufferSize() const;
 
 
 		/**
diff --git a/src/main/include/log4cxx/net/socketappender.h b/src/main/include/log4cxx/net/socketappender.h
index df4d23e..736c573 100644
--- a/src/main/include/log4cxx/net/socketappender.h
+++ b/src/main/include/log4cxx/net/socketappender.h
@@ -122,9 +122,6 @@ class LOG4CXX_EXPORT SocketAppender : public SocketAppenderSkeleton
 		virtual int getDefaultPort() const;
 		void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool);
 
-	private:
-		log4cxx::helpers::ObjectOutputStreamPtr oos;
-
 }; // class SocketAppender
 
 LOG4CXX_PTR_DEF(SocketAppender);
diff --git a/src/main/include/log4cxx/net/socketappenderskeleton.h b/src/main/include/log4cxx/net/socketappenderskeleton.h
index 88d2a15..b4158f4 100644
--- a/src/main/include/log4cxx/net/socketappenderskeleton.h
+++ b/src/main/include/log4cxx/net/socketappenderskeleton.h
@@ -40,21 +40,6 @@ namespace net
  */
 class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 {
-	private:
-		/**
-		host name
-		*/
-		LogString remoteHost;
-
-		/**
-		IP address
-		*/
-		helpers::InetAddressPtr address;
-
-		int port;
-		int reconnectionDelay;
-		bool locationInfo;
-
 	public:
 		SocketAppenderSkeleton(int defaultPort, int reconnectionDelay);
 		~SocketAppenderSkeleton();
@@ -92,54 +77,35 @@ class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 		* the host name of the server where a
 		* Apache Chainsaw or compatible is running.
 		* */
-		inline void setRemoteHost(const LogString& host)
-		{
-			address = helpers::InetAddress::getByName(host);
-			remoteHost.assign(host);
-		}
+		void setRemoteHost(const LogString& host);
 
 		/**
 		Returns value of the <b>RemoteHost</b> option.
 		*/
-		inline const LogString& getRemoteHost() const
-		{
-			return remoteHost;
-		}
+		const LogString& getRemoteHost() const;
 
 		/**
 		The <b>Port</b> option takes a positive integer representing
 		the port where the server is waiting for connections.
 		*/
-		void setPort(int port1)
-		{
-			this->port = port1;
-		}
+		void setPort(int port1);
 
 		/**
 		Returns value of the <b>Port</b> option.
 		*/
-		int getPort() const
-		{
-			return port;
-		}
+		int getPort() const;
 
 		/**
 		The <b>LocationInfo</b> option takes a boolean value. If true,
 		the information sent to the remote host will include location
 		information. By default no location information is sent to the server.
 		*/
-		void setLocationInfo(bool locationInfo1)
-		{
-			this->locationInfo = locationInfo1;
-		}
+		void setLocationInfo(bool locationInfo1);
 
 		/**
 		Returns value of the <b>LocationInfo</b> option.
 		*/
-		bool getLocationInfo() const
-		{
-			return locationInfo;
-		}
+		bool getLocationInfo() const;
 
 		/**
 		The <b>ReconnectionDelay</b> option takes a positive integer
@@ -150,18 +116,12 @@ class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 		<p>Setting this option to zero turns off reconnection
 		capability.
 		*/
-		void setReconnectionDelay(int reconnectionDelay1)
-		{
-			this->reconnectionDelay = reconnectionDelay1;
-		}
+		void setReconnectionDelay(int reconnectionDelay1);
 
 		/**
 		Returns value of the <b>ReconnectionDelay</b> option.
 		*/
-		int getReconnectionDelay() const
-		{
-			return reconnectionDelay;
-		}
+		int getReconnectionDelay() const;
 
 		void fireConnector();
 
@@ -190,9 +150,6 @@ class LOG4CXX_EXPORT SocketAppenderSkeleton : public AppenderSkeleton
 		     connection is droppped.
 		     */
 
-		std::thread thread;
-		std::condition_variable interrupt;
-		std::mutex interrupt_mutex;
 		void monitor();
 		bool is_closed();
 		SocketAppenderSkeleton(const SocketAppenderSkeleton&);
diff --git a/src/main/include/log4cxx/net/sockethubappender.h b/src/main/include/log4cxx/net/sockethubappender.h
index 88c5891..33be85a 100644
--- a/src/main/include/log4cxx/net/sockethubappender.h
+++ b/src/main/include/log4cxx/net/sockethubappender.h
@@ -114,10 +114,6 @@ class LOG4CXX_EXPORT SocketHubAppender : public AppenderSkeleton
 		*/
 		static int DEFAULT_PORT;
 
-		int port;
-		ObjectOutputStreamList streams;
-		bool locationInfo;
-
 	public:
 		DECLARE_LOG4CXX_OBJECT(SocketHubAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -160,40 +156,27 @@ class LOG4CXX_EXPORT SocketHubAppender : public AppenderSkeleton
 		/**
 		The <b>Port</b> option takes a positive integer representing
 		the port where the server is waiting for connections. */
-		inline void setPort(int port1)
-		{
-			this->port = port1;
-		}
+		void setPort(int port1);
 
 		/**
 		Returns value of the <b>Port</b> option. */
-		inline int getPort() const
-		{
-			return port;
-		}
+		int getPort() const;
 
 		/**
 		The <b>LocationInfo</b> option takes a boolean value. If true,
 		the information sent to the remote host will include location
 		information. By default no location information is sent to the server. */
-		inline void setLocationInfo(bool locationInfo1)
-		{
-			this->locationInfo = locationInfo1;
-		}
+		void setLocationInfo(bool locationInfo1);
 
 		/**
 		Returns value of the <b>LocationInfo</b> option. */
-		inline bool getLocationInfo() const
-		{
-			return locationInfo;
-		}
+		bool getLocationInfo() const;
 
 		/**
 		Start the ServerMonitor thread. */
 	private:
 		void startServer();
 
-		std::thread thread;
 		void monitor();
 
 }; // class SocketHubAppender
diff --git a/src/main/include/log4cxx/net/syslogappender.h b/src/main/include/log4cxx/net/syslogappender.h
index 689fd2c..87bee2d 100644
--- a/src/main/include/log4cxx/net/syslogappender.h
+++ b/src/main/include/log4cxx/net/syslogappender.h
@@ -107,10 +107,7 @@ class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
 		/**
 		Returns the value of the <b>SyslogHost</b> option.
 		*/
-		inline const LogString& getSyslogHost() const
-		{
-			return syslogHost;
-		}
+		const LogString& getSyslogHost() const;
 
 		/**
 		Set the syslog facility. This is the <b>Facility</b> option.
@@ -125,49 +122,27 @@ class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleton
 		/**
 		Returns the value of the <b>Facility</b> option.
 		*/
-		inline LogString getFacility() const
-		{
-			return getFacilityString(syslogFacility);
-		}
+		LogString getFacility() const;
 
 		/**
 		If the <b>FacilityPrinting</b> option is set to true, the printed
 		message will include the facility name of the application. It is
 		<em>false</em> by default.
 		*/
-		inline void setFacilityPrinting(bool facilityPrinting1)
-		{
-			this->facilityPrinting = facilityPrinting1;
-		}
+		void setFacilityPrinting(bool facilityPrinting1);
 
 		/**
 		Returns the value of the <b>FacilityPrinting</b> option.
 		*/
-		inline bool getFacilityPrinting() const
-		{
-			return facilityPrinting;
-		}
+		bool getFacilityPrinting() const;
 
-		inline void setMaxMessageLength(int maxMessageLength1)
-		{
-			maxMessageLength = maxMessageLength1;
-		}
+		void setMaxMessageLength(int maxMessageLength1);
 
-		inline int getMaxMessageLength() const
-		{
-			return maxMessageLength;
-		}
+		int getMaxMessageLength() const;
 
 	protected:
 		void initSyslogFacilityStr();
 
-		int syslogFacility; // Have LOG_USER as default
-		LogString facilityStr;
-		bool facilityPrinting;
-		helpers::SyslogWriter* sw;
-		LogString syslogHost;
-		int syslogHostPort;
-		int maxMessageLength;
 	private:
 		SyslogAppender(const SyslogAppender&);
 		SyslogAppender& operator=(const SyslogAppender&);
diff --git a/src/main/include/log4cxx/net/telnetappender.h b/src/main/include/log4cxx/net/telnetappender.h
index 9d0d66a..e25d19d 100644
--- a/src/main/include/log4cxx/net/telnetappender.h
+++ b/src/main/include/log4cxx/net/telnetappender.h
@@ -75,7 +75,6 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 	private:
 		static const int DEFAULT_PORT;
 		static const int MAX_CONNECTIONS;
-		int port;
 
 	public:
 		DECLARE_LOG4CXX_OBJECT(TelnetAppender)
@@ -111,19 +110,13 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 		/**
 		Returns value of the <b>Port</b> option.
 		*/
-		int getPort() const
-		{
-			return port;
-		}
+		int getPort() const;
 
 		/**
 		The <b>Port</b> option takes a positive integer representing
 		the port where the server is waiting for connections.
 		*/
-		void setPort(int port1)
-		{
-			this->port = port1;
-		}
+		void setPort(int port1);
 
 
 		/** shuts down the appender. */
@@ -143,12 +136,6 @@ class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
 
 		void write(log4cxx::helpers::ByteBuffer&);
 		void writeStatus(const log4cxx::helpers::SocketPtr& socket, const LogString& msg, log4cxx::helpers::Pool& p);
-		ConnectionList connections;
-		LogString encoding;
-		log4cxx::helpers::CharsetEncoderPtr encoder;
-		helpers::ServerSocket* serverSocket;
-		std::thread sh;
-		size_t activeConnections;
 		void acceptConnections();
 }; // class TelnetAppender
 
diff --git a/src/main/include/log4cxx/net/xmlsocketappender.h b/src/main/include/log4cxx/net/xmlsocketappender.h
index 62d5872..2ce7be2 100644
--- a/src/main/include/log4cxx/net/xmlsocketappender.h
+++ b/src/main/include/log4cxx/net/xmlsocketappender.h
@@ -135,7 +135,6 @@ class LOG4CXX_EXPORT XMLSocketAppender : public SocketAppenderSkeleton
 		void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool);
 
 	private:
-		log4cxx::helpers::WriterPtr writer;
 		//  prevent copy and assignment statements
 		XMLSocketAppender(const XMLSocketAppender&);
 		XMLSocketAppender& operator=(const XMLSocketAppender&);
diff --git a/src/main/include/log4cxx/private/appenderskeleton_priv.h b/src/main/include/log4cxx/private/appenderskeleton_priv.h
new file mode 100644
index 0000000..af81db2
--- /dev/null
+++ b/src/main/include/log4cxx/private/appenderskeleton_priv.h
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOG4CXX_APPENDERSKELETON_PRIV
+#define _LOG4CXX_APPENDERSKELETON_PRIV
+
+#include <log4cxx/appenderskeleton.h>
+#include <log4cxx/helpers/onlyonceerrorhandler.h>
+#include <memory>
+
+namespace log4cxx {
+namespace priv{
+
+struct AppenderSkeletonPrivate {
+    AppenderSkeletonPrivate() :
+        threshold(Level::getAll()),
+        errorHandler(std::make_shared<log4cxx::helpers::OnlyOnceErrorHandler>()),
+        closed(false){}
+
+    AppenderSkeletonPrivate( LayoutPtr lay ) :
+        layout( lay ),
+        threshold(Level::getAll()),
+        errorHandler(std::make_shared<log4cxx::helpers::OnlyOnceErrorHandler>()),
+        closed(false){}
+
+    /** The layout variable does not need to be set if the appender
+    implementation has its own layout. */
+    LayoutPtr layout;
+
+    /** Appenders are named. */
+    LogString name;
+
+    /**
+    There is no level threshold filtering by default.  */
+    LevelPtr threshold;
+
+    /**
+    It is assumed and enforced that errorHandler is never null.
+    */
+    spi::ErrorHandlerPtr errorHandler;
+
+    /** The first filter in the filter chain. Set to <code>null</code>
+    initially. */
+    spi::FilterPtr headFilter;
+
+    /** The last filter in the filter chain. */
+    spi::FilterPtr tailFilter;
+
+    /**
+    Is this appender closed?
+    */
+    bool closed;
+
+    log4cxx::helpers::Pool pool;
+    mutable log4cxx::shared_mutex mutex;
+};
+
+}
+}
+
+#endif /* _LOG4CXX_APPENDERSKELETON_PRIV */
diff --git a/src/main/include/log4cxx/private/fileappender_priv.h b/src/main/include/log4cxx/private/fileappender_priv.h
new file mode 100644
index 0000000..fe9cf2d
--- /dev/null
+++ b/src/main/include/log4cxx/private/fileappender_priv.h
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOG4CXX_FILEAPPENDER_PRIV_H
+#define _LOG4CXX_FILEAPPENDER_PRIV_H
+
+#include <log4cxx/private/writerappender_priv.h>
+
+namespace log4cxx{
+namespace priv{
+
+struct FileAppenderPriv : public WriterAppenderPriv {
+    FileAppenderPriv() : WriterAppenderPriv(){}
+
+    FileAppenderPriv(LayoutPtr layout) : WriterAppenderPriv(layout){}
+
+    /** Append to or truncate the file? The default value for this
+    variable is <code>true</code>, meaning that by default a
+    <code>FileAppender</code> will append to an existing file and
+    not truncate it.
+    <p>This option is meaningful only if the FileAppender opens the
+    file.
+    */
+    bool fileAppend;
+
+    /**
+    The name of the log file. */
+    LogString fileName;
+
+    /**
+    Do we do bufferedIO? */
+    bool bufferedIO;
+
+    /**
+    How big should the IO buffer be? Default is 8K. */
+    int bufferSize;
+};
+
+}
+}
+
+#endif
diff --git a/src/main/include/log4cxx/private/nteventlogappender_priv.h b/src/main/include/log4cxx/private/nteventlogappender_priv.h
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/include/log4cxx/private/odbcappender_priv.h b/src/main/include/log4cxx/private/odbcappender_priv.h
new file mode 100644
index 0000000..e6c5a85
--- /dev/null
+++ b/src/main/include/log4cxx/private/odbcappender_priv.h
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <log4cxx/db/odbcappender.h>
+#include "appenderskeleton_priv.h"
+
+#include <list>
+
+namespace log4cxx{
+namespace priv{
+
+struct ODBCAppenderPriv : public AppenderSkeletonPrivate {
+    ODBCAppenderPriv() :
+        AppenderSkeletonPrivate(),
+        connection(nullptr),
+        env(nullptr),
+        bufferSize(1){}
+
+    /**
+    * URL of the DB for default connection handling
+    */
+    LogString databaseURL;
+
+    /**
+    * User to connect as for default connection handling
+    */
+    LogString databaseUser;
+
+    /**
+    * User to use for default connection handling
+    */
+    LogString databasePassword;
+
+    /**
+    * Connection used by default.  The connection is opened the first time it
+    * is needed and then held open until the appender is closed (usually at
+    * garbage collection).  This behavior is best modified by creating a
+    * sub-class and overriding the <code>getConnection</code> and
+    * <code>closeConnection</code> methods.
+    */
+    log4cxx::db::ODBCAppender::SQLHDBC connection;
+    log4cxx::db::ODBCAppender::SQLHENV env;
+
+    /**
+    * Stores the string given to the pattern layout for conversion into a SQL
+    * statement, eg: insert into LogTable (Thread, File, Message) values
+    * ("%t", "%F", "%m")
+    *
+    * Be careful of quotes in your messages!
+    *
+    * Also see PatternLayout.
+    */
+    LogString sqlStatement;
+
+    /**
+    * size of LoggingEvent buffer before writing to the database.
+    * Default is 1.
+    */
+    size_t bufferSize;
+
+    /**
+    * ArrayList holding the buffer of Logging Events.
+    */
+    std::list<spi::LoggingEventPtr> buffer;
+};
+
+}
+}
diff --git a/src/main/include/log4cxx/private/syslogappender_priv.h b/src/main/include/log4cxx/private/syslogappender_priv.h
new file mode 100644
index 0000000..2e4519b
--- /dev/null
+++ b/src/main/include/log4cxx/private/syslogappender_priv.h
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <log4cxx/helpers/syslogwriter.h>
+
+#include "appenderskeleton_priv.h"
+
+#include <log4cxx/private/log4cxx_private.h>
+
+#if LOG4CXX_HAVE_SYSLOG
+        #include <syslog.h>
+#else
+        /* facility codes */
+        #define   LOG_KERN (0<<3)   /* kernel messages */
+        #define   LOG_USER (1<<3)   /* random user-level messages */
+        #define   LOG_MAIL (2<<3)   /* mail system */
+        #define   LOG_DAEMON  (3<<3)   /* system daemons */
+        #define   LOG_AUTH (4<<3)   /* security/authorization messages */
+        #define   LOG_SYSLOG  (5<<3)   /* messages generated internally by syslogd */
+        #define   LOG_LPR     (6<<3)   /* line printer subsystem */
+        #define   LOG_NEWS (7<<3)   /* network news subsystem */
+        #define   LOG_UUCP (8<<3)   /* UUCP subsystem */
+        #define   LOG_CRON (9<<3)   /* clock daemon */
+        #define   LOG_AUTHPRIV   (10<<3)  /* security/authorization messages (private) */
+        #define   LOG_FTP     (11<<3)  /* ftp daemon */
+
+        /* other codes through 15 reserved for system use */
+        #define   LOG_LOCAL0  (16<<3)  /* reserved for local use */
+        #define   LOG_LOCAL1  (17<<3)  /* reserved for local use */
+        #define   LOG_LOCAL2  (18<<3)  /* reserved for local use */
+        #define   LOG_LOCAL3  (19<<3)  /* reserved for local use */
+        #define   LOG_LOCAL4  (20<<3)  /* reserved for local use */
+        #define   LOG_LOCAL5  (21<<3)  /* reserved for local use */
+        #define   LOG_LOCAL6  (22<<3)  /* reserved for local use */
+        #define   LOG_LOCAL7  (23<<3)  /* reserved for local use */
+#endif
+
+namespace log4cxx{
+namespace priv{
+
+struct SyslogAppenderPriv : public AppenderSkeletonPrivate{
+    SyslogAppenderPriv() :
+        AppenderSkeletonPrivate(),
+        syslogFacility(LOG_USER),
+        facilityPrinting(false),
+        maxMessageLength(1024){
+
+    }
+
+    SyslogAppenderPriv(const LayoutPtr& layout, int syslogFacility) :
+        AppenderSkeletonPrivate (layout),
+        syslogFacility(syslogFacility),
+        facilityPrinting(false),
+        maxMessageLength(1024){
+
+    }
+
+    SyslogAppenderPriv(const LayoutPtr& layout,
+                       const LogString& syslogHost, int syslogFacility) :
+        AppenderSkeletonPrivate(layout),
+        syslogFacility(syslogFacility),
+        facilityPrinting(false),
+        maxMessageLength(1024){
+
+    }
+
+    int syslogFacility; // Have LOG_USER as default
+    LogString facilityStr;
+    bool facilityPrinting;
+    std::unique_ptr<helpers::SyslogWriter> sw;
+    LogString syslogHost;
+    int syslogHostPort;
+    int maxMessageLength;
+};
+
+}
+}
diff --git a/src/main/include/log4cxx/private/writerappender_priv.h b/src/main/include/log4cxx/private/writerappender_priv.h
new file mode 100644
index 0000000..9ff3100
--- /dev/null
+++ b/src/main/include/log4cxx/private/writerappender_priv.h
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <log4cxx/helpers/writer.h>
+#include <atomic>
+
+#include "appenderskeleton_priv.h"
+
+#ifndef _LOG4CXX_WRITERAPPENDER_PRIV_H
+#define _LOG4CXX_WRITERAPPENDER_PRIV_H
+
+namespace log4cxx{
+namespace priv{
+
+struct WriterAppenderPriv : public priv::AppenderSkeletonPrivate {
+        WriterAppenderPriv() :
+	        AppenderSkeletonPrivate(),
+	        immediateFlush(true){}
+
+	WriterAppenderPriv(const LayoutPtr& layout1,
+	                                   log4cxx::helpers::WriterPtr& writer1) :
+	        AppenderSkeletonPrivate(layout1),
+	        immediateFlush(true),
+	        writer(writer1){
+	}
+
+	WriterAppenderPriv(const LayoutPtr& layout1) :
+	        AppenderSkeletonPrivate(layout1),
+	        immediateFlush(true){
+	}
+
+	/**
+	Immediate flush means that the underlying writer or output stream
+	will be flushed at the end of each append operation. Immediate
+	flush is slower but ensures that each append request is actually
+	written. If <code>immediateFlush</code> is set to
+	<code>false</code>, then there is a good chance that the last few
+	logs events are not actually written to persistent media if and
+	when the application crashes.
+
+	<p>The <code>immediateFlush</code> variable is set to
+	<code>true</code> by default.
+
+	*/
+	std::atomic<bool> immediateFlush;
+
+	/**
+	The encoding to use when opening an input stream.
+	<p>The <code>encoding</code> variable is set to <code>""</code> by
+	default which results in the utilization of the system's default
+	encoding.  */
+	LogString encoding;
+
+	/**
+	*  This is the {@link Writer Writer} where we will write to.
+	*/
+	log4cxx::helpers::WriterPtr writer;
+};
+
+}
+}
+
+#endif /* _LOG4CXX_WRITERAPPENDER_PRIV_H */
diff --git a/src/main/include/log4cxx/rolling/action.h b/src/main/include/log4cxx/rolling/action.h
index fc44978..31363d5 100644
--- a/src/main/include/log4cxx/rolling/action.h
+++ b/src/main/include/log4cxx/rolling/action.h
@@ -18,10 +18,10 @@
 #if !defined(_LOG4CXX_ROLLING_ACTION_H)
 #define _LOG4CXX_ROLLING_ACTION_H
 
-#include <log4cxx/portability.h>
 #include <log4cxx/helpers/object.h>
 #include <log4cxx/helpers/pool.h>
 #include <mutex>
+#include <memory>
 
 namespace log4cxx
 {
@@ -38,19 +38,9 @@ class Action : public virtual log4cxx::helpers::Object
 		BEGIN_LOG4CXX_CAST_MAP()
 		LOG4CXX_CAST_ENTRY(Action)
 		END_LOG4CXX_CAST_MAP()
-		/**
-		 * Is action complete.
-		 */
-		bool complete;
-
-		/**
-		 * Is action interrupted.
-		 */
-		bool interrupted;
-
-		log4cxx::helpers::Pool pool;
-		std::mutex mutex;
 
+		struct priv_data;
+		std::unique_ptr<priv_data> m_priv;
 
 	protected:
 		/**
diff --git a/src/main/include/log4cxx/rolling/rollingfileappender.h b/src/main/include/log4cxx/rolling/rollingfileappender.h
index 29ce553..db95090 100644
--- a/src/main/include/log4cxx/rolling/rollingfileappender.h
+++ b/src/main/include/log4cxx/rolling/rollingfileappender.h
@@ -18,8 +18,12 @@
 #if !defined(_LOG4CXX_ROLLING_ROLLING_FILE_APPENDER_H)
 #define _LOG4CXX_ROLLING_ROLLING_FILE_APPENDER_H
 
-#include <log4cxx/rolling/rollingfileappenderskeleton.h>
-
+#include <log4cxx/fileappender.h>
+#include <log4cxx/spi/optionhandler.h>
+#include <log4cxx/fileappender.h>
+#include <log4cxx/rolling/triggeringpolicy.h>
+#include <log4cxx/rolling/rollingpolicy.h>
+#include <log4cxx/rolling/action.h>
 
 namespace log4cxx
 {
@@ -72,20 +76,49 @@ namespace rolling
  *
  *
  * */
-class LOG4CXX_EXPORT RollingFileAppender : public RollingFileAppenderSkeleton
+class LOG4CXX_EXPORT RollingFileAppender : public FileAppender
 {
 		DECLARE_LOG4CXX_OBJECT(RollingFileAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
 		LOG4CXX_CAST_ENTRY(RollingFileAppender)
-		LOG4CXX_CAST_ENTRY_CHAIN(RollingFileAppenderSkeleton)
 		END_LOG4CXX_CAST_MAP()
 
 	public:
 		RollingFileAppender();
 
-		using RollingFileAppenderSkeleton::getRollingPolicy;
+		void activateOptions(log4cxx::helpers::Pool&);
+
+
+		/**
+		   Implements the usual roll over behaviour.
+
+		   <p>If <code>MaxBackupIndex</code> is positive, then files
+		   {<code>File.1</code>, ..., <code>File.MaxBackupIndex -1</code>}
+		   are renamed to {<code>File.2</code>, ...,
+		   <code>File.MaxBackupIndex</code>}. Moreover, <code>File</code> is
+		   renamed <code>File.1</code> and closed. A new <code>File</code> is
+		   created to receive further log output.
+
+		   <p>If <code>MaxBackupIndex</code> is equal to zero, then the
+		   <code>File</code> is truncated with no backup files created.
+
+		 */
+		bool rollover(log4cxx::helpers::Pool& p);
+
+	protected:
+
+		/**
+		 Actual writing occurs here.
+		*/
+		virtual void subAppend(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p);
+
+		bool rolloverInternal(log4cxx::helpers::Pool& p);
+
+	public:
+
+		RollingPolicyPtr getRollingPolicy() const;
 
-		using RollingFileAppenderSkeleton::getTriggeringPolicy;
+		TriggeringPolicyPtr getTriggeringPolicy() const;
 
 		/**
 		 * Sets the rolling policy. In case the 'policy' argument also implements
@@ -93,9 +126,62 @@ class LOG4CXX_EXPORT RollingFileAppender : public RollingFileAppenderSkeleton
 		 * is automatically set to be the policy argument.
 		 * @param policy
 		 */
-		using RollingFileAppenderSkeleton::setRollingPolicy;
+		void setRollingPolicy(const RollingPolicyPtr& policy);
+
+		void setTriggeringPolicy(const TriggeringPolicyPtr& policy);
+
+	public:
+		/**
+		  * Close appender.  Waits for any asynchronous file compression actions to be completed.
+		*/
+		void close();
+
+	protected:
+		/**
+		   Returns an OutputStreamWriter when passed an OutputStream.  The
+		   encoding used will depend on the value of the
+		   <code>encoding</code> property.  If the encoding value is
+		   specified incorrectly the writer will be opened using the default
+		   system encoding (an error message will be printed to the loglog.
+		 @param os output stream, may not be null.
+		 @return new writer.
+		 */
+		log4cxx::helpers::WriterPtr createWriter(log4cxx::helpers::OutputStreamPtr& os);
+
+	public:
+
+
+
+		/**
+		 * Get byte length of current active log file.
+		 * @return byte length of current active log file.
+		 */
+		size_t getFileLength() const;
+
+#ifdef LOG4CXX_MULTI_PROCESS
+		/**
+		 * Set byte length of current active log file.
+		 * @return void
+		 */
+		void setFileLength(size_t length);
+
+		/**
+		 *  Release the file lock
+		 * @return void
+		 */
+		void releaseFileLock(apr_file_t* lock_file);
+		/**
+		 * re-open the latest file when its own handler has been renamed
+		 * @return void
+		 */
+		void reopenLatestFile(log4cxx::helpers::Pool& p);
+#endif
 
-		using RollingFileAppenderSkeleton::setTriggeringPolicy;
+		/**
+		 * Increments estimated byte length of current active log file.
+		 * @param increment additional bytes written to log file.
+		 */
+		void incrementFileLength(size_t increment);
 
 };
 
diff --git a/src/main/include/log4cxx/rolling/rollingfileappenderskeleton.h b/src/main/include/log4cxx/rolling/rollingfileappenderskeleton.h
index 1663fdf..3dfa395 100644
--- a/src/main/include/log4cxx/rolling/rollingfileappenderskeleton.h
+++ b/src/main/include/log4cxx/rolling/rollingfileappenderskeleton.h
@@ -18,7 +18,6 @@
 #if !defined(_LOG4CXX_ROLLING_ROLLING_FILE_APPENDER_SKELETON_H)
 #define _LOG4CXX_ROLLING_ROLLING_FILE_APPENDER_SKELETON_H
 
-#include <log4cxx/portability.h>
 #include <log4cxx/spi/optionhandler.h>
 #include <log4cxx/fileappender.h>
 #include <log4cxx/rolling/triggeringpolicy.h>
diff --git a/src/main/include/log4cxx/rolling/rollingpolicy.h b/src/main/include/log4cxx/rolling/rollingpolicy.h
index e5c38f2..3e82f08 100644
--- a/src/main/include/log4cxx/rolling/rollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/rollingpolicy.h
@@ -18,7 +18,6 @@
 #if !defined(_LOG4CXX_ROLLING_ROLLING_POLICY_H)
 #define _LOG4CXX_ROLLING_ROLLING_POLICY_H
 
-#include <log4cxx/portability.h>
 #include <log4cxx/spi/optionhandler.h>
 #include <log4cxx/rolling/rolloverdescription.h>
 #include <log4cxx/file.h>
diff --git a/src/main/include/log4cxx/rolling/rolloverdescription.h b/src/main/include/log4cxx/rolling/rolloverdescription.h
index 30894ab..eabb29f 100644
--- a/src/main/include/log4cxx/rolling/rolloverdescription.h
+++ b/src/main/include/log4cxx/rolling/rolloverdescription.h
@@ -18,7 +18,6 @@
 #if !defined(_LOG4CXX_ROLLING_ROLLOVER_DESCRIPTION_H)
 #define _LOG4CXX_ROLLING_ROLLOVER_DESCRIPTION_H
 
-#include <log4cxx/portability.h>
 #include <log4cxx/rolling/action.h>
 
 namespace log4cxx
diff --git a/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h b/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
index ddeacf5..4d842d4 100755
--- a/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
+++ b/src/main/include/log4cxx/rolling/timebasedrollingpolicy.h
@@ -19,7 +19,6 @@
 #if !defined(_LOG4CXX_ROLLING_TIME_BASED_ROLLING_POLICY_H)
 #define _LOG4CXX_ROLLING_TIME_BASED_ROLLING_POLICY_H
 
-#include <log4cxx/portability.h>
 #include <log4cxx/rolling/rollingpolicybase.h>
 #include <log4cxx/rolling/triggeringpolicy.h>
 #include <log4cxx/writerappender.h>
diff --git a/src/main/include/log4cxx/writerappender.h b/src/main/include/log4cxx/writerappender.h
index ded462b..8dc9e62 100644
--- a/src/main/include/log4cxx/writerappender.h
+++ b/src/main/include/log4cxx/writerappender.h
@@ -36,40 +36,15 @@ namespace helpers
 class Transcoder;
 }
 
+namespace priv{
+struct WriterAppenderPriv;
+}
+
 /**
 WriterAppender appends log events to a standard output stream
 */
 class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 {
-	private:
-		/**
-		Immediate flush means that the underlying writer or output stream
-		will be flushed at the end of each append operation. Immediate
-		flush is slower but ensures that each append request is actually
-		written. If <code>immediateFlush</code> is set to
-		<code>false</code>, then there is a good chance that the last few
-		logs events are not actually written to persistent media if and
-		when the application crashes.
-
-		<p>The <code>immediateFlush</code> variable is set to
-		<code>true</code> by default.
-
-		*/
-		std::atomic<bool> immediateFlush;
-
-		/**
-		The encoding to use when opening an input stream.
-		<p>The <code>encoding</code> variable is set to <code>""</code> by
-		default which results in the utilization of the system's default
-		encoding.  */
-		LogString encoding;
-
-		/**
-		*  This is the {@link Writer Writer} where we will write to.
-		*/
-		log4cxx::helpers::WriterPtr writer;
-
-
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(WriterAppender)
 		BEGIN_LOG4CXX_CAST_MAP()
@@ -84,6 +59,7 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 		WriterAppender(const LayoutPtr& layout,
 			log4cxx::helpers::WriterPtr& writer);
 		WriterAppender(const LayoutPtr& layout);
+		WriterAppender(std::unique_ptr<priv::WriterAppenderPriv> priv);
 
 	public:
 		~WriterAppender();
@@ -112,10 +88,7 @@ class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton
 		/**
 		Returns value of the <b>ImmediateFlush</b> option.
 		*/
-		bool getImmediateFlush() const
-		{
-			return immediateFlush;
-		}
+		bool getImmediateFlush() const;
 
 		/**
 		This method is called by the AppenderSkeleton#doAppend
diff --git a/src/test/cpp/vectorappender.cpp b/src/test/cpp/vectorappender.cpp
index 262fbd6..13fa565 100644
--- a/src/test/cpp/vectorappender.cpp
+++ b/src/test/cpp/vectorappender.cpp
@@ -32,10 +32,10 @@ void VectorAppender::append(const spi::LoggingEventPtr& event, Pool& /*p*/)
 
 void VectorAppender::close()
 {
-	if (this->closed)
+	if (m_priv->closed)
 	{
 		return;
 	}
 
-	this->closed = true;
+	m_priv->closed = true;
 }
diff --git a/src/test/cpp/vectorappender.h b/src/test/cpp/vectorappender.h
index 2f6176f..2895e4f 100644
--- a/src/test/cpp/vectorappender.h
+++ b/src/test/cpp/vectorappender.h
@@ -18,6 +18,7 @@
 #include <log4cxx/appenderskeleton.h>
 #include <vector>
 #include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
 
 namespace log4cxx
 {
@@ -53,7 +54,7 @@ class VectorAppender : public AppenderSkeleton
 
 		bool isClosed() const
 		{
-			return closed;
+			return m_priv->closed;
 		}
 
 		bool requiresLayout() const

[logging-log4cxx] 03/20: More conversion to be ABI stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ad105501194409cae5a1c3ff8a19d620baca675a
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Sat Sep 25 19:26:29 2021 -0400

    More conversion to be ABI stable
---
 src/main/cpp/bufferedwriter.cpp                    |  35 ++++---
 src/main/cpp/bytearrayinputstream.cpp              |  19 +++-
 src/main/cpp/bytearrayoutputstream.cpp             |  12 ++-
 src/main/cpp/bytebuffer.cpp                        |  70 +++++++++++---
 src/main/cpp/cacheddateformat.cpp                  |  99 ++++++++++++++------
 src/main/cpp/cyclicbuffer.cpp                      |  76 +++++++++------
 src/main/cpp/datagrampacket.cpp                    |  99 +++++++++++++++++++-
 src/main/cpp/datagramsocket.cpp                    | 103 +++++++++++++++++----
 src/main/include/log4cxx/helpers/bufferedwriter.h  |   7 +-
 .../include/log4cxx/helpers/bytearrayinputstream.h |   4 +-
 .../log4cxx/helpers/bytearrayoutputstream.h        |   3 +-
 src/main/include/log4cxx/helpers/bytebuffer.h      |  41 ++------
 .../include/log4cxx/helpers/cacheddateformat.h     |  37 +-------
 src/main/include/log4cxx/helpers/cyclicbuffer.h    |  19 ++--
 src/main/include/log4cxx/helpers/datagrampacket.h  |  72 +++-----------
 src/main/include/log4cxx/helpers/datagramsocket.h  |  54 ++---------
 src/main/include/log4cxx/spi/configurator.h        |   4 +-
 17 files changed, 451 insertions(+), 303 deletions(-)

diff --git a/src/main/cpp/bufferedwriter.cpp b/src/main/cpp/bufferedwriter.cpp
index 5d21a9b..2175959 100644
--- a/src/main/cpp/bufferedwriter.cpp
+++ b/src/main/cpp/bufferedwriter.cpp
@@ -21,15 +21,26 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct BufferedWriter::BufferedWriterPriv {
+	BufferedWriterPriv(WriterPtr& out1, size_t sz1) :
+		out(out1),
+		sz(sz1)
+	{}
+
+	WriterPtr out;
+	size_t sz;
+	LogString buf;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(BufferedWriter)
 
 BufferedWriter::BufferedWriter(WriterPtr& out1)
-	: out(out1), sz(1024)
+	: BufferedWriter(out1, 1024)
 {
 }
 
 BufferedWriter::BufferedWriter(WriterPtr& out1, size_t sz1)
-	: out(out1), sz(sz1)
+	: m_priv(std::make_unique<BufferedWriterPriv>(out1, sz1))
 {
 }
 
@@ -40,33 +51,33 @@ BufferedWriter::~BufferedWriter()
 void BufferedWriter::close(Pool& p)
 {
 	flush(p);
-	out->close(p);
+	m_priv->out->close(p);
 }
 
 void BufferedWriter::flush(Pool& p)
 {
-	if (buf.length() > 0)
+	if (m_priv->buf.length() > 0)
 	{
-		out->write(buf, p);
-		buf.erase(buf.begin(), buf.end());
+		m_priv->out->write(m_priv->buf, p);
+		m_priv->buf.erase(m_priv->buf.begin(), m_priv->buf.end());
 	}
 }
 
 void BufferedWriter::write(const LogString& str, Pool& p)
 {
-	if (buf.length() + str.length() > sz)
+	if (m_priv->buf.length() + str.length() > m_priv->sz)
 	{
-		out->write(buf, p);
-		buf.erase(buf.begin(), buf.end());
+		m_priv->out->write(m_priv->buf, p);
+		m_priv->buf.erase(m_priv->buf.begin(), m_priv->buf.end());
 	}
 
-	if (str.length() > sz)
+	if (str.length() > m_priv->sz)
 	{
-		out->write(str, p);
+		m_priv->out->write(str, p);
 	}
 	else
 	{
-		buf.append(str);
+		m_priv->buf.append(str);
 	}
 }
 
diff --git a/src/main/cpp/bytearrayinputstream.cpp b/src/main/cpp/bytearrayinputstream.cpp
index 66f3a9b..cb2453e 100644
--- a/src/main/cpp/bytearrayinputstream.cpp
+++ b/src/main/cpp/bytearrayinputstream.cpp
@@ -26,10 +26,19 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace std;
 
+struct ByteArrayInputStream::ByteArrayInputStreamPriv{
+	ByteArrayInputStreamPriv(const ByteList& bytes) :
+		buf(bytes),
+		pos(0){}
+
+	ByteList buf;
+	size_t pos;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(ByteArrayInputStream)
 
 ByteArrayInputStream::ByteArrayInputStream(const std::vector<unsigned char>& bytes) :
-	buf(bytes), pos(0)
+	m_priv(std::make_unique<ByteArrayInputStreamPriv>(bytes))
 {
 }
 
@@ -47,15 +56,15 @@ void ByteArrayInputStream::close()
 
 int ByteArrayInputStream::read(ByteBuffer& dst)
 {
-	if (pos >= buf.size())
+	if (m_priv->pos >= m_priv->buf.size())
 	{
 		return -1;
 	}
 	else
 	{
-		size_t bytesCopied = min(dst.remaining(), buf.size() - pos);
-		std::memcpy(dst.current(), &buf[pos], bytesCopied);
-		pos += bytesCopied;
+		size_t bytesCopied = min(dst.remaining(), m_priv->buf.size() - m_priv->pos);
+		std::memcpy(dst.current(), &m_priv->buf[m_priv->pos], bytesCopied);
+		m_priv->pos += bytesCopied;
 		dst.position(dst.position() + bytesCopied);
 		return (int)bytesCopied;
 	}
diff --git a/src/main/cpp/bytearrayoutputstream.cpp b/src/main/cpp/bytearrayoutputstream.cpp
index 4918add..786581c 100644
--- a/src/main/cpp/bytearrayoutputstream.cpp
+++ b/src/main/cpp/bytearrayoutputstream.cpp
@@ -24,6 +24,10 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct ByteArrayOutputStream::ByteArrayOutputStreamPriv{
+	ByteList array;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(ByteArrayOutputStream)
 
 ByteArrayOutputStream::ByteArrayOutputStream()
@@ -44,15 +48,15 @@ void ByteArrayOutputStream::flush(Pool& /* p */)
 
 void ByteArrayOutputStream::write(ByteBuffer& buf, Pool& /* p */ )
 {
-	size_t sz = array.size();
-	array.resize(sz + buf.remaining());
-	memcpy(&array[sz], buf.current(), buf.remaining());
+	size_t sz = m_priv->array.size();
+	m_priv->array.resize(sz + buf.remaining());
+	memcpy(&m_priv->array[sz], buf.current(), buf.remaining());
 	buf.position(buf.limit());
 }
 
 std::vector<unsigned char> ByteArrayOutputStream::toByteArray() const
 {
-	return array;
+	return m_priv->array;
 }
 
 
diff --git a/src/main/cpp/bytebuffer.cpp b/src/main/cpp/bytebuffer.cpp
index c82e3fc..1347afb 100644
--- a/src/main/cpp/bytebuffer.cpp
+++ b/src/main/cpp/bytebuffer.cpp
@@ -22,8 +22,18 @@
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
+struct ByteBuffer::ByteBufferPriv{
+	ByteBufferPriv(char* data1, size_t capacity) :
+		base(data1), pos(0), lim(capacity), cap(capacity){}
+
+	char* base;
+	size_t pos;
+	size_t lim;
+	size_t cap;
+};
+
 ByteBuffer::ByteBuffer(char* data1, size_t capacity)
-	: base(data1), pos(0), lim(capacity), cap(capacity)
+	: m_priv(std::make_unique<ByteBufferPriv>(data1, capacity))
 {
 }
 
@@ -33,46 +43,82 @@ ByteBuffer::~ByteBuffer()
 
 void ByteBuffer::clear()
 {
-	lim = cap;
-	pos = 0;
+	m_priv->lim = m_priv->cap;
+	m_priv->pos = 0;
 }
 
 void ByteBuffer::flip()
 {
-	lim = pos;
-	pos = 0;
+	m_priv->lim = m_priv->pos;
+	m_priv->pos = 0;
 }
 
 void ByteBuffer::position(size_t newPosition)
 {
-	if (newPosition < lim)
+	if (newPosition < m_priv->lim)
 	{
-		pos = newPosition;
+		m_priv->pos = newPosition;
 	}
 	else
 	{
-		pos = lim;
+		m_priv->pos = m_priv->lim;
 	}
 }
 
 void ByteBuffer::limit(size_t newLimit)
 {
-	if (newLimit > cap)
+	if (newLimit > m_priv->cap)
 	{
 		throw IllegalArgumentException(LOG4CXX_STR("newLimit"));
 	}
 
-	lim = newLimit;
+	m_priv->lim = newLimit;
 }
 
 
 bool ByteBuffer::put(char byte)
 {
-	if (pos < lim)
+	if (m_priv->pos < m_priv->lim)
 	{
-		base[pos++] = byte;
+		m_priv->base[m_priv->pos++] = byte;
 		return true;
 	}
 
 	return false;
 }
+
+char* ByteBuffer::data()
+{
+	return m_priv->base;
+}
+
+const char* ByteBuffer::data() const
+{
+	return m_priv->base;
+}
+
+char* ByteBuffer::current()
+{
+	return m_priv->base + m_priv->pos;
+}
+
+const char* ByteBuffer::current() const
+{
+	return m_priv->base + m_priv->pos;
+}
+
+size_t ByteBuffer::limit() const
+{
+	return m_priv->lim;
+}
+
+size_t ByteBuffer::position() const
+{
+	return m_priv->pos;
+}
+
+size_t ByteBuffer::remaining() const
+{
+	return m_priv->lim - m_priv->pos;
+}
+
diff --git a/src/main/cpp/cacheddateformat.cpp b/src/main/cpp/cacheddateformat.cpp
index 37fa8ea..2b6df72 100644
--- a/src/main/cpp/cacheddateformat.cpp
+++ b/src/main/cpp/cacheddateformat.cpp
@@ -28,7 +28,51 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::pattern;
 
+struct CachedDateFormat::CachedDateFormatPriv{
+	CachedDateFormatPriv(DateFormatPtr dateFormat, int expiration1) :
+		formatter(dateFormat),
+		millisecondStart(0),
+		slotBegin(std::numeric_limits<log4cxx_time_t>::min()),
+		cache(50, 0x20),
+		expiration(expiration1),
+		previousTime(std::numeric_limits<log4cxx_time_t>::min())
+	{}
 
+	/**
+	 *   Wrapped formatter.
+	 */
+	log4cxx::helpers::DateFormatPtr formatter;
+
+	/**
+	 *  Index of initial digit of millisecond pattern or
+	 *   UNRECOGNIZED_MILLISECONDS or NO_MILLISECONDS.
+	 */
+	mutable int millisecondStart;
+
+	/**
+	 *  Integral second preceding the previous convered Date.
+	 */
+	mutable log4cxx_time_t slotBegin;
+
+
+	/**
+	 *  Cache of previous conversion.
+	 */
+	mutable LogString cache;
+
+
+	/**
+	 *  Maximum validity period for the cache.
+	 *  Typically 1, use cache for duplicate requests only, or
+	 *  1000000, use cache for requests within the same integral second.
+	 */
+	const int expiration;
+
+	/**
+	 *  Date requested in previous conversion.
+	 */
+	mutable log4cxx_time_t previousTime;
+};
 
 
 /**
@@ -83,12 +127,7 @@ const logchar CachedDateFormat::zeroString[] = { 0x30, 0x30, 0x30, 0 };
  */
 CachedDateFormat::CachedDateFormat(const DateFormatPtr& dateFormat,
 	int expiration1) :
-	formatter(dateFormat),
-	millisecondStart(0),
-	slotBegin(std::numeric_limits<log4cxx_time_t>::min()),
-	cache(50, 0x20),
-	expiration(expiration1),
-	previousTime(std::numeric_limits<log4cxx_time_t>::min())
+	m_priv(std::make_unique<CachedDateFormatPriv>(dateFormat, expiration1))
 {
 	if (dateFormat == NULL)
 	{
@@ -101,6 +140,8 @@ CachedDateFormat::CachedDateFormat(const DateFormatPtr& dateFormat,
 	}
 }
 
+CachedDateFormat::~CachedDateFormat(){}
+
 
 /**
  * Finds start of millisecond field in formatted time.
@@ -209,9 +250,9 @@ void CachedDateFormat::format(LogString& buf, log4cxx_time_t now, Pool& p) const
 	// If the current requested time is identical to the previously
 	//     requested time, then append the cache contents.
 	//
-	if (now == previousTime)
+	if (now == m_priv->previousTime)
 	{
-		buf.append(cache);
+		buf.append(m_priv->cache);
 		return;
 	}
 
@@ -219,28 +260,28 @@ void CachedDateFormat::format(LogString& buf, log4cxx_time_t now, Pool& p) const
 	//   If millisecond pattern was not unrecognized
 	//     (that is if it was found or milliseconds did not appear)
 	//
-	if (millisecondStart != UNRECOGNIZED_MILLISECONDS)
+	if (m_priv->millisecondStart != UNRECOGNIZED_MILLISECONDS)
 	{
 		//    Check if the cache is still valid.
 		//    If the requested time is within the same integral second
 		//       as the last request and a shorter expiration was not requested.
-		if (now < slotBegin + expiration
-			&& now >= slotBegin
-			&& now < slotBegin + 1000000L)
+		if (now < m_priv->slotBegin + m_priv->expiration
+			&& now >= m_priv->slotBegin
+			&& now < m_priv->slotBegin + 1000000L)
 		{
 			//
 			//    if there was a millisecond field then update it
 			//
-			if (millisecondStart >= 0)
+			if (m_priv->millisecondStart >= 0)
 			{
-				millisecondFormat((int) ((now - slotBegin) / 1000), cache, millisecondStart);
+				millisecondFormat((int) ((now - m_priv->slotBegin) / 1000), m_priv->cache, m_priv->millisecondStart);
 			}
 
 			//
 			//   update the previously requested time
 			//      (the slot begin should be unchanged)
-			previousTime = now;
-			buf.append(cache);
+			m_priv->previousTime = now;
+			buf.append(m_priv->cache);
 
 			return;
 		}
@@ -249,24 +290,24 @@ void CachedDateFormat::format(LogString& buf, log4cxx_time_t now, Pool& p) const
 	//
 	//  could not use previous value.
 	//    Call underlying formatter to format date.
-	cache.erase(cache.begin(), cache.end());
-	formatter->format(cache, now, p);
-	buf.append(cache);
-	previousTime = now;
-	slotBegin = (previousTime / 1000000) * 1000000;
+	m_priv->cache.erase(m_priv->cache.begin(), m_priv->cache.end());
+	m_priv->formatter->format(m_priv->cache, now, p);
+	buf.append(m_priv->cache);
+	m_priv->previousTime = now;
+	m_priv->slotBegin = (m_priv->previousTime / 1000000) * 1000000;
 
-	if (slotBegin > previousTime)
+	if (m_priv->slotBegin > m_priv->previousTime)
 	{
-		slotBegin -= 1000000;
+		m_priv->slotBegin -= 1000000;
 	}
 
 	//
 	//    if the milliseconds field was previous found
 	//       then reevaluate in case it moved.
 	//
-	if (millisecondStart >= 0)
+	if (m_priv->millisecondStart >= 0)
 	{
-		millisecondStart = findMillisecondStart(now, cache, formatter, p);
+		m_priv->millisecondStart = findMillisecondStart(now, m_priv->cache, m_priv->formatter, p);
 	}
 }
 
@@ -295,16 +336,16 @@ void CachedDateFormat::millisecondFormat(int millis,
  */
 void CachedDateFormat::setTimeZone(const TimeZonePtr& timeZone)
 {
-	formatter->setTimeZone(timeZone);
-	previousTime = std::numeric_limits<log4cxx_time_t>::min();
-	slotBegin = std::numeric_limits<log4cxx_time_t>::min();
+	m_priv->formatter->setTimeZone(timeZone);
+	m_priv->previousTime = std::numeric_limits<log4cxx_time_t>::min();
+	m_priv->slotBegin = std::numeric_limits<log4cxx_time_t>::min();
 }
 
 
 
 void CachedDateFormat::numberFormat(LogString& s, int n, Pool& p) const
 {
-	formatter->numberFormat(s, n, p);
+	m_priv->formatter->numberFormat(s, n, p);
 }
 
 
diff --git a/src/main/cpp/cyclicbuffer.cpp b/src/main/cpp/cyclicbuffer.cpp
index 9f4a9a0..fe1d012 100644
--- a/src/main/cpp/cyclicbuffer.cpp
+++ b/src/main/cpp/cyclicbuffer.cpp
@@ -25,6 +25,16 @@ using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::spi;
 
+struct CyclicBuffer::CyclicBufferPriv{
+	CyclicBufferPriv(int maxSize1) :
+		ea(maxSize1), first(0), last(0), numElems(0), maxSize(maxSize1){}
+
+	log4cxx::spi::LoggingEventList ea;
+	int first;
+	int last;
+	int numElems;
+	int maxSize;
+};
 
 /**
 Instantiate a new CyclicBuffer of at most <code>maxSize</code> events.
@@ -32,7 +42,7 @@ The <code>maxSize</code> argument must a positive integer.
 @param maxSize The maximum number of elements in the buffer.
 */
 CyclicBuffer::CyclicBuffer(int maxSize1)
-	: ea(maxSize1), first(0), last(0), numElems(0), maxSize(maxSize1)
+	: m_priv(std::make_unique<CyclicBufferPriv>(maxSize1))
 {
 	if (maxSize1 < 1)
 	{
@@ -53,20 +63,20 @@ Add an <code>event</code> as the last event in the buffer.
 */
 void CyclicBuffer::add(const spi::LoggingEventPtr& event)
 {
-	ea[last] = event;
+	m_priv->ea[m_priv->last] = event;
 
-	if (++last == maxSize)
+	if (++m_priv->last == m_priv->maxSize)
 	{
-		last = 0;
+		m_priv->last = 0;
 	}
 
-	if (numElems < maxSize)
+	if (m_priv->numElems < m_priv->maxSize)
 	{
-		numElems++;
+		m_priv->numElems++;
 	}
-	else if (++first == maxSize)
+	else if (++m_priv->first == m_priv->maxSize)
 	{
-		first = 0;
+		m_priv->first = 0;
 	}
 }
 
@@ -78,12 +88,12 @@ currently in the buffer, then <code>null</code> is returned.
 */
 spi::LoggingEventPtr CyclicBuffer::get(int i)
 {
-	if (i < 0 || i >= numElems)
+	if (i < 0 || i >= m_priv->numElems)
 	{
 		return 0;
 	}
 
-	return ea[(first + i) % maxSize];
+	return m_priv->ea[(m_priv->first + i) % m_priv->maxSize];
 }
 
 /**
@@ -94,15 +104,15 @@ spi::LoggingEventPtr CyclicBuffer::get()
 {
 	LoggingEventPtr r;
 
-	if (numElems > 0)
+	if (m_priv->numElems > 0)
 	{
-		numElems--;
-		r = ea[first];
-		ea[first] = 0;
+		m_priv->numElems--;
+		r = m_priv->ea[m_priv->first];
+		m_priv->ea[m_priv->first] = 0;
 
-		if (++first == maxSize)
+		if (++m_priv->first == m_priv->maxSize)
 		{
-			first = 0;
+			m_priv->first = 0;
 		}
 	}
 
@@ -124,38 +134,48 @@ void CyclicBuffer::resize(int newSize)
 		throw IllegalArgumentException(msg);
 	}
 
-	if (newSize == numElems)
+	if (newSize == m_priv->numElems)
 	{
 		return;    // nothing to do
 	}
 
 	LoggingEventList temp(newSize);
 
-	int loopLen = newSize < numElems ? newSize : numElems;
+	int loopLen = newSize < m_priv->numElems ? newSize : m_priv->numElems;
 	int i;
 
 	for (i = 0; i < loopLen; i++)
 	{
-		temp[i] = ea[first];
-		ea[first] = 0;
+		temp[i] = m_priv->ea[m_priv->first];
+		m_priv->ea[m_priv->first] = 0;
 
-		if (++first == numElems)
+		if (++m_priv->first == m_priv->numElems)
 		{
-			first = 0;
+			m_priv->first = 0;
 		}
 	}
 
-	ea = temp;
-	first = 0;
-	numElems = loopLen;
-	maxSize = newSize;
+	m_priv->ea = temp;
+	m_priv->first = 0;
+	m_priv->numElems = loopLen;
+	m_priv->maxSize = newSize;
 
 	if (loopLen == newSize)
 	{
-		last = 0;
+		m_priv->last = 0;
 	}
 	else
 	{
-		last = loopLen;
+		m_priv->last = loopLen;
 	}
 }
+
+int CyclicBuffer::getMaxSize() const
+{
+	return m_priv->maxSize;
+}
+
+int CyclicBuffer::length() const
+{
+	return m_priv->numElems;
+}
diff --git a/src/main/cpp/datagrampacket.cpp b/src/main/cpp/datagrampacket.cpp
index a9577ec..73b9f28 100644
--- a/src/main/cpp/datagrampacket.cpp
+++ b/src/main/cpp/datagrampacket.cpp
@@ -20,12 +20,51 @@
 
 using namespace log4cxx::helpers;
 
+struct DatagramPacket::DatagramPacketPriv{
+	DatagramPacketPriv(void* buf1, int length1)
+		: buf(buf1), offset(0), length(length1), address(), port(0)
+	{
+	}
+
+	DatagramPacketPriv(void* buf1, int length1, InetAddressPtr address1,
+		int port1)
+		: buf(buf1), offset(0), length(length1), address(address1), port(port1)
+	{
+	}
+
+	DatagramPacketPriv(void* buf1, int offset1, int length1)
+		: buf(buf1), offset(offset1), length(length1), address(), port(0)
+	{
+	}
+
+	DatagramPacketPriv(void* buf1, int offset1, int length1,
+		InetAddressPtr address1, int port1)
+		: buf(buf1), offset(offset1), length(length1), address(address1), port(port1)
+	{
+	}
+
+	/** the data for this packet. */
+	void* buf;
+
+	/** The offset of the data for this packet. */
+	int offset;
+
+	/** The length of the data for this packet. */
+	int length;
+
+	/** The IP address for this packet. */
+	InetAddressPtr address;
+
+	/** The UDP port number of the remote host. */
+	int port;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(DatagramPacket)
 
 /** Constructs a DatagramPacket for receiving packets of length
 <code>length</code>. */
 DatagramPacket::DatagramPacket(void* buf1, int length1)
-	: buf(buf1), offset(0), length(length1), address(), port(0)
+	: m_priv(std::make_unique<DatagramPacketPriv>(buf1, length1))
 {
 }
 
@@ -34,14 +73,14 @@ DatagramPacket::DatagramPacket(void* buf1, int length1)
 host. */
 DatagramPacket::DatagramPacket(void* buf1, int length1, InetAddressPtr address1,
 	int port1)
-	: buf(buf1), offset(0), length(length1), address(address1), port(port1)
+	: m_priv(std::make_unique<DatagramPacketPriv>(buf1, length1, address1, port1))
 {
 }
 
 /** Constructs a DatagramPacket for receiving packets of length
 <code>length</code>, specifying an offset into the buffer. */
 DatagramPacket::DatagramPacket(void* buf1, int offset1, int length1)
-	: buf(buf1), offset(offset1), length(length1), address(), port(0)
+	: m_priv(std::make_unique<DatagramPacketPriv>(buf1, offset1, length1))
 {
 }
 /** Constructs a datagram packet for sending packets of length
@@ -49,10 +88,62 @@ DatagramPacket::DatagramPacket(void* buf1, int offset1, int length1)
 specified port number on the specified host. */
 DatagramPacket::DatagramPacket(void* buf1, int offset1, int length1,
 	InetAddressPtr address1, int port1)
-	: buf(buf1), offset(offset1), length(length1), address(address1), port(port1)
+	: m_priv(std::make_unique<DatagramPacketPriv>(buf1, offset1, length1, address1, port1))
 {
 }
 
 DatagramPacket::~DatagramPacket()
 {
 }
+
+InetAddressPtr DatagramPacket::getAddress() const
+{
+	return m_priv->address;
+}
+
+void* DatagramPacket::getData() const
+{
+	return m_priv->buf;
+}
+
+int DatagramPacket::getLength() const
+{
+	return m_priv->length;
+}
+
+int DatagramPacket::getOffset() const
+{
+	return m_priv->offset;
+}
+
+int DatagramPacket::getPort() const
+{
+	return m_priv->port;
+}
+
+void DatagramPacket::setAddress(InetAddressPtr address1)
+{
+	m_priv->address = address1;
+}
+
+void DatagramPacket::setData(void* buf1)
+{
+	m_priv->buf = buf1;
+}
+
+void DatagramPacket::setData(void* buf1, int offset1, int length1)
+{
+	m_priv->buf = buf1;
+	m_priv->offset = offset1;
+	m_priv->length = length1;
+}
+
+void DatagramPacket::setLength(int length1)
+{
+	m_priv->length = length1;
+}
+
+void DatagramPacket::setPort(int port1)
+{
+	m_priv->port = port1;
+}
diff --git a/src/main/cpp/datagramsocket.cpp b/src/main/cpp/datagramsocket.cpp
index 4b2a1f8..b5ee30f 100644
--- a/src/main/cpp/datagramsocket.cpp
+++ b/src/main/cpp/datagramsocket.cpp
@@ -25,16 +25,48 @@
 
 using namespace log4cxx::helpers;
 
+struct DatagramSocket::DatagramSocketPriv{
+	DatagramSocketPriv()
+		: socket(0), address(), localAddress(), port(0), localPort(0)
+	{
+	}
+
+	DatagramSocketPriv(int localPort1)
+		: socket(0), address(), localAddress(), port(0), localPort(0)
+	{
+	}
+
+	DatagramSocketPriv(int localPort1, InetAddressPtr localAddress1)
+		: socket(0), address(), localAddress(), port(0), localPort(0)
+	{
+	}
+
+	/** The APR socket */
+	apr_socket_t* socket;
+
+	/** The memory pool for the socket */
+	Pool socketPool;
+
+	InetAddressPtr address;
+
+	InetAddressPtr localAddress;
+
+	int port;
+
+	/** The local port number to which this socket is connected. */
+	int localPort;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(DatagramSocket)
 
 DatagramSocket::DatagramSocket()
-	: socket(0), address(), localAddress(), port(0), localPort(0)
+	: m_priv(std::make_unique<DatagramSocketPriv>())
 {
 	create();
 }
 
 DatagramSocket::DatagramSocket(int localPort1)
-	: socket(0), address(), localAddress(), port(0), localPort(0)
+	: m_priv(std::make_unique<DatagramSocketPriv>(localPort1))
 {
 	InetAddressPtr bindAddr = InetAddress::anyAddress();
 
@@ -43,7 +75,7 @@ DatagramSocket::DatagramSocket(int localPort1)
 }
 
 DatagramSocket::DatagramSocket(int localPort1, InetAddressPtr localAddress1)
-	: socket(0), address(), localAddress(), port(0), localPort(0)
+	: m_priv(std::make_unique<DatagramSocketPriv>(localPort1, localAddress1))
 {
 	create();
 	bind(localPort1, localAddress1);
@@ -78,39 +110,39 @@ void DatagramSocket::bind(int localPort1, InetAddressPtr localAddress1)
 	}
 
 	// bind the socket to the address
-	status = apr_socket_bind(socket, server_addr);
+	status = apr_socket_bind(m_priv->socket, server_addr);
 
 	if (status != APR_SUCCESS)
 	{
 		throw BindException(status);
 	}
 
-	this->localPort = localPort1;
-	this->localAddress = localAddress1;
+	m_priv->localPort = localPort1;
+	m_priv->localAddress = localAddress1;
 }
 
 /** Close the socket.*/
 void DatagramSocket::close()
 {
-	if (socket != 0)
+	if (m_priv->socket != 0)
 	{
-		apr_status_t status = apr_socket_close(socket);
+		apr_status_t status = apr_socket_close(m_priv->socket);
 
 		if (status != APR_SUCCESS)
 		{
 			throw SocketException(status);
 		}
 
-		socket = 0;
-		localPort = 0;
+		m_priv->socket = 0;
+		m_priv->localPort = 0;
 	}
 }
 
 void DatagramSocket::connect(InetAddressPtr address1, int port1)
 {
 
-	this->address = address1;
-	this->port = port1;
+	m_priv->address = address1;
+	m_priv->port = port1;
 
 	Pool addrPool;
 
@@ -119,7 +151,7 @@ void DatagramSocket::connect(InetAddressPtr address1, int port1)
 	apr_sockaddr_t* client_addr;
 	apr_status_t status =
 		apr_sockaddr_info_get(&client_addr, hostAddr.c_str(), APR_INET,
-			port, 0, addrPool.getAPRPool());
+			m_priv->port, 0, addrPool.getAPRPool());
 
 	if (status != APR_SUCCESS)
 	{
@@ -127,7 +159,7 @@ void DatagramSocket::connect(InetAddressPtr address1, int port1)
 	}
 
 	// connect the socket
-	status = apr_socket_connect(socket, client_addr);
+	status = apr_socket_connect(m_priv->socket, client_addr);
 
 	if (status != APR_SUCCESS)
 	{
@@ -141,8 +173,8 @@ void DatagramSocket::create()
 	apr_socket_t* newSocket;
 	apr_status_t status =
 		apr_socket_create(&newSocket, APR_INET, SOCK_DGRAM,
-			APR_PROTO_UDP, socketPool.getAPRPool());
-	socket = newSocket;
+			APR_PROTO_UDP, m_priv->socketPool.getAPRPool());
+	m_priv->socket = newSocket;
 
 	if (status != APR_SUCCESS)
 	{
@@ -169,7 +201,7 @@ void DatagramSocket::receive(DatagramPacketPtr& p)
 
 	// receive the datagram packet
 	apr_size_t len = p->getLength();
-	status = apr_socket_recvfrom(addr, socket, 0,
+	status = apr_socket_recvfrom(addr, m_priv->socket, 0,
 			(char*)p->getData(), &len);
 
 	if (status != APR_SUCCESS)
@@ -197,7 +229,7 @@ void DatagramSocket::send(DatagramPacketPtr& p)
 
 	// send the datagram packet
 	apr_size_t len = p->getLength();
-	status = apr_socket_sendto(socket, addr, 0,
+	status = apr_socket_sendto(m_priv->socket, addr, 0,
 			(char*)p->getData(), &len);
 
 	if (status != APR_SUCCESS)
@@ -205,3 +237,38 @@ void DatagramSocket::send(DatagramPacketPtr& p)
 		throw IOException(status);
 	}
 }
+
+InetAddressPtr DatagramSocket::getInetAddress() const
+{
+	return m_priv->address;
+}
+
+InetAddressPtr DatagramSocket::getLocalAddress() const
+{
+	return m_priv->localAddress;
+}
+
+int DatagramSocket::getLocalPort() const
+{
+	return m_priv->localPort;
+}
+
+int DatagramSocket::getPort() const
+{
+	return m_priv->port;
+}
+
+bool DatagramSocket::isBound() const
+{
+	return m_priv->localPort != 0;
+}
+
+bool DatagramSocket::isClosed() const
+{
+	return m_priv->socket != 0;
+}
+
+bool DatagramSocket::isConnected() const
+{
+	return m_priv->port != 0;
+}
diff --git a/src/main/include/log4cxx/helpers/bufferedwriter.h b/src/main/include/log4cxx/helpers/bufferedwriter.h
index 0b38a5d..6bc7a12 100644
--- a/src/main/include/log4cxx/helpers/bufferedwriter.h
+++ b/src/main/include/log4cxx/helpers/bufferedwriter.h
@@ -37,10 +37,9 @@ namespace helpers
 */
 class LOG4CXX_EXPORT BufferedWriter : public Writer
 {
-	private:
-		WriterPtr out;
-		size_t sz;
-		LogString buf;
+private:
+	struct BufferedWriterPriv;
+	std::unique_ptr<BufferedWriterPriv> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(BufferedWriter)
diff --git a/src/main/include/log4cxx/helpers/bytearrayinputstream.h b/src/main/include/log4cxx/helpers/bytearrayinputstream.h
index b484469..a5df60a 100644
--- a/src/main/include/log4cxx/helpers/bytearrayinputstream.h
+++ b/src/main/include/log4cxx/helpers/bytearrayinputstream.h
@@ -41,8 +41,8 @@ LOG4CXX_LIST_DEF(ByteList, unsigned char);
 class LOG4CXX_EXPORT ByteArrayInputStream : public InputStream
 {
 	private:
-		ByteList buf;
-		size_t pos;
+		struct ByteArrayInputStreamPriv;
+		std::unique_ptr<ByteArrayInputStreamPriv> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(ByteArrayInputStream)
diff --git a/src/main/include/log4cxx/helpers/bytearrayoutputstream.h b/src/main/include/log4cxx/helpers/bytearrayoutputstream.h
index 90e397c..f4f96c2 100644
--- a/src/main/include/log4cxx/helpers/bytearrayoutputstream.h
+++ b/src/main/include/log4cxx/helpers/bytearrayoutputstream.h
@@ -44,7 +44,8 @@ LOG4CXX_LIST_DEF(ByteList, unsigned char);
 class LOG4CXX_EXPORT ByteArrayOutputStream : public OutputStream
 {
 	private:
-		ByteList array;
+		struct ByteArrayOutputStreamPriv;
+		std::unique_ptr<ByteArrayOutputStreamPriv> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(ByteArrayOutputStream)
diff --git a/src/main/include/log4cxx/helpers/bytebuffer.h b/src/main/include/log4cxx/helpers/bytebuffer.h
index 3c68568..21f8916 100644
--- a/src/main/include/log4cxx/helpers/bytebuffer.h
+++ b/src/main/include/log4cxx/helpers/bytebuffer.h
@@ -33,10 +33,8 @@ namespace helpers
 class LOG4CXX_EXPORT ByteBuffer
 {
 	private:
-		char* base;
-		size_t pos;
-		size_t lim;
-		size_t cap;
+		struct ByteBufferPriv;
+		std::unique_ptr<ByteBufferPriv> m_priv;
 
 	public:
 		ByteBuffer(char* data, size_t capacity);
@@ -45,35 +43,14 @@ class LOG4CXX_EXPORT ByteBuffer
 		void clear();
 		void flip();
 
-		inline char* data()
-		{
-			return base;
-		}
-		inline const char* data() const
-		{
-			return base;
-		}
-		inline char* current()
-		{
-			return base + pos;
-		}
-		inline const char* current() const
-		{
-			return base + pos;
-		}
-		inline size_t limit() const
-		{
-			return lim;
-		}
+		char* data();
+		const char* data() const;
+		char* current();
+		const char* current() const;
+		size_t limit() const;
 		void limit(size_t newLimit);
-		inline size_t position() const
-		{
-			return pos;
-		}
-		inline size_t remaining() const
-		{
-			return lim - pos;
-		}
+		size_t position() const;
+		size_t remaining() const;
 		void position(size_t newPosition);
 
 		bool put(char byte);
diff --git a/src/main/include/log4cxx/helpers/cacheddateformat.h b/src/main/include/log4cxx/helpers/cacheddateformat.h
index fcfcedc..94c543d 100644
--- a/src/main/include/log4cxx/helpers/cacheddateformat.h
+++ b/src/main/include/log4cxx/helpers/cacheddateformat.h
@@ -87,40 +87,8 @@ class LOG4CXX_EXPORT CachedDateFormat : public log4cxx::helpers::DateFormat
 		 */
 		static const logchar zeroString[];
 
-		/**
-		 *   Wrapped formatter.
-		 */
-		log4cxx::helpers::DateFormatPtr formatter;
-
-		/**
-		 *  Index of initial digit of millisecond pattern or
-		 *   UNRECOGNIZED_MILLISECONDS or NO_MILLISECONDS.
-		 */
-		mutable int millisecondStart;
-
-		/**
-		 *  Integral second preceding the previous convered Date.
-		 */
-		mutable log4cxx_time_t slotBegin;
-
-
-		/**
-		 *  Cache of previous conversion.
-		 */
-		mutable LogString cache;
-
-
-		/**
-		 *  Maximum validity period for the cache.
-		 *  Typically 1, use cache for duplicate requests only, or
-		 *  1000000, use cache for requests within the same integral second.
-		 */
-		const int expiration;
-
-		/**
-		 *  Date requested in previous conversion.
-		 */
-		mutable log4cxx_time_t previousTime;
+		struct CachedDateFormatPriv;
+		std::unique_ptr<CachedDateFormatPriv> m_priv;
 
 	public:
 		/**
@@ -132,6 +100,7 @@ class LOG4CXX_EXPORT CachedDateFormat : public log4cxx::helpers::DateFormat
 		 *      caching or 1 to only use cache for duplicate requests.
 		 */
 		CachedDateFormat(const log4cxx::helpers::DateFormatPtr& dateFormat, int expiration);
+		~CachedDateFormat();
 
 		/**
 		 * Finds start of millisecond field in formatted time.
diff --git a/src/main/include/log4cxx/helpers/cyclicbuffer.h b/src/main/include/log4cxx/helpers/cyclicbuffer.h
index 0456dcd..f05a9e9 100644
--- a/src/main/include/log4cxx/helpers/cyclicbuffer.h
+++ b/src/main/include/log4cxx/helpers/cyclicbuffer.h
@@ -19,6 +19,7 @@
 #define _LOG4CXX_HELPERS_CYCLICBUFFER_H
 
 #include <log4cxx/spi/loggingevent.h>
+#include <memory>
 
 namespace log4cxx
 {
@@ -33,11 +34,9 @@ just the first or last element.
 */
 class LOG4CXX_EXPORT CyclicBuffer
 {
-		log4cxx::spi::LoggingEventList ea;
-		int first;
-		int last;
-		int numElems;
-		int maxSize;
+		private:
+	struct CyclicBufferPriv;
+	std::unique_ptr<CyclicBufferPriv> m_priv;
 
 	public:
 		/**
@@ -63,10 +62,7 @@ class LOG4CXX_EXPORT CyclicBuffer
 		*/
 		spi::LoggingEventPtr get(int i);
 
-		int getMaxSize() const
-		{
-			return maxSize;
-		}
+		int getMaxSize() const;
 
 		/**
 		Get the oldest (first) element in the buffer. The oldest element
@@ -79,10 +75,7 @@ class LOG4CXX_EXPORT CyclicBuffer
 		guaranteed to be in the range 0 to <code>maxSize</code>
 		(inclusive).
 		*/
-		int length() const
-		{
-			return numElems;
-		}
+		int length() const;
 
 		/**
 		Resize the cyclic buffer to <code>newSize</code>.
diff --git a/src/main/include/log4cxx/helpers/datagrampacket.h b/src/main/include/log4cxx/helpers/datagrampacket.h
index 1ac1f6b..f4e9e60 100644
--- a/src/main/include/log4cxx/helpers/datagrampacket.h
+++ b/src/main/include/log4cxx/helpers/datagrampacket.h
@@ -35,21 +35,9 @@ and might arrive in any order.
 */
 class LOG4CXX_EXPORT DatagramPacket : public helpers::Object
 {
-	protected:
-		/** the data for this packet. */
-		void* buf;
-
-		/** The offset of the data for this packet. */
-		int offset;
-
-		/** The length of the data for this packet. */
-		int length;
-
-		/** The IP address for this packet. */
-		InetAddressPtr address;
-
-		/** The UDP port number of the remote host. */
-		int port;
+	private:
+		struct DatagramPacketPriv;
+		std::unique_ptr<DatagramPacketPriv> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(DatagramPacket)
@@ -80,67 +68,35 @@ class LOG4CXX_EXPORT DatagramPacket : public helpers::Object
 
 		/** Returns the IP address of the machine to which this datagram
 		is being sent or from which the datagram was received. */
-		inline InetAddressPtr getAddress() const
-		{
-			return address;
-		}
+		InetAddressPtr getAddress() const;
 
 		/** Returns the data received or the data to be sent. */
-		inline void* getData() const
-		{
-			return buf;
-		}
+		void* getData() const;
 
 		/** Returns the length of the data to be sent or the length of the
 		data received. */
-		inline int getLength() const
-		{
-			return length;
-		}
+		int getLength() const;
 
 		/** Returns the offset of the data to be sent or the offset of the
 		data received. */
-		inline int getOffset() const
-		{
-			return offset;
-		}
+		int getOffset() const;
 
 		/** Returns the port number on the remote host to which this
 		 datagram is being sent or from which the datagram was received. */
-		inline int getPort() const
-		{
-			return port;
-		}
+		int getPort() const;
 
-		inline void setAddress(InetAddressPtr address1)
-		{
-			this->address = address1;
-		}
+		void setAddress(InetAddressPtr address1);
 
 		/** Set the data buffer for this packet. */
-		inline void setData(void* buf1)
-		{
-			this->buf = buf1;
-		}
+		void setData(void* buf1);
 
 		/** Set the data buffer for this packet. */
-		inline void setData(void* buf1, int offset1, int length1)
-		{
-			this->buf = buf1;
-			this->offset = offset1;
-			this->length = length1;
-		}
+		void setData(void* buf1, int offset1, int length1);
 
 		/** Set the length for this packet. */
-		inline void setLength(int length1)
-		{
-			this->length = length1;
-		}
-
-		inline void setPort(int port1)
-		{
-			this->port = port1;
-		}
+		void setLength(int length1);
+
+		void setPort(int port1);
 
 	private:
 		//
diff --git a/src/main/include/log4cxx/helpers/datagramsocket.h b/src/main/include/log4cxx/helpers/datagramsocket.h
index 2f8924e..04df8ed 100644
--- a/src/main/include/log4cxx/helpers/datagramsocket.h
+++ b/src/main/include/log4cxx/helpers/datagramsocket.h
@@ -23,10 +23,6 @@
 #include <log4cxx/helpers/pool.h>
 #include <log4cxx/helpers/datagrampacket.h>
 
-extern "C" {
-	struct apr_socket_t;
-}
-
 namespace log4cxx
 {
 namespace helpers
@@ -69,47 +65,26 @@ class LOG4CXX_EXPORT DatagramSocket : public helpers::Object
 		void connect(InetAddressPtr address, int port);
 
 		/** Returns the address to which this socket is connected. */
-		inline InetAddressPtr getInetAddress() const
-		{
-			return address;
-		}
+		InetAddressPtr getInetAddress() const;
 
 		/** Gets the local address to which the socket is bound. */
-		inline InetAddressPtr getLocalAddress() const
-		{
-			return localAddress;
-		}
+		InetAddressPtr getLocalAddress() const;
 
 		/**  Returns the port number on the local host to which this
 		socket is bound. */
-		inline int getLocalPort() const
-		{
-			return localPort;
-		}
+		int getLocalPort() const;
 
 		/** Returns the port for this socket */
-		inline int getPort() const
-		{
-			return port;
-		}
+		int getPort() const;
 
 		/** Returns the binding state of the socket. **/
-		inline bool isBound() const
-		{
-			return localPort != 0;
-		}
+		bool isBound() const;
 
 		/** Returns wether the socket is closed or not. */
-		inline bool isClosed() const
-		{
-			return socket != 0;
-		}
+		bool isClosed() const;
 
 		/** Returns the connection state of the socket. */
-		inline bool isConnected() const
-		{
-			return port != 0;
-		}
+		bool isConnected() const;
 
 		/**  Receives a datagram packet from this socket. */
 		void receive(DatagramPacketPtr& p);
@@ -120,20 +95,9 @@ class LOG4CXX_EXPORT DatagramSocket : public helpers::Object
 	private:
 		DatagramSocket(const DatagramSocket&);
 		DatagramSocket& operator=(const DatagramSocket&);
-		/** The APR socket */
-		apr_socket_t* socket;
-
-		/** The memory pool for the socket */
-		Pool socketPool;
-
-		InetAddressPtr address;
-
-		InetAddressPtr localAddress;
-
-		int port;
 
-		/** The local port number to which this socket is connected. */
-		int localPort;
+		struct DatagramSocketPriv;
+		std::unique_ptr<DatagramSocketPriv> m_priv;
 
 };
 LOG4CXX_PTR_DEF(DatagramSocket);
diff --git a/src/main/include/log4cxx/spi/configurator.h b/src/main/include/log4cxx/spi/configurator.h
index 89cf853..3108618 100644
--- a/src/main/include/log4cxx/spi/configurator.h
+++ b/src/main/include/log4cxx/spi/configurator.h
@@ -33,7 +33,6 @@ class LOG4CXX_EXPORT Configurator : virtual public helpers::Object
 {
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(Configurator)
-		Configurator();
 
 		/**
 		Interpret a resource pointed by a URL and set up log4j accordingly.
@@ -47,11 +46,12 @@ class LOG4CXX_EXPORT Configurator : virtual public helpers::Object
 		virtual void doConfigure(const File& configFileName,
 			spi::LoggerRepositoryPtr repository) = 0;
 
+protected:
+		Configurator();
 
 	private:
 		Configurator(const Configurator&);
 		Configurator& operator=(const Configurator&);
-		bool initialized;
 };
 
 LOG4CXX_PTR_DEF(Configurator);

[logging-log4cxx] 08/20: Added some preliminary notes on the big changes

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b895c584cadfd13a0edcf5d9cd653275987cb099
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Thu Nov 4 22:08:09 2021 -0400

    Added some preliminary notes on the big changes
---
 src/site/markdown/changes-notes.md  |  30 ++++++++
 src/site/markdown/library-design.md | 138 ++++++++++++++++++++++++++++++++++++
 2 files changed, 168 insertions(+)

diff --git a/src/site/markdown/changes-notes.md b/src/site/markdown/changes-notes.md
new file mode 100644
index 0000000..5b8ea78
--- /dev/null
+++ b/src/site/markdown/changes-notes.md
@@ -0,0 +1,30 @@
+# Changes for next major version of Log4cxx
+===
+<!--
+ Note: License header cannot be first, as doxygen does not generate
+ cleanly if it before the '==='
+-->
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+* Removed log4j style Java serialization.  Due to Java's inherent problems
+with serialization, and the fact that Chainsaw no longer supports it, it has
+been completely removed.
+* Removal of TTCCLayout.  If you still want this layout, use a PatternLayout
+with a format similar to the following:
+`%r [%t] %-5p - %m%n`
+* Removal of DateLayout.  Use PatternLayout instead.
diff --git a/src/site/markdown/library-design.md b/src/site/markdown/library-design.md
new file mode 100644
index 0000000..ecd90a0
--- /dev/null
+++ b/src/site/markdown/library-design.md
@@ -0,0 +1,138 @@
+# Library Design Notes
+===
+<!--
+ Note: License header cannot be first, as doxygen does not generate
+ cleanly if it before the '==='
+-->
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+With version x.y of Log4cxx, the library is designed to be ABI stable, such
+that any internal changes to classes will not cause client code to break.
+In order to do this, there are a few patterns that are used in order to make
+sure that it stays stable.
+
+# Use of class-specific structs to hold data.
+
+This looks like the following in a header file:
+
+```
+class SomeClass {
+public:
+  SomeClass();
+  ~SomeClass();
+
+private:
+  struct SomeClassPriv;
+  std::unique_ptr<SomeClassPriv> m_priv;
+}
+```
+
+In the .cpp file, you then can define it and use it like the following:
+
+```
+struct SomeClass::SomeClassPriv {
+    int someMemberVariable;
+};
+
+SomeClass::SomeClass() :
+    m_priv(std::make_unique<SomeClassPriv>()){}
+```
+
+This ensures that if new members need to be added to a class, or old ones removed,
+the size of the class will not change.
+
+# Inheriting classes with private data
+
+Because subclasses no longer have direct access to their parents' variables,
+a slight variation is used to allow subclasses to access parental variables,
+and to ensure that the parent only stores one pointer.  This results in a
+separate hierarchy for the private data from the hierarchy of the class.
+
+This can be done to any depth that is required.
+
+## Example
+
+Parent-private.h:
+```
+#include "Parent.h"
+
+struct Parent::ParentPrivate{
+  int parentVariable;
+};
+```
+
+Parent.h:
+```
+class Parent {
+pubic:
+  struct ParentPrivate;
+  Parent( std::unique_ptr<ParentPrivate> priv );
+  virtual ~Parent();
+
+protected:
+  std::unique_ptr<AppenderSkeletonPrivate> m_priv;
+};
+```
+
+Parent.cpp:
+```
+Parent::Parent( std::unique_ptr<ParentPrivate> priv ) :
+  m_priv( std::move(priv) ){}
+```
+
+Child.h:
+```
+#include "Parent.h"
+
+class Child : public Parent {
+public:
+  Child();
+  ~Child();
+
+  void example();
+
+private:
+  struct ChildPriv;
+};
+```
+
+Child.cpp:
+```
+#include "Parent-private.h"
+#include "Child.h"
+
+struct Child::ChildPriv : public Parent::ParentPriv {
+  int childVariable;
+};
+
+Child::Child() : Parent(std::make_unique<ChildPriv>() ){}
+
+void Child::example(){
+  m_priv->parentVariable = ... ; // Can access parent variable via m_priv
+  static_cast<ChildPriv*>(m_priv.get())->childVariable = ... ; // Must static_cast to access child
+}
+```
+
+Caveats with this approach:
+* All variables effectively become protected.  If they must be private for
+some reason, you could probably make the Priv struct be a friend class.
+
+# See Also
+
+Qt documentation on D-Pointers, which this pattern is based off of: 
+https://wiki.qt.io/D-Pointer

[logging-log4cxx] 12/20: Made hierarchy ABI stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 09b132ba1fb75de8dd9e2898ae81bac7597f7c7b
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 18:08:05 2021 -0400

    Made hierarchy ABI stable
---
 src/main/include/log4cxx/hierarchy.h | 22 ++--------------------
 1 file changed, 2 insertions(+), 20 deletions(-)

diff --git a/src/main/include/log4cxx/hierarchy.h b/src/main/include/log4cxx/hierarchy.h
index 5ca5769..0cf6963 100644
--- a/src/main/include/log4cxx/hierarchy.h
+++ b/src/main/include/log4cxx/hierarchy.h
@@ -62,26 +62,8 @@ class LOG4CXX_EXPORT Hierarchy :
 	public std::enable_shared_from_this<Hierarchy>
 {
 	private:
-		log4cxx::helpers::Pool pool;
-		mutable std::mutex mutex;
-		bool configured;
-
-		spi::LoggerFactoryPtr defaultFactory;
-		spi::HierarchyEventListenerList listeners;
-
-		typedef std::map<LogString, LoggerPtr> LoggerMap;
-		std::unique_ptr<LoggerMap> loggers;
-
-		typedef std::map<LogString, ProvisionNode> ProvisionNodeMap;
-		std::unique_ptr<ProvisionNodeMap> provisionNodes;
-
-		LoggerPtr root;
-
-		int thresholdInt;
-		LevelPtr threshold;
-
-		bool emittedNoAppenderWarning;
-		bool emittedNoResourceBundleWarning;
+		struct HierarchyPrivate;
+		std::unique_ptr<HierarchyPrivate> m_priv;
 
 	public:
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(Hierarchy)

[logging-log4cxx] 18/20: Fix test case

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 26b8ffdb426dfc6ed6f2e9f49fe63536b1c1e219
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 20:06:17 2021 -0400

    Fix test case
---
 src/test/resources/input/xml/DOMTestCase1.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/test/resources/input/xml/DOMTestCase1.xml b/src/test/resources/input/xml/DOMTestCase1.xml
index c75ab26..3fd822c 100644
--- a/src/test/resources/input/xml/DOMTestCase1.xml
+++ b/src/test/resources/input/xml/DOMTestCase1.xml
@@ -32,8 +32,8 @@
   <appender name="A2" class="org.apache.log4j.FileAppender">
     <param name="File" value="output/temp.A2" />
     <param name="Append" value="false" />
-    <layout class="org.apache.log4j.TTCCLayout">
-      <param name="DateFormat" value="ISO8601" />
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value=" [%t] %p %c - %m%n" />
     </layout>		
   </appender>
   

[logging-log4cxx] 20/20: Merge branch 'master' into LOGCXX-510

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0f76b3b0921c989f90947c9f82e56aaeb66e2491
Merge: 494955f d08a933
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 20:39:34 2021 -0400

    Merge branch 'master' into LOGCXX-510

 src/main/cpp/CMakeLists.txt                        |  2 +
 src/main/cpp/class.cpp                             |  2 +
 src/main/cpp/colorendpatternconverter.cpp          | 55 ++++++++++++++++
 src/main/cpp/colorstartpatternconverter.cpp        | 76 ++++++++++++++++++++++
 src/main/cpp/patternlayout.cpp                     |  5 ++
 .../log4cxx/pattern/colorendpatternconverter.h     | 67 +++++++++++++++++++
 .../log4cxx/pattern/colorstartpatternconverter.h   | 67 +++++++++++++++++++
 src/main/include/log4cxx/patternlayout.h           | 19 ++++++
 src/test/cpp/patternlayouttest.cpp                 |  8 +++
 .../resources/input/patternLayout13.properties     | 21 ++++++
 src/test/resources/witness/patternLayout.13        | 10 +++
 11 files changed, 332 insertions(+)


[logging-log4cxx] 01/20: Removed obsolete files

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 948f3f1a3723262e8cfe7976337019c4506b57db
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Sat Sep 25 09:16:11 2021 -0400

    Removed obsolete files
---
 src/main/cpp/dailyrollingfileappender.cpp          | 123 ------------
 src/main/cpp/obsoleterollingfileappender.cpp       | 177 ------------------
 .../include/log4cxx/dailyrollingfileappender.h     | 207 ---------------------
 src/main/include/log4cxx/portability.h             |  25 ---
 src/main/include/log4cxx/rollingfileappender.h     | 116 ------------
 src/test/cpp/rolling/CMakeLists.txt                |   2 -
 .../obsoletedailyrollingfileappendertest.cpp       | 145 ---------------
 .../rolling/obsoleterollingfileappendertest.cpp    | 158 ----------------
 8 files changed, 953 deletions(-)

diff --git a/src/main/cpp/dailyrollingfileappender.cpp b/src/main/cpp/dailyrollingfileappender.cpp
deleted file mode 100644
index e8aace1..0000000
--- a/src/main/cpp/dailyrollingfileappender.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <log4cxx/logstring.h>
-#include <log4cxx/dailyrollingfileappender.h>
-#include <log4cxx/helpers/loglog.h>
-#include <log4cxx/helpers/optionconverter.h>
-#include <log4cxx/helpers/stringhelper.h>
-#include <log4cxx/rolling/rollingfileappender.h>
-#include <log4cxx/rolling/timebasedrollingpolicy.h>
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::rolling;
-
-IMPLEMENT_LOG4CXX_OBJECT(DailyRollingFileAppender)
-
-
-
-DailyRollingFileAppender::DailyRollingFileAppender()
-{
-}
-
-
-DailyRollingFileAppender::DailyRollingFileAppender(
-	const LayoutPtr& l,
-	const LogString& filename,
-	const LogString& datePattern1)
-	: datePattern(datePattern1)
-{
-	setLayout(l);
-	setFile(filename);
-	Pool p;
-	activateOptions(p);
-}
-
-void DailyRollingFileAppender::setDatePattern(const LogString& newPattern)
-{
-	datePattern = newPattern;
-}
-
-LogString DailyRollingFileAppender::getDatePattern() const
-{
-	return datePattern;
-}
-
-void DailyRollingFileAppender::activateOptions(log4cxx::helpers::Pool& p)
-{
-	TimeBasedRollingPolicyPtr policy = TimeBasedRollingPolicyPtr( new TimeBasedRollingPolicy() );
-	LogString pattern(getFile());
-	bool inLiteral = false;
-	bool inPattern = false;
-
-	for (size_t i = 0; i < datePattern.length(); i++)
-	{
-		if (datePattern[i] == 0x27 /* '\'' */)
-		{
-			inLiteral = !inLiteral;
-
-			if (inLiteral && inPattern)
-			{
-				pattern.append(1, (logchar) 0x7D /* '}' */);
-				inPattern = false;
-			}
-		}
-		else
-		{
-			if (!inLiteral && !inPattern)
-			{
-				const logchar dbrace[] = { 0x25, 0x64, 0x7B, 0 }; // "%d{"
-				pattern.append(dbrace);
-				inPattern = true;
-			}
-
-			pattern.append(1, datePattern[i]);
-		}
-	}
-
-	if (inPattern)
-	{
-		pattern.append(1, (logchar) 0x7D /* '}' */);
-	}
-
-	policy->setFileNamePattern(pattern);
-	policy->activateOptions(p);
-	setTriggeringPolicy(policy);
-	setRollingPolicy(policy);
-
-	RollingFileAppenderSkeleton::activateOptions(p);
-}
-
-
-void DailyRollingFileAppender::setOption(const LogString& option,
-	const LogString& value)
-{
-	if (StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("DATEPATTERN"), LOG4CXX_STR("datepattern")))
-	{
-		setDatePattern(value);
-	}
-	else
-	{
-		RollingFileAppenderSkeleton::setOption(option, value);
-	}
-}
-
-
-
-
diff --git a/src/main/cpp/obsoleterollingfileappender.cpp b/src/main/cpp/obsoleterollingfileappender.cpp
deleted file mode 100644
index 252aa20..0000000
--- a/src/main/cpp/obsoleterollingfileappender.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <log4cxx/logstring.h>
-#include <log4cxx/rollingfileappender.h>
-#include <log4cxx/helpers/loglog.h>
-#include <log4cxx/helpers/optionconverter.h>
-#include <log4cxx/helpers/stringhelper.h>
-#include <log4cxx/rolling/rollingfileappenderskeleton.h>
-#include <log4cxx/rolling/sizebasedtriggeringpolicy.h>
-#include <log4cxx/rolling/fixedwindowrollingpolicy.h>
-
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::spi;
-
-namespace log4cxx
-{
-class ClassRollingFileAppender : public Class
-{
-	public:
-		ClassRollingFileAppender() : helpers::Class() {}
-		virtual LogString getName() const
-		{
-			return LOG4CXX_STR("org.apache.log4j.RollingFileAppender");
-		}
-		virtual Object* newInstance() const
-		{
-			return new RollingFileAppender();
-		}
-};
-}
-
-const log4cxx::helpers::Class& RollingFileAppender::getClass() const
-{
-	return getStaticClass();
-}
-const log4cxx::helpers::Class& RollingFileAppender::getStaticClass()
-{
-	static ClassRollingFileAppender theClass;
-	return theClass;
-}
-const log4cxx::helpers::ClassRegistration& RollingFileAppender::registerClass()
-{
-	static log4cxx::helpers::ClassRegistration classReg(RollingFileAppender::getStaticClass);
-	return classReg;
-}
-namespace log4cxx
-{
-namespace classes
-{
-const log4cxx::helpers::ClassRegistration& ObsoleteRollingFileAppenderRegistration =
-	RollingFileAppender::registerClass();
-}
-}
-
-
-
-RollingFileAppender::RollingFileAppender()
-	: maxFileSize(10 * 1024 * 1024), maxBackupIndex(1)
-{
-}
-
-RollingFileAppender::RollingFileAppender(
-	const LayoutPtr& newLayout,
-	const LogString& filename,
-	bool append)
-	: maxFileSize(10 * 1024 * 1024), maxBackupIndex(1)
-{
-	setLayout(newLayout);
-	setFile(filename);
-	setAppend(append);
-	Pool p;
-	activateOptions(p);
-}
-
-RollingFileAppender::RollingFileAppender(const LayoutPtr& newLayout,
-	const LogString& filename)
-	: maxFileSize(10 * 1024 * 1024), maxBackupIndex(1)
-{
-	setLayout(newLayout);
-	setFile(filename);
-	Pool p;
-	activateOptions(p);
-}
-
-RollingFileAppender::~RollingFileAppender()
-{
-}
-
-
-void RollingFileAppender::setOption(const LogString& option,
-	const LogString& value)
-{
-	if (StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("MAXFILESIZE"), LOG4CXX_STR("maxfilesize"))
-		|| StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("MAXIMUMFILESIZE"), LOG4CXX_STR("maximumfilesize")))
-	{
-		setMaxFileSize(value);
-	}
-	else if (StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("MAXBACKUPINDEX"), LOG4CXX_STR("maxbackupindex"))
-		|| StringHelper::equalsIgnoreCase(option,
-			LOG4CXX_STR("MAXIMUMBACKUPINDEX"), LOG4CXX_STR("maximumbackupindex")))
-	{
-		maxBackupIndex = StringHelper::toInt(value);
-	}
-	else
-	{
-		using namespace log4cxx::rolling;
-		RollingFileAppenderSkeleton::setOption(option, value);
-	}
-}
-
-
-int RollingFileAppender::getMaxBackupIndex() const
-{
-	return maxBackupIndex;
-}
-
-long RollingFileAppender::getMaximumFileSize() const
-{
-	return maxFileSize;
-}
-
-void RollingFileAppender::setMaxBackupIndex(int maxBackups)
-{
-	maxBackupIndex = maxBackups;
-}
-
-void RollingFileAppender::setMaximumFileSize(int maxFileSize1)
-{
-	maxFileSize = maxFileSize1;
-}
-
-void RollingFileAppender::setMaxFileSize(const LogString& value)
-{
-	maxFileSize = OptionConverter::toFileSize(value, maxFileSize + 1);
-}
-
-void RollingFileAppender::activateOptions(Pool& p)
-{
-	log4cxx::rolling::SizeBasedTriggeringPolicyPtr trigger(
-		new log4cxx::rolling::SizeBasedTriggeringPolicy());
-	trigger->setMaxFileSize(maxFileSize);
-	trigger->activateOptions(p);
-	setTriggeringPolicy(trigger);
-
-	log4cxx::rolling::FixedWindowRollingPolicyPtr rolling(
-		new log4cxx::rolling::FixedWindowRollingPolicy());
-	rolling->setMinIndex(1);
-	rolling->setMaxIndex(maxBackupIndex);
-	rolling->setFileNamePattern(getFile() + LOG4CXX_STR(".%i"));
-	rolling->activateOptions(p);
-	setRollingPolicy(rolling);
-
-	using namespace log4cxx::rolling;
-	RollingFileAppenderSkeleton::activateOptions(p);
-}
-
-
diff --git a/src/main/include/log4cxx/dailyrollingfileappender.h b/src/main/include/log4cxx/dailyrollingfileappender.h
deleted file mode 100644
index 96aa9f0..0000000
--- a/src/main/include/log4cxx/dailyrollingfileappender.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_DAILYROLLINGFILEAPPENDER_H
-#define _LOG4CXX_DAILYROLLINGFILEAPPENDER_H
-
-#if defined(_MSC_VER)
-	#pragma warning ( push )
-	#pragma warning ( disable: 4231 4251 4275 4786 )
-#endif
-
-
-#include <log4cxx/appender.h>
-#include <log4cxx/fileappender.h>
-#include <log4cxx/spi/optionhandler.h>
-#include <log4cxx/rolling/rollingfileappenderskeleton.h>
-
-namespace log4cxx
-{
-namespace helpers
-{
-class Pool;
-}
-
-namespace spi
-{
-class ErrorHandler;
-typedef std::shared_ptr<ErrorHandler> ErrorHandlerPtr;
-}
-
-
-/**
-   DailyRollingFileAppender extends {@link log4cxx::FileAppender FileAppender} so that the
-   underlying file is rolled over at a user chosen frequency.
-
-   <p>The rolling schedule is specified by the <b>DatePattern</b>
-   option. This pattern should follow the
-   {@link log4cxx::helpers::SimpleDateFormat SimpleDateFormat}
-   conventions. In particular, you <em>must</em> escape literal text
-   within a pair of single quotes. A formatted version of the date
-   pattern is used as the suffix for the rolled file name.
-
-   <p>For example, if the <b>File</b> option is set to
-   <code>/foo/bar.log</code> and the <b>DatePattern</b> set to
-   <code>'.'yyyy-MM-dd</code>, on 2001-02-16 at midnight, the logging
-   file <code>/foo/bar.log</code> will be copied to
-   <code>/foo/bar.log.2001-02-16</code> and logging for 2001-02-17
-   will continue in <code>/foo/bar.log</code> until it rolls over
-   the next day.
-
-   <p>Is is possible to specify monthly, weekly, half-daily, daily,
-   hourly, or minutely rollover schedules.
-
-   <p><table border="1" cellpadding="2">
-   <tr>
-   <th>DatePattern</th>
-   <th>Rollover schedule</th>
-   <th>Example</th>
-
-   <tr>
-   <td><code>'.'yyyy-MM</code>
-   <td>Rollover at the beginning of each month</td>
-
-   <td>At midnight of May 31st, 2002 <code>/foo/bar.log</code> will be
-   copied to <code>/foo/bar.log.2002-05</code>. Logging for the month
-   of June will be output to <code>/foo/bar.log</code> until it is
-   also rolled over the next month.
-
-   <tr>
-   <td><code>'.'yyyy-ww</code>
-
-   <td>Rollover at the first day of each week. The first day of the
-   week depends on the locale.</td>
-
-   <td>Assuming the first day of the week is Sunday, on Saturday
-   midnight, June 9th 2002, the file <i>/foo/bar.log</i> will be
-   copied to <i>/foo/bar.log.2002-23</i>.  Logging for the 24th week
-   of 2002 will be output to <code>/foo/bar.log</code> until it is
-   rolled over the next week.
-
-   <tr>
-   <td><code>'.'yyyy-MM-dd</code>
-
-   <td>Rollover at midnight each day.</td>
-
-   <td>At midnight, on March 8th, 2002, <code>/foo/bar.log</code> will
-   be copied to <code>/foo/bar.log.2002-03-08</code>. Logging for the
-   9th day of March will be output to <code>/foo/bar.log</code> until
-   it is rolled over the next day.
-
-   <tr>
-   <td><code>'.'yyyy-MM-dd-a</code>
-
-   <td>Rollover at midnight and midday of each day.</td>
-
-   <td>At noon, on March 9th, 2002, <code>/foo/bar.log</code> will be
-   copied to <code>/foo/bar.log.2002-03-09-AM</code>. Logging for the
-   afternoon of the 9th will be output to <code>/foo/bar.log</code>
-   until it is rolled over at midnight.
-
-   <tr>
-   <td><code>'.'yyyy-MM-dd-HH</code>
-
-   <td>Rollover at the top of every hour.</td>
-
-   <td>At approximately 11:00.000 o'clock on March 9th, 2002,
-   <code>/foo/bar.log</code> will be copied to
-   <code>/foo/bar.log.2002-03-09-10</code>. Logging for the 11th hour
-   of the 9th of March will be output to <code>/foo/bar.log</code>
-   until it is rolled over at the beginning of the next hour.
-
-
-   <tr>
-   <td><code>'.'yyyy-MM-dd-HH-mm</code>
-
-   <td>Rollover at the beginning of every minute.</td>
-
-   <td>At approximately 11:23,000, on March 9th, 2001,
-   <code>/foo/bar.log</code> will be copied to
-   <code>/foo/bar.log.2001-03-09-10-22</code>. Logging for the minute
-   of 11:23 (9th of March) will be output to
-   <code>/foo/bar.log</code> until it is rolled over the next minute.
-
-   </table>
-
-   <p>Do not use the colon ":" character in anywhere in the
-   <b>DatePattern</b> option. The text before the colon is interpeted
-   as the protocol specificaion of a URL which is probably not what
-   you want.
-*/
-
-class LOG4CXX_EXPORT DailyRollingFileAppender : public log4cxx::rolling::RollingFileAppenderSkeleton
-{
-		DECLARE_LOG4CXX_OBJECT(DailyRollingFileAppender)
-		BEGIN_LOG4CXX_CAST_MAP()
-		LOG4CXX_CAST_ENTRY(DailyRollingFileAppender)
-		LOG4CXX_CAST_ENTRY_CHAIN(FileAppender)
-		END_LOG4CXX_CAST_MAP()
-
-		/**
-		   The date pattern used to initiate rollover.
-		*/
-		LogString datePattern;
-
-
-	public:
-		/**
-		   The default constructor simply calls its {@link
-		   FileAppender#FileAppender parents constructor}.  */
-		DailyRollingFileAppender();
-
-		/**
-		  Instantiate a DailyRollingFileAppender and open the file designated by
-		  <code>filename</code>. The opened filename will become the ouput
-		  destination for this appender.
-
-		*/
-		DailyRollingFileAppender(
-			const LayoutPtr& layout,
-			const LogString& filename,
-			const LogString& datePattern);
-
-
-		/**
-		   The <b>DatePattern</b> takes a string in the same format as
-		   expected by {@link log4cxx::helpers::SimpleDateFormat SimpleDateFormat}. This options determines the
-		   rollover schedule.
-		 */
-		void setDatePattern(const LogString& pattern);
-
-		/** Returns the value of the <b>DatePattern</b> option. */
-		LogString getDatePattern() const;
-
-		void setOption(const LogString& option,
-			const LogString& value);
-
-		/**
-		 * Prepares DailyRollingFileAppender for use.
-		 */
-		void activateOptions(log4cxx::helpers::Pool&);
-
-};
-
-LOG4CXX_PTR_DEF(DailyRollingFileAppender);
-
-}
-
-#if defined(_MSC_VER)
-	#pragma warning ( pop )
-#endif
-
-
-#endif
diff --git a/src/main/include/log4cxx/portability.h b/src/main/include/log4cxx/portability.h
deleted file mode 100644
index ea24f5d..0000000
--- a/src/main/include/log4cxx/portability.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_PORTABILITY_H
-#define _LOG4CXX_PORTABILITY_H
-
-//
-//    Obsolete file
-//
-
-#endif //_LOG4CXX_PORTABILITY_H
diff --git a/src/main/include/log4cxx/rollingfileappender.h b/src/main/include/log4cxx/rollingfileappender.h
deleted file mode 100644
index 69d4674..0000000
--- a/src/main/include/log4cxx/rollingfileappender.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _LOG4CXX_ROLLING_FILE_APPENDER_H
-#define _LOG4CXX_ROLLING_FILE_APPENDER_H
-
-#if defined(_MSC_VER)
-	#pragma warning ( push )
-	#pragma warning ( disable: 4231 4251 4275 4786 )
-#endif
-
-#include <log4cxx/rolling/rollingfileappenderskeleton.h>
-
-namespace log4cxx
-{
-
-/** RollingFileAppender extends FileAppender to backup the log files when they reach a certain size. */
-class LOG4CXX_EXPORT RollingFileAppender : public log4cxx::rolling::RollingFileAppenderSkeleton
-{
-	private:
-		/** The default maximum file size is 10MB. */
-		long maxFileSize;
-
-		/** There is one backup file by default. */
-		int maxBackupIndex;
-
-	public:
-		//
-		//   Use custom class to use non-default name to avoid
-		//       conflict with log4cxx::rolling::RollingFileAppender
-		DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS( RollingFileAppender, ClassRollingFileAppender )
-		BEGIN_LOG4CXX_CAST_MAP()
-		LOG4CXX_CAST_ENTRY( RollingFileAppender )
-		LOG4CXX_CAST_ENTRY_CHAIN( FileAppender )
-		END_LOG4CXX_CAST_MAP()
-		/** The default constructor simply calls its {@link FileAppender#FileAppender parents constructor}. */
-		RollingFileAppender();
-
-		/**
-		                Instantiate a RollingFileAppender and open the file designated by
-		 <code>filename</code>. The opened filename will become the ouput destination for this appender.
-
-		<p>If the <code>append</code> parameter is true, the file will be appended to. Otherwise, the file desginated by
-		 <code>filename</code> will be truncated before being opened.
-		*/
-		RollingFileAppender( const LayoutPtr& layout, const LogString& fileName, bool append );
-
-		/**
-		                Instantiate a FileAppender and open the file designated by
-		 <code>filename</code>. The opened filename will become the output destination for this appender.
-		 <p>The file will be appended to.
-		*/
-		RollingFileAppender( const LayoutPtr& layout, const LogString& fileName );
-
-		virtual ~RollingFileAppender();
-
-		/** Returns the value of the <b>MaxBackupIndex</b> option. */
-		int getMaxBackupIndex() const;
-
-		/** Get the maximum size that the output file is allowed to reach before being rolled over to backup files. */
-		long getMaximumFileSize() const;
-
-
-		/**
-		                Set the maximum number of backup files to keep around.
-
-		<p>The <b>MaxBackupIndex</b> option determines how many backup
-		 files are kept before the oldest is erased. This option takes
-		 a positive integer value. If set to zero, then there will be no
-		 backup files and the log file will be truncated when it reaches <code>MaxFileSize</code>.
-		*/
-		void setMaxBackupIndex( int maxBackupIndex );
-
-		/**
-		                Set the maximum size that the output file is allowed to reach before being rolled over to backup files.
-
-		<p>In configuration files, the <b>MaxFileSize</b> option takes an
-		 long integer in the range 0 - 2^63. You can specify the value with the suffixes "KB", "MB" or "GB" so that the integer is
-		 interpreted being expressed respectively in kilobytes, megabytes
-		 or gigabytes. For example, the value "10KB" will be interpreted as 10240.
-		*/
-		void setMaxFileSize( const LogString& value );
-
-		void setMaximumFileSize( int value );
-
-
-		virtual void setOption( const LogString& option, const LogString& value );
-
-		/** Prepares RollingFileAppender for use. */
-		void activateOptions( log4cxx::helpers::Pool& pool );
-
-
-}; // class RollingFileAppender
-LOG4CXX_PTR_DEF(RollingFileAppender);
-
-} // namespace log4cxx
-
-
-#if defined(_MSC_VER)
-	#pragma warning ( pop )
-#endif
-
-#endif //_LOG4CXX_ROLLING_FILE_APPENDER_H
diff --git a/src/test/cpp/rolling/CMakeLists.txt b/src/test/cpp/rolling/CMakeLists.txt
index 2b2c650..6ffa58e 100644
--- a/src/test/cpp/rolling/CMakeLists.txt
+++ b/src/test/cpp/rolling/CMakeLists.txt
@@ -3,8 +3,6 @@ set(ROLLING_TESTS
     filenamepatterntestcase
     filterbasedrollingtest
     manualrollingtest
-    obsoletedailyrollingfileappendertest
-    obsoleterollingfileappendertest
     sizebasedrollingtest
     timebasedrollingtest
 )
diff --git a/src/test/cpp/rolling/obsoletedailyrollingfileappendertest.cpp b/src/test/cpp/rolling/obsoletedailyrollingfileappendertest.cpp
deleted file mode 100644
index d04e50c..0000000
--- a/src/test/cpp/rolling/obsoletedailyrollingfileappendertest.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../util/compare.h"
-#include "../insertwide.h"
-#include "../logunit.h"
-#include <apr_time.h>
-#include <log4cxx/logmanager.h>
-#include <log4cxx/xml/domconfigurator.h>
-#include <log4cxx/patternlayout.h>
-#include <log4cxx/rolling/rollingfileappender.h>
-#include <log4cxx/rolling/fixedwindowrollingpolicy.h>
-#include <log4cxx/rolling/filterbasedtriggeringpolicy.h>
-#include <log4cxx/filter/levelrangefilter.h>
-#include <log4cxx/helpers/pool.h>
-#include <log4cxx/logger.h>
-#include <log4cxx/propertyconfigurator.h>
-#include <log4cxx/dailyrollingfileappender.h>
-#include <log4cxx/helpers/stringhelper.h>
-
-
-using namespace log4cxx;
-using namespace log4cxx::rolling;
-using namespace log4cxx::xml;
-using namespace log4cxx::filter;
-using namespace log4cxx::helpers;
-
-
-/**
- * Tests the emulation of org.apache.log4j.DailyRollingFileAppender
- *
- *
- *
- */
-LOGUNIT_CLASS(ObsoleteDailyRollingFileAppenderTest)
-{
-	LOGUNIT_TEST_SUITE(ObsoleteDailyRollingFileAppenderTest);
-	LOGUNIT_TEST(test1);
-	LOGUNIT_TEST(test2);
-	LOGUNIT_TEST_SUITE_END();
-
-
-public:
-
-	void tearDown()
-	{
-		LogManager::shutdown();
-	}
-
-	/**
-	 * Test basic rolling functionality.
-	 */
-	void test1()
-	{
-		PropertyConfigurator::configure(File("input/rolling/obsoleteDRFA1.properties"));
-
-		int preCount = getFileCount("output", LOG4CXX_STR("obsoleteDRFA-test1.log."));
-		LoggerPtr logger(Logger::getLogger("org.apache.log4j.ObsoleteDailyRollingFileAppenderTest"));
-
-		char msg[11];
-		strcpy(msg, "Hello---??");
-
-		for (int i = 0; i < 25; i++)
-		{
-			apr_sleep(100000);
-			msg[8] = (char) ('0' + (i / 10));
-			msg[9] = (char) ('0' + (i % 10));
-			LOG4CXX_DEBUG(logger, msg);
-		}
-
-		int postCount = getFileCount("output", LOG4CXX_STR("obsoleteDRFA-test1.log."));
-		LOGUNIT_ASSERT_EQUAL(true, postCount > preCount);
-	}
-
-	/**
-	 * Test basic rolling functionality.
-	 * @deprecated Class under test is deprecated.
-	 */
-	void test2()
-	{
-		PatternLayoutPtr layout(new PatternLayout(LOG4CXX_STR("%m%n")));
-		log4cxx::DailyRollingFileAppenderPtr rfa(new log4cxx::DailyRollingFileAppender());
-		rfa->setName(LOG4CXX_STR("ROLLING"));
-		rfa->setLayout(layout);
-		rfa->setAppend(false);
-		rfa->setFile(LOG4CXX_STR("output/obsoleteDRFA-test2.log"));
-		rfa->setDatePattern(LOG4CXX_STR("'.'yyyy-MM-dd-HH_mm_ss"));
-		Pool p;
-		rfa->activateOptions(p);
-		LoggerPtr root(Logger::getRootLogger());
-		root->addAppender(rfa);
-		LoggerPtr logger(Logger::getLogger("org.apache.log4j.ObsoleteDailyRollingAppenderTest"));
-
-		int preCount = getFileCount("output", LOG4CXX_STR("obsoleteDRFA-test2.log."));
-
-		char msg[11];
-		strcpy(msg, "Hello---??");
-
-		for (int i = 0; i < 25; i++)
-		{
-			apr_sleep(100000);
-			msg[8] = (char) ('0' + i / 10);
-			msg[9] = (char) ('0' + i % 10);
-			LOG4CXX_DEBUG(logger, msg);
-		}
-
-		int postCount = getFileCount("output", LOG4CXX_STR("obsoleteDRFA-test2.log."));
-		LOGUNIT_ASSERT_EQUAL(true, postCount > preCount);
-	}
-
-private:
-	static int getFileCount(const char* dir, const LogString & initial)
-	{
-		Pool p;
-		std::vector<LogString> files(File(dir).list(p));
-		int count = 0;
-
-		for (size_t i = 0; i < files.size(); i++)
-		{
-			if (StringHelper::startsWith(files[i], initial))
-			{
-				count++;
-			}
-		}
-
-		return count;
-	}
-};
-
-LOGUNIT_TEST_SUITE_REGISTRATION(ObsoleteDailyRollingFileAppenderTest);
-
diff --git a/src/test/cpp/rolling/obsoleterollingfileappendertest.cpp b/src/test/cpp/rolling/obsoleterollingfileappendertest.cpp
deleted file mode 100644
index a7ead2b..0000000
--- a/src/test/cpp/rolling/obsoleterollingfileappendertest.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "../util/compare.h"
-#include "../insertwide.h"
-#include "../logunit.h"
-#include <apr_time.h>
-#include <log4cxx/logmanager.h>
-#include <log4cxx/xml/domconfigurator.h>
-#include <log4cxx/patternlayout.h>
-#include <log4cxx/rolling/rollingfileappender.h>
-#include <log4cxx/rolling/fixedwindowrollingpolicy.h>
-#include <log4cxx/rolling/filterbasedtriggeringpolicy.h>
-#include <log4cxx/filter/levelrangefilter.h>
-#include <log4cxx/helpers/pool.h>
-#include <log4cxx/logger.h>
-#include <log4cxx/propertyconfigurator.h>
-#include <log4cxx/rollingfileappender.h>
-#include <log4cxx/helpers/stringhelper.h>
-
-using namespace log4cxx;
-using namespace log4cxx::xml;
-using namespace log4cxx::filter;
-using namespace log4cxx::helpers;
-
-/**
- * Tests the emulation of org.apache.log4j.RollingFileAppender
- *
- *
- *
- */
-LOGUNIT_CLASS(ObsoleteRollingFileAppenderTest)
-{
-	LOGUNIT_TEST_SUITE(ObsoleteRollingFileAppenderTest);
-	LOGUNIT_TEST(test1);
-	LOGUNIT_TEST(test2);
-	LOGUNIT_TEST(testIsOptionHandler);
-	LOGUNIT_TEST(testClassForName);
-	LOGUNIT_TEST_SUITE_END();
-
-
-public:
-
-	void tearDown()
-	{
-		LogManager::shutdown();
-	}
-
-	/**
-	 * Test basic rolling functionality.
-	 */
-	void test1()
-	{
-		PropertyConfigurator::configure(File("input/rolling/obsoleteRFA1.properties"));
-
-		char msg[] = { 'H', 'e', 'l', 'l', 'o', '-', '-', '-', '?', 0};
-		LoggerPtr logger(Logger::getLogger("org.apache.logj4.ObsoleteRollingFileAppenderTest"));
-
-		// Write exactly 10 bytes with each log
-		for (int i = 0; i < 25; i++)
-		{
-			apr_sleep(100000);
-
-			if (i < 10)
-			{
-				msg[8] = (char) ('0' + i);
-				LOG4CXX_DEBUG(logger, msg);
-			}
-			else if (i < 100)
-			{
-				msg[7] = (char) ('0' + i / 10);
-				msg[8] = (char) ('0' + i % 10);
-				LOG4CXX_DEBUG(logger, msg);
-			}
-		}
-
-		Pool p;
-		LOGUNIT_ASSERT_EQUAL(true, File("output/obsoleteRFA-test1.log").exists(p));
-		LOGUNIT_ASSERT_EQUAL(true, File("output/obsoleteRFA-test1.log.1").exists(p));
-	}
-
-	/**
-	 * Test basic rolling functionality.
-	 * @deprecated Class under test is deprecated.
-	 */
-	void test2()
-	{
-		PatternLayoutPtr layout(new PatternLayout(LOG4CXX_STR("%m\n")));
-		log4cxx::RollingFileAppenderPtr rfa(
-			new log4cxx::RollingFileAppender());
-		rfa->setName(LOG4CXX_STR("ROLLING"));
-		rfa->setLayout(layout);
-		rfa->setOption(LOG4CXX_STR("append"), LOG4CXX_STR("false"));
-		rfa->setMaximumFileSize(100);
-		rfa->setFile(LOG4CXX_STR("output/obsoleteRFA-test2.log"));
-		Pool p;
-		rfa->activateOptions(p);
-		LoggerPtr root(Logger::getRootLogger());
-		root->addAppender(rfa);
-
-		char msg[] = { 'H', 'e', 'l', 'l', 'o', '-', '-', '-', '?', 0};
-		LoggerPtr logger(Logger::getLogger("org.apache.logj4.ObsoleteRollingFileAppenderTest"));
-
-		// Write exactly 10 bytes with each log
-		for (int i = 0; i < 25; i++)
-		{
-			apr_sleep(100000);
-
-			if (i < 10)
-			{
-				msg[8] = (char) ('0' + i);
-				LOG4CXX_DEBUG(logger, msg);
-			}
-			else if (i < 100)
-			{
-				msg[7] = (char) ('0' + i / 10);
-				msg[8] = (char) ('0' + i % 10);
-				LOG4CXX_DEBUG(logger, msg);
-			}
-		}
-
-		LOGUNIT_ASSERT_EQUAL(true, File("output/obsoleteRFA-test2.log").exists(p));
-		LOGUNIT_ASSERT_EQUAL(true, File("output/obsoleteRFA-test2.log.1").exists(p));
-	}
-
-	/**
-	 *  Tests if class is declared to support the OptionHandler interface.
-	 *  See LOGCXX-136.
-	 */
-	void testIsOptionHandler()
-	{
-		RollingFileAppenderPtr rfa(new RollingFileAppender());
-		LOGUNIT_ASSERT_EQUAL(true, rfa->instanceof(log4cxx::spi::OptionHandler::getStaticClass()));
-	}
-
-	void testClassForName()
-	{
-		LogString className(LOG4CXX_STR("org.apache.log4j.RollingFileAppender"));
-		const Class& myclass = Class::forName(className);
-		LOGUNIT_ASSERT_EQUAL(className, LogString(myclass.getName()));
-	}
-};
-
-LOGUNIT_TEST_SUITE_REGISTRATION(ObsoleteRollingFileAppenderTest);
-

[logging-log4cxx] 17/20: Made socket tests work and removed obsolete socket test

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9c696a9042c672a8e2a51019ed1c000676f58bc7
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 19:53:56 2021 -0400

    Made socket tests work and removed obsolete socket test
---
 src/main/cpp/CMakeLists.txt                        |   1 -
 src/main/cpp/class.cpp                             |   2 -
 src/main/cpp/socketappender.cpp                    | 130 ------
 src/main/cpp/socketappenderskeleton.cpp            |  63 +--
 src/main/cpp/xmlsocketappender.cpp                 |  20 +-
 src/main/include/log4cxx/helpers/object.h          |   2 +
 src/main/include/log4cxx/net/socketappender.h      | 132 ------
 .../include/log4cxx/net/socketappenderskeleton.h   |  12 +-
 .../log4cxx/private/socketappenderskeleton_priv.h  |  78 ++++
 src/test/cpp/net/CMakeLists.txt                    |   7 +-
 src/test/cpp/net/socketappendertestcase.cpp        |   1 -
 src/test/cpp/net/socketservertestcase.cpp          | 483 ---------------------
 12 files changed, 99 insertions(+), 832 deletions(-)

diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt
index dd8ce88..09a0634 100644
--- a/src/main/cpp/CMakeLists.txt
+++ b/src/main/cpp/CMakeLists.txt
@@ -127,7 +127,6 @@ target_sources(log4cxx
   sizebasedtriggeringpolicy.cpp
   smtpappender.cpp
   socket.cpp
-  socketappender.cpp
   socketappenderskeleton.cpp
   sockethubappender.cpp
   socketoutputstream.cpp
diff --git a/src/main/cpp/class.cpp b/src/main/cpp/class.cpp
index 13adbf2..eddd903 100644
--- a/src/main/cpp/class.cpp
+++ b/src/main/cpp/class.cpp
@@ -43,7 +43,6 @@
 	#include <log4cxx/nt/outputdebugstringappender.h>
 #endif
 #include <log4cxx/net/smtpappender.h>
-#include <log4cxx/net/socketappender.h>
 #include <log4cxx/net/sockethubappender.h>
 #include <log4cxx/helpers/datagramsocket.h>
 #include <log4cxx/net/syslogappender.h>
@@ -171,7 +170,6 @@ void Class::registerClasses()
 	log4cxx::nt::OutputDebugStringAppender::registerClass();
 #endif
 	SMTPAppender::registerClass();
-	SocketAppender::registerClass();
 #if APR_HAS_THREADS
 	SocketHubAppender::registerClass();
 #endif
diff --git a/src/main/cpp/socketappender.cpp b/src/main/cpp/socketappender.cpp
deleted file mode 100644
index d2d987c..0000000
--- a/src/main/cpp/socketappender.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#if defined(_MSC_VER)
-	#pragma warning ( disable: 4231 4251 4275 4786 )
-#endif
-
-#include <log4cxx/net/socketappender.h>
-#include <log4cxx/helpers/loglog.h>
-#include <log4cxx/helpers/optionconverter.h>
-#include <log4cxx/helpers/stringhelper.h>
-#include <log4cxx/spi/loggingevent.h>
-#include <log4cxx/helpers/objectoutputstream.h>
-#include <apr_time.h>
-#include <apr_atomic.h>
-#include <apr_thread_proc.h>
-#include <log4cxx/helpers/socketoutputstream.h>
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::net;
-
-IMPLEMENT_LOG4CXX_OBJECT(SocketAppender)
-
-
-// The default port number of remote logging server (4560)
-int SocketAppender::DEFAULT_PORT                = 4560;
-
-// The default reconnection delay (30000 milliseconds or 30 seconds).
-int SocketAppender::DEFAULT_RECONNECTION_DELAY  = 30000;
-
-SocketAppender::SocketAppender()
-	: SocketAppenderSkeleton(DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY)
-{
-}
-
-SocketAppender::SocketAppender(InetAddressPtr& address1, int port1)
-	: SocketAppenderSkeleton(address1, port1, DEFAULT_RECONNECTION_DELAY)
-{
-	Pool p;
-	activateOptions(p);
-}
-
-SocketAppender::SocketAppender(const LogString& host, int port1)
-	: SocketAppenderSkeleton(host, port1, DEFAULT_RECONNECTION_DELAY)
-{
-	Pool p;
-	activateOptions(p);
-}
-
-SocketAppender::~SocketAppender()
-{
-	finalize();
-}
-
-int SocketAppender::getDefaultDelay() const
-{
-	return DEFAULT_RECONNECTION_DELAY;
-}
-
-int SocketAppender::getDefaultPort() const
-{
-	return DEFAULT_PORT;
-}
-
-void SocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p)
-{
-//	std::unique_lock<log4cxx::shared_mutex> lock(mutex);
-
-//	SocketOutputStreamPtr sock = SocketOutputStreamPtr(new SocketOutputStream(socket));
-//	oos = ObjectOutputStreamPtr(new ObjectOutputStream(sock, p));
-}
-
-void SocketAppender::cleanUp(Pool& p)
-{
-//	if (oos == 0)
-//	{
-//		return;
-//	}
-
-//	try
-//	{
-//		oos->close(p);
-//		oos = 0;
-//	}
-//	catch (std::exception&)
-//	{}
-}
-
-void SocketAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p)
-{
-//	if (oos == 0)
-//	{
-//		return;
-//	}
-
-//	LogString ndcVal;
-//	event->getNDC(ndcVal);
-//	event->getThreadName();
-//	event->getMDCCopy();
-
-//	try
-//	{
-//		event->write(*oos, p);
-//		oos->reset(p);
-//	}
-//	catch (std::exception& e)
-//	{
-//		oos = 0;
-//		LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
-
-//		if (getReconnectionDelay() > 0)
-//		{
-//			fireConnector();
-//		}
-//	}
-}
diff --git a/src/main/cpp/socketappenderskeleton.cpp b/src/main/cpp/socketappenderskeleton.cpp
index e2702b2..676cf58 100644
--- a/src/main/cpp/socketappenderskeleton.cpp
+++ b/src/main/cpp/socketappenderskeleton.cpp
@@ -28,74 +28,17 @@
 #include <log4cxx/helpers/bytearrayoutputstream.h>
 #include <log4cxx/helpers/threadutility.h>
 #include <log4cxx/private/appenderskeleton_priv.h>
+#include <log4cxx/private/socketappenderskeleton_priv.h>
 #include <functional>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::net;
 
-struct SocketAppenderSkeleton::SocketAppenderSkeletonPriv : public AppenderSkeletonPrivate {
-	SocketAppenderSkeletonPriv(int defaultPort, int reconnectionDelay) :
-		AppenderSkeletonPrivate(),
-		remoteHost(),
-		address(),
-		port(defaultPort),
-		reconnectionDelay(reconnectionDelay),
-		locationInfo(false),
-		thread(){}
-
-	SocketAppenderSkeletonPriv(InetAddressPtr address, int defaultPort, int reconnectionDelay) :
-		AppenderSkeletonPrivate(),
-		remoteHost(),
-		address(address),
-		port(defaultPort),
-		reconnectionDelay(reconnectionDelay),
-		locationInfo(false),
-		thread(){}
-
-	SocketAppenderSkeletonPriv(const LogString& host, int port, int delay) :
-		AppenderSkeletonPrivate(),
-		remoteHost(host),
-		address(InetAddress::getByName(host)),
-		port(port),
-		reconnectionDelay(delay),
-		locationInfo(false),
-		thread(){}
-
-	/**
-	host name
-	*/
-	LogString remoteHost;
-
-	/**
-	IP address
-	*/
-	helpers::InetAddressPtr address;
-
-	int port;
-	int reconnectionDelay;
-	bool locationInfo;
-	std::thread thread;
-	std::condition_variable interrupt;
-	std::mutex interrupt_mutex;
-};
-
 #define _priv static_cast<SocketAppenderSkeletonPriv*>(m_priv.get())
 
-SocketAppenderSkeleton::SocketAppenderSkeleton(int defaultPort, int reconnectionDelay1)
-	:  AppenderSkeleton (std::make_unique<SocketAppenderSkeletonPriv>(defaultPort, reconnectionDelay1))
-{
-}
-
-SocketAppenderSkeleton::SocketAppenderSkeleton(InetAddressPtr address1, int port1, int delay)
-	:AppenderSkeleton (std::make_unique<SocketAppenderSkeletonPriv>(address1, port1, delay))
-
-{
-	_priv->remoteHost = _priv->address->getHostName();
-}
-
-SocketAppenderSkeleton::SocketAppenderSkeleton(const LogString& host, int port1, int delay)
-	:   AppenderSkeleton (std::make_unique<SocketAppenderSkeletonPriv>(host, port1, delay))
+SocketAppenderSkeleton::SocketAppenderSkeleton(std::unique_ptr<SocketAppenderSkeletonPriv> priv)
+	:  AppenderSkeleton (std::move(priv))
 {
 }
 
diff --git a/src/main/cpp/xmlsocketappender.cpp b/src/main/cpp/xmlsocketappender.cpp
index 16cb0bd..a2285fe 100644
--- a/src/main/cpp/xmlsocketappender.cpp
+++ b/src/main/cpp/xmlsocketappender.cpp
@@ -27,20 +27,28 @@
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/helpers/socketoutputstream.h>
 #include <log4cxx/private/appenderskeleton_priv.h>
+#include <log4cxx/private/socketappenderskeleton_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::net;
 using namespace log4cxx::xml;
 
-IMPLEMENT_LOG4CXX_OBJECT(XMLSocketAppender)
+struct XMLSocketAppender::XMLSocketAppenderPriv : public SocketAppenderSkeletonPriv {
+	XMLSocketAppenderPriv(int defaultPort, int reconnectionDelay) :
+		SocketAppenderSkeletonPriv(defaultPort, reconnectionDelay){}
+
+	XMLSocketAppenderPriv(InetAddressPtr address, int defaultPort, int reconnectionDelay) :
+		SocketAppenderSkeletonPriv( address, defaultPort, reconnectionDelay ){}
 
-struct XMLSocketAppender::XMLSocketAppenderPriv : public AppenderSkeletonPrivate {
-	XMLSocketAppenderPriv() : AppenderSkeletonPrivate(){}
+	XMLSocketAppenderPriv(const LogString& host, int port, int delay) :
+		SocketAppenderSkeletonPriv( host, port, delay ){}
 
 	log4cxx::helpers::WriterPtr writer;
 };
 
+IMPLEMENT_LOG4CXX_OBJECT(XMLSocketAppender)
+
 #define _priv static_cast<XMLSocketAppenderPriv*>(m_priv.get())
 
 // The default port number of remote logging server (4560)
@@ -52,13 +60,13 @@ int XMLSocketAppender::DEFAULT_RECONNECTION_DELAY   = 30000;
 const int XMLSocketAppender::MAX_EVENT_LEN          = 1024;
 
 XMLSocketAppender::XMLSocketAppender()
-	: SocketAppenderSkeleton(DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY)
+	: SocketAppenderSkeleton(std::make_unique<XMLSocketAppenderPriv>(DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY))
 {
 	_priv->layout = std::make_shared<XMLLayout>();
 }
 
 XMLSocketAppender::XMLSocketAppender(InetAddressPtr address1, int port1)
-	: SocketAppenderSkeleton(address1, port1, DEFAULT_RECONNECTION_DELAY)
+	: SocketAppenderSkeleton(std::make_unique<XMLSocketAppenderPriv>(address1, port1, DEFAULT_RECONNECTION_DELAY))
 {
 	_priv->layout = std::make_shared<XMLLayout>();
 	Pool p;
@@ -66,7 +74,7 @@ XMLSocketAppender::XMLSocketAppender(InetAddressPtr address1, int port1)
 }
 
 XMLSocketAppender::XMLSocketAppender(const LogString& host, int port1)
-	: SocketAppenderSkeleton(host, port1, DEFAULT_RECONNECTION_DELAY)
+	: SocketAppenderSkeleton(std::make_unique<XMLSocketAppenderPriv>(host, port1, DEFAULT_RECONNECTION_DELAY))
 {
 	_priv->layout = std::make_shared<XMLLayout>();
 	Pool p;
diff --git a/src/main/include/log4cxx/helpers/object.h b/src/main/include/log4cxx/helpers/object.h
index 18b6728..220be40 100644
--- a/src/main/include/log4cxx/helpers/object.h
+++ b/src/main/include/log4cxx/helpers/object.h
@@ -121,6 +121,8 @@ template<typename Ret,
 	bool = std::is_base_of<Type, helpers::Object>::value>
 std::shared_ptr<Ret> cast(const std::shared_ptr<Type>& incoming)
 {
+	const helpers::Class& staticClass = Ret::getStaticClass();
+	LogString name = staticClass.getName();
 	Ret* casted = reinterpret_cast<Ret*>(const_cast<void*>(incoming->cast(Ret::getStaticClass())));
 
 	if ( casted )
diff --git a/src/main/include/log4cxx/net/socketappender.h b/src/main/include/log4cxx/net/socketappender.h
deleted file mode 100644
index 736c573..0000000
--- a/src/main/include/log4cxx/net/socketappender.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOG4CXX_NET_SOCKET_APPENDER_H
-#define _LOG4CXX_NET_SOCKET_APPENDER_H
-
-#include <log4cxx/net/socketappenderskeleton.h>
-#include <log4cxx/helpers/objectoutputstream.h>
-
-namespace log4cxx
-{
-namespace net
-{
-/**
-Sends {@link log4cxx::spi::LoggingEvent LoggingEvent} objects to a remote a log server,
-usually Apache Chainsaw.
-
-<p>The SocketAppender has the following properties:
-
-- If sent to Apache Chainsaw, remote logging
-        is non-intrusive as far as the log event is concerned. In other
-words, the event will be logged with the same time stamp, {@link
-NDC NDC}, location info as if it were logged locally by
-the client.
-
-- SocketAppenders do not use a layout. They ship a
-serialized {@link log4cxx::spi::LoggingEvent LoggingEvent} object
-        to the server side.
-
-- Remote logging uses the TCP protocol. Consequently, if
-the server is reachable, then log events will eventually arrive
-at the server.
-
-- If the remote server is down, the logging requests are
-simply dropped. However, if and when the server comes back up,
-then event transmission is resumed transparently. This
-transparent reconneciton is performed by a <em>connector</em>
-thread which periodically attempts to connect to the server.
-
-- Logging events are automatically <em>buffered</em> by the
-native TCP implementation. This means that if the link to server
-is slow but still faster than the rate of (log) event production
-by the client, the client will not be affected by the slow
-network connection. However, if the network connection is slower
-then the rate of event production, then the client can only
-progress at the network rate. In particular, if the network link
-to the the server is down, the client will be blocked.
-@n @n On the other hand, if the network link is up, but the server
-is down, the client will not be blocked when making log requests
-but the log events will be lost due to server unavailability.
-
-- Even if a <code>SocketAppender</code> is no longer
-attached to any logger, it will not be destroyed in
-the presence of a connector thread. A connector thread exists
-only if the connection to the server is down. To avoid this
-destruction problem, you should #close the the
-<code>SocketAppender</code> explicitly. See also next item.
-@n @n Long lived applications which create/destroy many
-<code>SocketAppender</code> instances should be aware of this
-destruction problem. Most other applications can safely
-ignore it.
-
-- If the application hosting the <code>SocketAppender</code>
-        exits before the <code>SocketAppender</code> is closed either
-explicitly or subsequent to destruction, then there might
-be untransmitted data in the pipe which might be lost.
-@n @n To avoid lost data, it is usually sufficient to
-#close the <code>SocketAppender</code> either explicitly or by
-calling the LogManager#shutdown method
-before exiting the application.
-*/
-class LOG4CXX_EXPORT SocketAppender : public SocketAppenderSkeleton
-{
-	public:
-		/**
-		The default port number of remote logging server (4560).
-		*/
-		static int DEFAULT_PORT;
-
-		/**
-		The default reconnection delay (30000 milliseconds or 30 seconds).
-		*/
-		static int DEFAULT_RECONNECTION_DELAY;
-
-		DECLARE_LOG4CXX_OBJECT(SocketAppender)
-		BEGIN_LOG4CXX_CAST_MAP()
-		LOG4CXX_CAST_ENTRY(SocketAppender)
-		LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton)
-		END_LOG4CXX_CAST_MAP()
-
-		SocketAppender();
-		~SocketAppender();
-
-		/**
-		Connects to remote server at <code>address</code> and <code>port</code>.
-		*/
-		SocketAppender(helpers::InetAddressPtr& address, int port);
-
-		/**
-		Connects to remote server at <code>host</code> and <code>port</code>.
-		*/
-		SocketAppender(const LogString& host, int port);
-
-	protected:
-		virtual void setSocket(log4cxx::helpers::SocketPtr& socket, log4cxx::helpers::Pool& p);
-		virtual void cleanUp(log4cxx::helpers::Pool& p);
-		virtual int getDefaultDelay() const;
-		virtual int getDefaultPort() const;
-		void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool);
-
-}; // class SocketAppender
-
-LOG4CXX_PTR_DEF(SocketAppender);
-} // namespace net
-} // namespace log4cxx
-
-#endif // _LOG4CXX_NET_SOCKET_APPENDER_H
-
diff --git a/src/main/include/log4cxx/net/socketappenderskeleton.h b/src/main/include/log4cxx/net/socketappenderskeleton.h
index 77fccd9..ccad0bd 100644
--- a/src/main/include/log4cxx/net/socketappenderskeleton.h
+++ b/src/main/include/log4cxx/net/socketappenderskeleton.h
@@ -44,20 +44,10 @@ protected:
 	struct SocketAppenderSkeletonPriv;
 
 	public:
-		SocketAppenderSkeleton(int defaultPort, int reconnectionDelay);
+		SocketAppenderSkeleton(std::unique_ptr<SocketAppenderSkeletonPriv> priv);
 		~SocketAppenderSkeleton();
 
 		/**
-		Connects to remote server at <code>address</code> and <code>port</code>.
-		*/
-		SocketAppenderSkeleton(helpers::InetAddressPtr address, int port, int reconnectionDelay);
-
-		/**
-		Connects to remote server at <code>host</code> and <code>port</code>.
-		*/
-		SocketAppenderSkeleton(const LogString& host, int port, int reconnectionDelay);
-
-		/**
 		Connect to the specified <b>RemoteHost</b> and <b>Port</b>.
 		*/
 		void activateOptions(log4cxx::helpers::Pool& p);
diff --git a/src/main/include/log4cxx/private/socketappenderskeleton_priv.h b/src/main/include/log4cxx/private/socketappenderskeleton_priv.h
new file mode 100644
index 0000000..fac4e45
--- /dev/null
+++ b/src/main/include/log4cxx/private/socketappenderskeleton_priv.h
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LOG4CXX_SOCKETAPPENDERSKELETON_PRIVATE_H
+#define LOG4CXX_SOCKETAPPENDERSKELETON_PRIVATE_H
+
+#include <log4cxx/net/socketappenderskeleton.h>
+#include <log4cxx/private/appenderskeleton_priv.h>
+#include <log4cxx/helpers/inetaddress.h>
+
+namespace log4cxx
+{
+namespace net
+{
+
+struct SocketAppenderSkeleton::SocketAppenderSkeletonPriv : public AppenderSkeletonPrivate {
+        SocketAppenderSkeletonPriv(int defaultPort, int reconnectionDelay) :
+	        AppenderSkeletonPrivate(),
+	        remoteHost(),
+	        address(),
+	        port(defaultPort),
+	        reconnectionDelay(reconnectionDelay),
+	        locationInfo(false),
+	        thread(){}
+
+	SocketAppenderSkeletonPriv(helpers::InetAddressPtr address, int defaultPort, int reconnectionDelay) :
+	        AppenderSkeletonPrivate(),
+	        remoteHost(),
+	        address(address),
+	        port(defaultPort),
+	        reconnectionDelay(reconnectionDelay),
+	        locationInfo(false),
+	        thread(){}
+
+	SocketAppenderSkeletonPriv(const LogString& host, int port, int delay) :
+	        AppenderSkeletonPrivate(),
+	        remoteHost(host),
+	        address(helpers::InetAddress::getByName(host)),
+	        port(port),
+	        reconnectionDelay(delay),
+	        locationInfo(false),
+	        thread(){}
+
+	/**
+	host name
+	*/
+	LogString remoteHost;
+
+	/**
+	IP address
+	*/
+	helpers::InetAddressPtr address;
+
+	int port;
+	int reconnectionDelay;
+	bool locationInfo;
+	std::thread thread;
+	std::condition_variable interrupt;
+	std::mutex interrupt_mutex;
+};
+
+} // namespace net
+} // namespace log4cxx
+
+#endif /* LOG4CXX_SOCKETAPPENDERSKELETON_PRIVATE_H */
diff --git a/src/test/cpp/net/CMakeLists.txt b/src/test/cpp/net/CMakeLists.txt
index a5076f9..b7e86a7 100644
--- a/src/test/cpp/net/CMakeLists.txt
+++ b/src/test/cpp/net/CMakeLists.txt
@@ -1,7 +1,6 @@
 
 # Tests defined in this directory
 set(NET_TESTS
-    socketappendertestcase
     sockethubappendertestcase
     syslogappendertestcase
     telnetappendertestcase
@@ -13,9 +12,5 @@ endif(HAS_LIBESMPT)
 foreach(fileName IN LISTS NET_TESTS)
     add_executable(${fileName} "${fileName}.cpp")
 endforeach()
-if(Java_Development_FOUND)
-    add_executable(socketservertestcase socketserverstarter.cpp socketservertestcase.cpp)
-    add_dependencies(socketservertestcase test-classes)
-    list(APPEND NET_TESTS socketservertestcase)
-endif()
+
 set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} ${NET_TESTS} PARENT_SCOPE)
diff --git a/src/test/cpp/net/socketappendertestcase.cpp b/src/test/cpp/net/socketappendertestcase.cpp
index fe3753c..2537b04 100644
--- a/src/test/cpp/net/socketappendertestcase.cpp
+++ b/src/test/cpp/net/socketappendertestcase.cpp
@@ -15,7 +15,6 @@
  * limitations under the License.
  */
 
-#include <log4cxx/net/socketappender.h>
 #include "../appenderskeletontestcase.h"
 #include "apr.h"
 
diff --git a/src/test/cpp/net/socketservertestcase.cpp b/src/test/cpp/net/socketservertestcase.cpp
deleted file mode 100644
index 72a99f0..0000000
--- a/src/test/cpp/net/socketservertestcase.cpp
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <log4cxx/logger.h>
-#include <log4cxx/net/socketappender.h>
-#include <log4cxx/ndc.h>
-#include <log4cxx/mdc.h>
-#include <log4cxx/asyncappender.h>
-
-#include "socketservertestcase.h"
-#include "../util/compare.h"
-#include "../util/transformer.h"
-#include "../util/controlfilter.h"
-#include "../util/absolutedateandtimefilter.h"
-#include "../util/threadfilter.h"
-#include "../util/filenamefilter.h"
-#include <apr_time.h>
-#include <log4cxx/file.h>
-#include <iostream>
-#include <log4cxx/helpers/transcoder.h>
-#include <log4cxx/helpers/stringhelper.h>
-#include "../testchar.h"
-#include "../logunit.h"
-#include <log4cxx/spi/loggerrepository.h>
-
-//Define INT64_C for compilers that don't have it
-#if (!defined(INT64_C))
-	#define INT64_C(value)  value ## LL
-#endif
-
-#if defined(WIN32) || defined(_WIN32)
-	#include <windows.h>
-#endif
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-using namespace log4cxx::net;
-
-#define REGEX_STR(x) x
-// %5p %x [%t] %c %m%n
-// DEBUG T1 [thread] org.apache.log4j.net.SocketAppenderTestCase Message 1
-#define PAT1 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) T1 \\[0x[0-9A-F]*]\\ ") \
-	REGEX_STR(".* Message [0-9]\\{1,2\\}")
-
-// DEBUG T2 [thread] patternlayouttest.cpp(?) Message 1
-#define PAT2 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) T2 \\[0x[0-9A-F]*]\\ ") \
-	REGEX_STR(".*socketservertestcase.cpp\\([0-9]\\{1,4\\}\\) Message [0-9]\\{1,2\\}")
-
-// DEBUG T3 [thread] patternlayouttest.cpp(?) Message 1
-#define PAT3 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) T3 \\[0x[0-9A-F]*]\\ ") \
-	REGEX_STR(".*socketservertestcase.cpp\\([0-9]\\{1,4\\}\\) Message [0-9]\\{1,2\\}")
-
-// DEBUG some T4 MDC-TEST4 [thread] SocketAppenderTestCase - Message 1
-// DEBUG some T4 MDC-TEST4 [thread] SocketAppenderTestCase - Message 1
-#define PAT4 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some T4 MDC-TEST4 \\[0x[0-9A-F]*]\\") \
-	REGEX_STR(" (root|SocketServerTestCase) - Message [0-9]\\{1,2\\}")
-#define PAT5 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some5 T5 MDC-TEST5 \\[0x[0-9A-F]*]\\") \
-	REGEX_STR(" (root|SocketServerTestCase) - Message [0-9]\\{1,2\\}")
-#define PAT6 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some6 T6 client-test6 MDC-TEST6") \
-	REGEX_STR(" \\[0x[0-9A-F]*]\\ (root|SocketServerTestCase) - Message [0-9]\\{1,2\\}")
-#define PAT7 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some7 T7 client-test7 MDC-TEST7") \
-	REGEX_STR(" \\[0x[0-9A-F]*]\\ (root|SocketServerTestCase) - Message [0-9]\\{1,2\\}")
-
-// DEBUG some8 T8 shortSocketServer MDC-TEST7 [thread] SocketServerTestCase - Message 1
-#define PAT8 \
-	REGEX_STR("^(DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some8 T8 shortSocketServer") \
-	REGEX_STR(" MDC-TEST8 \\[0x[0-9A-F]*]\\ (root|SocketServerTestCase) - Message [0-9]\\{1,2\\}")
-
-
-
-/**
- *  This test checks receipt of SocketAppender messages by the ShortSocketServer
- *  class from log4j.  That class must be started externally to this class
- *  for this test to succeed.
- */
-LOGUNIT_CLASS(SocketServerTestCase)
-{
-	LOGUNIT_TEST_SUITE(SocketServerTestCase);
-	LOGUNIT_TEST(test1);
-	LOGUNIT_TEST(test2);
-	LOGUNIT_TEST(test3);
-	LOGUNIT_TEST(test4);
-	LOGUNIT_TEST(test5);
-	LOGUNIT_TEST(test6);
-	LOGUNIT_TEST(test7);
-	LOGUNIT_TEST(test8);
-	LOGUNIT_TEST_SUITE_END();
-
-	SocketAppenderPtr socketAppender;
-	LoggerPtr logger;
-	LoggerPtr root;
-
-	class LineNumberFilter : public Filter
-	{
-		public:
-			LineNumberFilter()
-			{
-				patterns.push_back(PatternReplacement("cpp:[0-9]*", "cpp:XXX"));
-			}
-	};
-
-public:
-	void setUp()
-	{
-		logger = Logger::getLogger(LOG4CXX_STR("org.apache.log4j.net.SocketServerTestCase"));
-		root = Logger::getRootLogger();
-	}
-
-	void tearDown()
-	{
-		socketAppender = 0;
-		log4cxx::spi::LoggerRepositoryPtr rep = root->getLoggerRepository().lock();
-		if (rep) {
-			rep->resetConfiguration();
-		}
-		logger = 0;
-		root = 0;
-	}
-
-	/**
-	We are testing NDC functionality across the wire.
-	*/
-	void test1()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		root->addAppender(socketAppender1);
-		common("test1", LOG4CXX_STR("T1"), LOG4CXX_STR("key1"), LOG4CXX_STR("MDC-TEST1"));
-		delay(1);
-
-		ControlFilter cf;
-		cf << PAT1;
-
-		ThreadFilter threadFilter;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.1")));
-	}
-
-	void test2()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		root->addAppender(socketAppender1);
-		common("test2", LOG4CXX_STR("T2"), LOG4CXX_STR("key2"), LOG4CXX_STR("MDC-TEST2"));
-		delay(1);
-
-		ControlFilter cf;
-		cf << PAT2;
-
-		ThreadFilter threadFilter;
-		LineNumberFilter lineNumberFilter;
-		LogString thisFile;
-		FilenameFilter filenameFilter(__FILE__, "socketservertestcase.cpp");
-
-		std::vector<Filter*> filters;
-		filters.push_back(&filenameFilter);
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-		filters.push_back(&lineNumberFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.2")));
-	}
-
-	void test3()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		root->addAppender(socketAppender1);
-		common("test3", LOG4CXX_STR("T3"), LOG4CXX_STR("key3"), LOG4CXX_STR("MDC-TEST3"));
-		delay(1);
-
-		ControlFilter cf;
-		cf << PAT3;
-
-		ThreadFilter threadFilter;
-		LineNumberFilter lineNumberFilter;
-		LogString thisFile;
-		FilenameFilter filenameFilter(__FILE__, "socketservertestcase.cpp");
-
-		std::vector<Filter*> filters;
-		filters.push_back(&filenameFilter);
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-		filters.push_back(&lineNumberFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.3")));
-	}
-
-	void test4()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		root->addAppender(socketAppender1);
-		NDC::push(LOG4CXX_TEST_STR("some"));
-		common("test4", LOG4CXX_STR("T4"), LOG4CXX_STR("key4"), LOG4CXX_STR("MDC-TEST4"));
-		NDC::pop();
-		delay(1);
-
-		ControlFilter cf;
-		cf << PAT4;
-
-		ThreadFilter threadFilter;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.4")));
-	}
-
-	void test5()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		AsyncAppenderPtr asyncAppender = AsyncAppenderPtr(new AsyncAppender());
-
-		root->addAppender(socketAppender1);
-		root->addAppender(asyncAppender);
-
-		NDC::push(LOG4CXX_TEST_STR("some5"));
-		common("test5", LOG4CXX_STR("T5"), LOG4CXX_STR("key5"), LOG4CXX_STR("MDC-TEST5"));
-		NDC::pop();
-		delay(2);
-
-		ControlFilter cf;
-		cf << PAT5;
-
-		ThreadFilter threadFilter;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.5")));
-	}
-
-	void test6()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		AsyncAppenderPtr asyncAppender = AsyncAppenderPtr(new AsyncAppender());
-
-		root->addAppender(socketAppender1);
-		root->addAppender(asyncAppender);
-
-		NDC::push(LOG4CXX_TEST_STR("some6"));
-		MDC::put(LOG4CXX_TEST_STR("hostID"), LOG4CXX_TEST_STR("client-test6"));
-		common("test6", LOG4CXX_STR("T6"), LOG4CXX_STR("key6"), LOG4CXX_STR("MDC-TEST6"));
-		NDC::pop();
-		MDC::remove(LOG4CXX_TEST_STR("hostID"));
-		delay(2);
-
-		ControlFilter cf;
-		cf << PAT6;
-
-		ThreadFilter threadFilter;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.6")));
-	}
-
-	void test7()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-		AsyncAppenderPtr asyncAppender = AsyncAppenderPtr(new AsyncAppender());
-
-		root->addAppender(socketAppender1);
-		root->addAppender(asyncAppender);
-
-		NDC::push(LOG4CXX_TEST_STR("some7"));
-		MDC::put(LOG4CXX_TEST_STR("hostID"), LOG4CXX_TEST_STR("client-test7"));
-		common("test7", LOG4CXX_STR("T7"), LOG4CXX_STR("key7"), LOG4CXX_STR("MDC-TEST7"));
-		NDC::pop();
-		MDC::remove(LOG4CXX_TEST_STR("hostID"));
-		delay(2);
-
-		ControlFilter cf;
-		cf << PAT7;
-
-		ThreadFilter threadFilter;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.7")));
-	}
-
-	void test8()
-	{
-		SocketAppenderPtr socketAppender1 = SocketAppenderPtr(
-				new SocketAppender(LOG4CXX_STR("localhost"), PORT));
-
-		root->addAppender(socketAppender1);
-
-		NDC::push(LOG4CXX_TEST_STR("some8"));
-		common("test8", LOG4CXX_STR("T8"), LOG4CXX_STR("key8"), LOG4CXX_STR("MDC-TEST8"));
-		NDC::pop();
-		delay(2);
-
-		ControlFilter cf;
-		cf << PAT8;
-
-		ThreadFilter threadFilter;
-
-		std::vector<Filter*> filters;
-		filters.push_back(&cf);
-		filters.push_back(&threadFilter);
-
-		try
-		{
-			Transformer::transform(TEMP, FILTERED, filters);
-		}
-		catch (UnexpectedFormatException& e)
-		{
-			std::cout << "UnexpectedFormatException :" << e.what() << std::endl;
-			throw;
-		}
-
-		LOGUNIT_ASSERT(Compare::compare(FILTERED, LOG4CXX_FILE("witness/socketServer.8")));
-	}
-
-	void common(const std::string & testName, const LogString & dc, const LogString & key, const LogString & val)
-	{
-		int i = -1;
-		NDC::push(dc);
-		MDC::put(key, val);
-
-		logger->setLevel(Level::getDebug());
-		root->setLevel(Level::getDebug());
-
-		LOG4CXX_TRACE(logger, "Message " << i);
-		i++;
-
-		logger->setLevel(Level::getTrace());
-		root->setLevel(Level::getTrace());
-
-		LOG4CXX_TRACE(logger, "Message " << ++i);
-		LOG4CXX_TRACE(root, "Message " << ++i);
-
-		LOG4CXX_DEBUG(logger, "Message " << ++i);
-		LOG4CXX_DEBUG(root, "Message " << ++i);
-
-		LOG4CXX_INFO(logger, "Message "  << ++i);
-		LOG4CXX_WARN(logger, "Message " << ++i);
-		LOG4CXX_FATAL(logger, "Message " << ++i); //5
-
-		std::string exceptionMsg("\njava.lang.Exception: Just testing\n"
-			"\tat org.apache.log4j.net.SocketServerTestCase.common(SocketServerTestCase.java:XXX)\n"
-			"\tat org.apache.log4j.net.SocketServerTestCase.");
-		exceptionMsg.append(testName);
-		exceptionMsg.append("(SocketServerTestCase.java:XXX)\n"
-			"\tat junit.framework.TestCase.runTest(TestCase.java:XXX)\n"
-			"\tat junit.framework.TestCase.runBare(TestCase.java:XXX)\n"
-			"\tat junit.framework.TestResult$1.protect(TestResult.java:XXX)\n"
-			"\tat junit.framework.TestResult.runProtected(TestResult.java:XXX)\n"
-			"\tat junit.framework.TestResult.run(TestResult.java:XXX)\n"
-			"\tat junit.framework.TestCase.run(TestCase.java:XXX)\n"
-			"\tat junit.framework.TestSuite.runTest(TestSuite.java:XXX)\n"
-			"\tat junit.framework.TestSuite.run(TestSuite.java:XXX)");
-
-
-		LOG4CXX_DEBUG(logger, "Message " << ++i << exceptionMsg);
-		LOG4CXX_ERROR(root, "Message " << ++i << exceptionMsg);
-
-		NDC::pop();
-		MDC::remove(key);
-	}
-
-	void delay(int secs)
-	{
-		apr_sleep(APR_USEC_PER_SEC * secs);
-	}
-
-private:
-	static const File TEMP;
-	static const File FILTERED;
-};
-
-const File SocketServerTestCase::TEMP("output/temp");
-const File SocketServerTestCase::FILTERED("output/filtered");
-
-LOGUNIT_TEST_SUITE_REGISTRATION(SocketServerTestCase)

[logging-log4cxx] 14/20: Fix infinite recursion and crash

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit df8d963720b04fc3801b7731a3ee5a4aafe0fc15
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 18:51:50 2021 -0400

    Fix infinite recursion and crash
---
 src/main/cpp/fileinputstream.cpp | 3 ++-
 src/main/cpp/rootlogger.cpp      | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/cpp/fileinputstream.cpp b/src/main/cpp/fileinputstream.cpp
index d9a8917..af5aec8 100644
--- a/src/main/cpp/fileinputstream.cpp
+++ b/src/main/cpp/fileinputstream.cpp
@@ -65,7 +65,8 @@ void FileInputStream::open(const LogString& filename)
 }
 
 
-FileInputStream::FileInputStream(const File& aFile)
+FileInputStream::FileInputStream(const File& aFile) :
+	m_priv(std::make_unique<FileInputStreamPrivate>())
 {
 	apr_fileperms_t perm = APR_OS_DEFAULT;
 	apr_int32_t flags = APR_READ;
diff --git a/src/main/cpp/rootlogger.cpp b/src/main/cpp/rootlogger.cpp
index c51c4ac..5c3529f 100644
--- a/src/main/cpp/rootlogger.cpp
+++ b/src/main/cpp/rootlogger.cpp
@@ -43,7 +43,7 @@ void RootLogger::setLevel(const LevelPtr level1)
 	}
 	else
 	{
-		setLevel(level1);
+		Logger::setLevel(level1);
 	}
 }
 

[logging-log4cxx] 09/20: Made filter hierarchy ABI stable

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bf869837dd9a7a1e93d08e059fc09fda6943c1e5
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 17:30:13 2021 -0400

    Made filter hierarchy ABI stable
---
 src/main/cpp/andfilter.cpp                         | 28 ++++++----
 src/main/cpp/filter.cpp                            | 14 +++--
 src/main/cpp/levelmatchfilter.cpp                  | 33 +++++++++---
 src/main/cpp/levelrangefilter.cpp                  | 60 ++++++++++++++++++---
 src/main/cpp/loggermatchfilter.cpp                 | 35 +++++++++---
 src/main/cpp/mapfilter.cpp                         | 63 +++++++++++++++++++---
 src/main/cpp/stringmatchfilter.cpp                 | 46 +++++++++++++---
 src/main/include/log4cxx/filter/andfilter.h        |  3 +-
 src/main/include/log4cxx/filter/levelmatchfilter.h | 14 ++---
 src/main/include/log4cxx/filter/levelrangefilter.h | 39 +++-----------
 .../include/log4cxx/filter/loggermatchfilter.h     | 14 ++---
 src/main/include/log4cxx/filter/mapfilter.h        | 48 +++++------------
 .../include/log4cxx/filter/stringmatchfilter.h     | 30 ++++-------
 .../log4cxx/private/filter_priv.h}                 | 31 ++++-------
 src/main/include/log4cxx/spi/filter.h              | 10 ++--
 15 files changed, 286 insertions(+), 182 deletions(-)

diff --git a/src/main/cpp/andfilter.cpp b/src/main/cpp/andfilter.cpp
index d5a24b0..d029e4f 100644
--- a/src/main/cpp/andfilter.cpp
+++ b/src/main/cpp/andfilter.cpp
@@ -19,24 +19,30 @@
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/optionconverter.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::filter;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
-IMPLEMENT_LOG4CXX_OBJECT(AndFilter)
+#define priv static_cast<AndFilterPrivate*>(m_priv.get())
 
-struct AndFilter::priv_data{
-	priv_data() : headFilter(), tailFilter(), acceptOnMatch(true){}
+struct AndFilter::AndFilterPrivate : public FilterPrivate{
+	AndFilterPrivate() : FilterPrivate(),
+						headFilter(),
+						tailFilter(),
+						acceptOnMatch(true){}
 
 	log4cxx::spi::FilterPtr headFilter;
 	log4cxx::spi::FilterPtr tailFilter;
 	bool acceptOnMatch;
 };
 
+IMPLEMENT_LOG4CXX_OBJECT(AndFilter)
+
 AndFilter::AndFilter()
-	: m_priv( std::make_unique<priv_data>() )
+	: Filter( std::make_unique<AndFilterPrivate>() )
 {
 }
 
@@ -44,28 +50,28 @@ AndFilter::~AndFilter(){}
 
 void AndFilter::addFilter(const FilterPtr& filter)
 {
-	if (m_priv->headFilter == NULL)
+	if (priv->headFilter == NULL)
 	{
-		m_priv->headFilter = filter;
-		m_priv->tailFilter = filter;
+		priv->headFilter = filter;
+		priv->tailFilter = filter;
 	}
 	else
 	{
-		m_priv->tailFilter->setNext(filter);
+		priv->tailFilter->setNext(filter);
 	}
 }
 
 
 void AndFilter::setAcceptOnMatch(bool newValue)
 {
-	m_priv->acceptOnMatch = newValue;
+	priv->acceptOnMatch = newValue;
 }
 
 Filter::FilterDecision AndFilter::decide(
 	const spi::LoggingEventPtr& event) const
 {
 	bool accepted = true;
-	FilterPtr f(m_priv->headFilter);
+	FilterPtr f(priv->headFilter);
 
 	while (f != NULL)
 	{
@@ -75,7 +81,7 @@ Filter::FilterDecision AndFilter::decide(
 
 	if (accepted)
 	{
-		if (m_priv->acceptOnMatch)
+		if (priv->acceptOnMatch)
 		{
 			return Filter::ACCEPT;
 		}
diff --git a/src/main/cpp/filter.cpp b/src/main/cpp/filter.cpp
index d838286..3c47cca 100644
--- a/src/main/cpp/filter.cpp
+++ b/src/main/cpp/filter.cpp
@@ -17,23 +17,31 @@
 
 #include <log4cxx/logstring.h>
 #include <log4cxx/spi/filter.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
-Filter::Filter() : next()
+Filter::Filter() : m_priv(std::make_unique<FilterPrivate>())
 {
 }
 
+Filter::Filter(std::unique_ptr<FilterPrivate> priv) :
+	m_priv(std::move(priv)){
+
+}
+
+Filter::~Filter(){}
+
 FilterPtr Filter::getNext() const
 {
-	return next;
+	return m_priv->next;
 }
 
 void Filter::setNext(const FilterPtr& newNext)
 {
-	next = newNext;
+	m_priv->next = newNext;
 }
 
 void Filter::activateOptions(Pool&)
diff --git a/src/main/cpp/levelmatchfilter.cpp b/src/main/cpp/levelmatchfilter.cpp
index 4784269..22877f6 100644
--- a/src/main/cpp/levelmatchfilter.cpp
+++ b/src/main/cpp/levelmatchfilter.cpp
@@ -21,20 +21,30 @@
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/optionconverter.h>
 #include <log4cxx/level.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::filter;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
-IMPLEMENT_LOG4CXX_OBJECT(LevelMatchFilter)
+#define priv static_cast<LevelMatchFilterPrivate*>(m_priv.get())
+
+struct LevelMatchFilter::LevelMatchFilterPrivate : public FilterPrivate {
+	bool acceptOnMatch;
+	LevelPtr levelToMatch;
+};
 
+IMPLEMENT_LOG4CXX_OBJECT(LevelMatchFilter)
 
 LevelMatchFilter::LevelMatchFilter()
-	: acceptOnMatch(true)
+	: Filter(std::make_unique<LevelMatchFilterPrivate>())
 {
+	priv->acceptOnMatch = true;
 }
 
+LevelMatchFilter::~LevelMatchFilter(){}
+
 void LevelMatchFilter::setOption(const LogString& option,
 	const LogString& value)
 {
@@ -48,26 +58,26 @@ void LevelMatchFilter::setOption(const LogString& option,
 	else if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("ACCEPTONMATCH"), LOG4CXX_STR("acceptonmatch")))
 	{
-		acceptOnMatch = OptionConverter::toBoolean(value, acceptOnMatch);
+		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
 }
 
 void LevelMatchFilter::setLevelToMatch(const LogString& levelToMatch1)
 {
-	this->levelToMatch = OptionConverter::toLevel(levelToMatch1, this->levelToMatch);
+	priv->levelToMatch = OptionConverter::toLevel(levelToMatch1, priv->levelToMatch);
 }
 
 LogString LevelMatchFilter::getLevelToMatch() const
 {
-	return levelToMatch->toString();
+	return priv->levelToMatch->toString();
 }
 
 Filter::FilterDecision LevelMatchFilter::decide(
 	const log4cxx::spi::LoggingEventPtr& event) const
 {
-	if (levelToMatch != 0 && levelToMatch->equals(event->getLevel()))
+	if (priv->levelToMatch != 0 && priv->levelToMatch->equals(event->getLevel()))
 	{
-		if (acceptOnMatch)
+		if (priv->acceptOnMatch)
 		{
 			return Filter::ACCEPT;
 		}
@@ -82,3 +92,12 @@ Filter::FilterDecision LevelMatchFilter::decide(
 	}
 }
 
+void LevelMatchFilter::setAcceptOnMatch(bool acceptOnMatch1)
+{
+	priv->acceptOnMatch = acceptOnMatch1;
+}
+
+bool LevelMatchFilter::getAcceptOnMatch() const
+{
+	return priv->acceptOnMatch;
+}
diff --git a/src/main/cpp/levelrangefilter.cpp b/src/main/cpp/levelrangefilter.cpp
index 7747b7d..8d79ae1 100644
--- a/src/main/cpp/levelrangefilter.cpp
+++ b/src/main/cpp/levelrangefilter.cpp
@@ -21,20 +21,37 @@
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/optionconverter.h>
 #include <log4cxx/level.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::filter;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<LevelRangeFilterPrivate*>(m_priv.get())
+
+struct LevelRangeFilter::LevelRangeFilterPrivate : public FilterPrivate{
+	LevelRangeFilterPrivate() : acceptOnMatch(false), levelMin(Level::getAll()), levelMax(Level::getOff()){}
+
+	/**
+	Do we return ACCEPT when a match occurs. Default is
+	<code>false</code>, so that later filters get run by default
+	*/
+	bool acceptOnMatch;
+	LevelPtr levelMin;
+	LevelPtr levelMax;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(LevelRangeFilter)
 
 
 LevelRangeFilter::LevelRangeFilter()
-	: acceptOnMatch(false), levelMin(Level::getAll()), levelMax(Level::getOff())
+	: Filter(std::make_unique<LevelRangeFilterPrivate>())
 {
 }
 
+LevelRangeFilter::~LevelRangeFilter(){}
+
 void LevelRangeFilter::setOption(const LogString& option,
 	const LogString& value)
 {
@@ -42,30 +59,30 @@ void LevelRangeFilter::setOption(const LogString& option,
 	if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("LEVELMIN"), LOG4CXX_STR("levelmin")))
 	{
-		levelMin = OptionConverter::toLevel(value, levelMin);
+		priv->levelMin = OptionConverter::toLevel(value, priv->levelMin);
 	}
 	else if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("LEVELMAX"), LOG4CXX_STR("levelmax")))
 	{
-		levelMax = OptionConverter::toLevel(value, levelMax);
+		priv->levelMax = OptionConverter::toLevel(value, priv->levelMax);
 	}
 	else if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("ACCEPTONMATCH"), LOG4CXX_STR("acceptonmatch")))
 	{
-		acceptOnMatch = OptionConverter::toBoolean(value, acceptOnMatch);
+		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
 }
 
 Filter::FilterDecision LevelRangeFilter::decide(
 	const spi::LoggingEventPtr& event) const
 {
-	if (levelMin != 0 && !event->getLevel()->isGreaterOrEqual(levelMin))
+	if (priv->levelMin != 0 && !event->getLevel()->isGreaterOrEqual(priv->levelMin))
 	{
 		// level of event is less than minimum
 		return Filter::DENY;
 	}
 
-	if (levelMax != 0 && event->getLevel()->toInt() > levelMax->toInt())
+	if (priv->levelMax != 0 && event->getLevel()->toInt() > priv->levelMax->toInt())
 	{
 		// level of event is greater than maximum
 		// Alas, there is no Level.isGreater method. and using
@@ -74,7 +91,7 @@ Filter::FilterDecision LevelRangeFilter::decide(
 		return Filter::DENY;
 	}
 
-	if (acceptOnMatch)
+	if (priv->acceptOnMatch)
 	{
 		// this filter set up to bypass later filters and always return
 		// accept if level in range
@@ -87,3 +104,32 @@ Filter::FilterDecision LevelRangeFilter::decide(
 	}
 }
 
+void LevelRangeFilter::setLevelMin(const LevelPtr& levelMin1)
+{
+	priv->levelMin = levelMin1;
+}
+
+const LevelPtr& LevelRangeFilter::getLevelMin() const
+{
+	return priv->levelMin;
+}
+
+void LevelRangeFilter::setLevelMax(const LevelPtr& levelMax1)
+{
+	priv->levelMax = levelMax1;
+}
+
+const LevelPtr& LevelRangeFilter::getLevelMax() const
+{
+	return priv->levelMax;
+}
+
+void LevelRangeFilter::setAcceptOnMatch(bool acceptOnMatch1)
+{
+	priv->acceptOnMatch = acceptOnMatch1;
+}
+
+bool LevelRangeFilter::getAcceptOnMatch() const
+{
+	return priv->acceptOnMatch;
+}
diff --git a/src/main/cpp/loggermatchfilter.cpp b/src/main/cpp/loggermatchfilter.cpp
index 17a659b..9a1e2c3 100644
--- a/src/main/cpp/loggermatchfilter.cpp
+++ b/src/main/cpp/loggermatchfilter.cpp
@@ -20,28 +20,42 @@
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/optionconverter.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::filter;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<LoggerMatchFilterPrivate*>(m_priv.get())
+
+struct LoggerMatchFilter::LoggerMatchFilterPrivate : public FilterPrivate {
+	LoggerMatchFilterPrivate() : FilterPrivate(),
+		acceptOnMatch(true),
+		loggerToMatch(LOG4CXX_STR("root")){}
+
+	bool acceptOnMatch;
+	LogString loggerToMatch;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(LoggerMatchFilter)
 
 
 LoggerMatchFilter::LoggerMatchFilter()
-	: acceptOnMatch(true), loggerToMatch(LOG4CXX_STR("root"))
+	: Filter(std::make_unique<LoggerMatchFilterPrivate>())
 {
 }
 
+LoggerMatchFilter::~LoggerMatchFilter(){}
+
 void LoggerMatchFilter::setLoggerToMatch(const LogString& value)
 {
-	loggerToMatch = value;
+	priv->loggerToMatch = value;
 }
 
 LogString LoggerMatchFilter::getLoggerToMatch() const
 {
-	return loggerToMatch;
+	return priv->loggerToMatch;
 }
 
 void LoggerMatchFilter::setOption(const LogString& option,
@@ -56,18 +70,18 @@ void LoggerMatchFilter::setOption(const LogString& option,
 	else if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("ACCEPTONMATCH"), LOG4CXX_STR("acceptonmatch")))
 	{
-		acceptOnMatch = OptionConverter::toBoolean(value, acceptOnMatch);
+		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
 }
 
 Filter::FilterDecision LoggerMatchFilter::decide(
 	const spi::LoggingEventPtr& event) const
 {
-	bool matchOccured = loggerToMatch == event->getLoggerName();
+	bool matchOccured = priv->loggerToMatch == event->getLoggerName();
 
 	if (matchOccured)
 	{
-		if (acceptOnMatch)
+		if (priv->acceptOnMatch)
 		{
 			return Filter::ACCEPT;
 		}
@@ -82,3 +96,12 @@ Filter::FilterDecision LoggerMatchFilter::decide(
 	}
 }
 
+void LoggerMatchFilter::setAcceptOnMatch(bool acceptOnMatch1)
+{
+	priv->acceptOnMatch = acceptOnMatch1;
+}
+
+bool LoggerMatchFilter::getAcceptOnMatch() const
+{
+	return priv->acceptOnMatch;
+}
diff --git a/src/main/cpp/mapfilter.cpp b/src/main/cpp/mapfilter.cpp
index 5ea3110..ebde150 100644
--- a/src/main/cpp/mapfilter.cpp
+++ b/src/main/cpp/mapfilter.cpp
@@ -20,47 +20,61 @@
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/optionconverter.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::filter;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<MapFilterPrivate*>(m_priv.get())
+
+struct MapFilter::MapFilterPrivate : public FilterPrivate {
+	MapFilterPrivate() : FilterPrivate(),
+		acceptOnMatch(true), mustMatchAll(false){}
+
+	bool    acceptOnMatch;
+	bool    mustMatchAll; // true = AND; false = OR
+	KeyVals keyVals;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(MapFilter)
 
-MapFilter::MapFilter() : acceptOnMatch(true), mustMatchAll(false)
+MapFilter::MapFilter() : Filter(std::make_unique<MapFilterPrivate>())
 {
 
 }
 
+MapFilter::~MapFilter(){}
+
 void MapFilter::setOption(  const LogString& option,
 	const LogString& value)
 {
 	if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("ACCEPTONMATCH"), LOG4CXX_STR("acceptonmatch")))
 	{
-		acceptOnMatch = OptionConverter::toBoolean(value, acceptOnMatch);
+		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
 	else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("OPERATOR"), LOG4CXX_STR("operator")))
 	{
-		mustMatchAll = StringHelper::equalsIgnoreCase(value, LOG4CXX_STR("AND"), LOG4CXX_STR("and")) ? true : false;
+		priv->mustMatchAll = StringHelper::equalsIgnoreCase(value, LOG4CXX_STR("AND"), LOG4CXX_STR("and")) ? true : false;
 	}
 	else if (!option.empty() && !value.empty())
 	{
-		keyVals[option] = value;
+		priv->keyVals[option] = value;
 	}
 }
 
 Filter::FilterDecision MapFilter::decide(
 	const log4cxx::spi::LoggingEventPtr& event) const
 {
-	if (keyVals.empty())
+	if (priv->keyVals.empty())
 	{
 		return Filter::NEUTRAL;
 	}
 
 	bool matched = true;
 
-	for (KeyVals::const_iterator it = keyVals.begin(); it != keyVals.end(); ++it)
+	for (KeyVals::const_iterator it = priv->keyVals.begin(); it != priv->keyVals.end(); ++it)
 	{
 		LogString curval;
 		event->getMDC(it->first, curval);
@@ -74,13 +88,13 @@ Filter::FilterDecision MapFilter::decide(
 			matched = true;
 		}
 
-		if (mustMatchAll != matched)
+		if (priv->mustMatchAll != matched)
 		{
 			break;
 		}
 	}
 
-	if (acceptOnMatch)
+	if (priv->acceptOnMatch)
 	{
 		return matched ? Filter::ACCEPT : Filter::NEUTRAL;
 	}
@@ -89,3 +103,36 @@ Filter::FilterDecision MapFilter::decide(
 		return matched ? Filter::DENY : Filter::NEUTRAL;
 	}
 }
+
+void MapFilter::setKeyValue(const LogString& strKey, const LogString& strValue)
+{
+	priv->keyVals[strKey] = strValue;
+}
+
+const LogString& MapFilter::getValue(const LogString& strKey) const
+{
+	static  const LogString                 empty;
+	const KeyVals::const_iterator   it(priv->keyVals.find(strKey));
+
+	return (it != priv->keyVals.end() ? it->second : empty);
+}
+
+void MapFilter::setAcceptOnMatch(bool acceptOnMatch1)
+{
+	priv->acceptOnMatch = acceptOnMatch1;
+}
+
+bool MapFilter::getAcceptOnMatch() const
+{
+	return priv->acceptOnMatch;
+}
+
+bool MapFilter::getMustMatchAll() const
+{
+	return priv->mustMatchAll;
+}
+
+void MapFilter::setMustMatchAll(bool mustMatchAll1)
+{
+	priv->mustMatchAll = mustMatchAll1;
+}
diff --git a/src/main/cpp/stringmatchfilter.cpp b/src/main/cpp/stringmatchfilter.cpp
index 978a708..eb6c113 100644
--- a/src/main/cpp/stringmatchfilter.cpp
+++ b/src/main/cpp/stringmatchfilter.cpp
@@ -20,20 +20,33 @@
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/optionconverter.h>
+#include <log4cxx/private/filter_priv.h>
 
 using namespace log4cxx;
 using namespace log4cxx::filter;
 using namespace log4cxx::spi;
 using namespace log4cxx::helpers;
 
+#define priv static_cast<StringMatchFilterPrivate*>(m_priv.get())
+
+struct StringMatchFilter::StringMatchFilterPrivate : public FilterPrivate {
+	StringMatchFilterPrivate() : FilterPrivate(),
+			acceptOnMatch(true),
+			stringToMatch(){}
+
+	bool acceptOnMatch;
+	LogString stringToMatch;
+};
+
 IMPLEMENT_LOG4CXX_OBJECT(StringMatchFilter)
 
 StringMatchFilter::StringMatchFilter() :
-	acceptOnMatch(true),
-	stringToMatch()
+	Filter(std::make_unique<StringMatchFilterPrivate>())
 {
 }
 
+StringMatchFilter::~StringMatchFilter(){}
+
 void StringMatchFilter::setOption(const LogString& option,
 	const LogString& value)
 {
@@ -41,12 +54,12 @@ void StringMatchFilter::setOption(const LogString& option,
 	if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("STRINGTOMATCH"), LOG4CXX_STR("stringtomatch")))
 	{
-		stringToMatch = value;
+		priv->stringToMatch = value;
 	}
 	else if (StringHelper::equalsIgnoreCase(option,
 			LOG4CXX_STR("ACCEPTONMATCH"), LOG4CXX_STR("acceptonmatch")))
 	{
-		acceptOnMatch = OptionConverter::toBoolean(value, acceptOnMatch);
+		priv->acceptOnMatch = OptionConverter::toBoolean(value, priv->acceptOnMatch);
 	}
 }
 
@@ -55,20 +68,20 @@ Filter::FilterDecision StringMatchFilter::decide(
 {
 	const LogString& msg = event->getRenderedMessage();
 
-	if (msg.empty() || stringToMatch.empty())
+	if (msg.empty() || priv->stringToMatch.empty())
 	{
 		return Filter::NEUTRAL;
 	}
 
 
-	if ( msg.find(stringToMatch) == LogString::npos )
+	if ( msg.find(priv->stringToMatch) == LogString::npos )
 	{
 		return Filter::NEUTRAL;
 	}
 	else
 	{
 		// we've got a match
-		if (acceptOnMatch)
+		if (priv->acceptOnMatch)
 		{
 			return Filter::ACCEPT;
 		}
@@ -79,3 +92,22 @@ Filter::FilterDecision StringMatchFilter::decide(
 	}
 }
 
+void StringMatchFilter::setStringToMatch(const LogString& stringToMatch1)
+{
+	priv->stringToMatch.assign(stringToMatch1);
+}
+
+const LogString& StringMatchFilter::getStringToMatch() const
+{
+	return priv->stringToMatch;
+}
+
+void StringMatchFilter::setAcceptOnMatch(bool acceptOnMatch1)
+{
+	priv->acceptOnMatch = acceptOnMatch1;
+}
+
+bool StringMatchFilter::getAcceptOnMatch() const
+{
+	return priv->acceptOnMatch;
+}
diff --git a/src/main/include/log4cxx/filter/andfilter.h b/src/main/include/log4cxx/filter/andfilter.h
index 03c43a4..2e4033e 100644
--- a/src/main/include/log4cxx/filter/andfilter.h
+++ b/src/main/include/log4cxx/filter/andfilter.h
@@ -79,8 +79,7 @@ namespace filter
 class LOG4CXX_EXPORT AndFilter: public log4cxx::spi::Filter
 {
 	private:
-		struct priv_data;
-		std::unique_ptr<priv_data> m_priv;
+		struct AndFilterPrivate;
 
 		AndFilter(const AndFilter&);
 		AndFilter& operator=(const AndFilter&);
diff --git a/src/main/include/log4cxx/filter/levelmatchfilter.h b/src/main/include/log4cxx/filter/levelmatchfilter.h
index 11266be..56aa50f 100644
--- a/src/main/include/log4cxx/filter/levelmatchfilter.h
+++ b/src/main/include/log4cxx/filter/levelmatchfilter.h
@@ -49,8 +49,7 @@ then {@link spi::Filter#DENY DENY} is returned. If there is no match,
 class LOG4CXX_EXPORT LevelMatchFilter : public spi::Filter
 {
 	private:
-		bool acceptOnMatch;
-		LevelPtr levelToMatch;
+		struct LevelMatchFilterPrivate;
 
 	public:
 		typedef spi::Filter BASE_CLASS;
@@ -61,6 +60,7 @@ class LOG4CXX_EXPORT LevelMatchFilter : public spi::Filter
 		END_LOG4CXX_CAST_MAP()
 
 		LevelMatchFilter();
+		~LevelMatchFilter();
 
 		/**
 		Set options
@@ -72,15 +72,9 @@ class LOG4CXX_EXPORT LevelMatchFilter : public spi::Filter
 
 		LogString getLevelToMatch() const;
 
-		inline void setAcceptOnMatch(bool acceptOnMatch1)
-		{
-			this->acceptOnMatch = acceptOnMatch1;
-		}
+		void setAcceptOnMatch(bool acceptOnMatch1);
 
-		inline bool getAcceptOnMatch() const
-		{
-			return acceptOnMatch;
-		}
+		bool getAcceptOnMatch() const;
 
 		/**
 		Return the decision of this filter.
diff --git a/src/main/include/log4cxx/filter/levelrangefilter.h b/src/main/include/log4cxx/filter/levelrangefilter.h
index 6b5afdd..9851e31 100644
--- a/src/main/include/log4cxx/filter/levelrangefilter.h
+++ b/src/main/include/log4cxx/filter/levelrangefilter.h
@@ -57,13 +57,7 @@ filter out events by level.
 class LOG4CXX_EXPORT LevelRangeFilter : public spi::Filter
 {
 	private:
-		/**
-		Do we return ACCEPT when a match occurs. Default is
-		<code>false</code>, so that later filters get run by default
-		*/
-		bool acceptOnMatch;
-		LevelPtr levelMin;
-		LevelPtr levelMax;
+		struct LevelRangeFilterPrivate;
 
 	public:
 		typedef spi::Filter BASE_CLASS;
@@ -74,6 +68,7 @@ class LOG4CXX_EXPORT LevelRangeFilter : public spi::Filter
 		END_LOG4CXX_CAST_MAP()
 
 		LevelRangeFilter();
+		~LevelRangeFilter();
 
 		/**
 		Set options
@@ -84,50 +79,32 @@ class LOG4CXX_EXPORT LevelRangeFilter : public spi::Filter
 		/**
 		Set the <code>LevelMin</code> option.
 		*/
-		void setLevelMin(const LevelPtr& levelMin1)
-		{
-			this->levelMin = levelMin1;
-		}
+		void setLevelMin(const LevelPtr& levelMin1);
 
 		/**
 		Get the value of the <code>LevelMin</code> option.
 		*/
-		const LevelPtr& getLevelMin() const
-		{
-			return levelMin;
-		}
+		const LevelPtr& getLevelMin() const;
 
 		/**
 		Set the <code>LevelMax</code> option.
 		*/
-		void setLevelMax(const LevelPtr& levelMax1)
-		{
-			this->levelMax = levelMax1;
-		}
+		void setLevelMax(const LevelPtr& levelMax1);
 
 		/**
 		Get the value of the <code>LevelMax</code> option.
 		*/
-		const LevelPtr& getLevelMax() const
-		{
-			return levelMax;
-		}
+		const LevelPtr& getLevelMax() const;
 
 		/**
 		Set the <code>AcceptOnMatch</code> option.
 		*/
-		inline void setAcceptOnMatch(bool acceptOnMatch1)
-		{
-			this->acceptOnMatch = acceptOnMatch1;
-		}
+		void setAcceptOnMatch(bool acceptOnMatch1);
 
 		/**
 		Get the value of the <code>AcceptOnMatch</code> option.
 		*/
-		inline bool getAcceptOnMatch() const
-		{
-			return acceptOnMatch;
-		}
+		bool getAcceptOnMatch() const;
 
 		/**
 		Return the decision of this filter.
diff --git a/src/main/include/log4cxx/filter/loggermatchfilter.h b/src/main/include/log4cxx/filter/loggermatchfilter.h
index 1d0063e..494213c 100644
--- a/src/main/include/log4cxx/filter/loggermatchfilter.h
+++ b/src/main/include/log4cxx/filter/loggermatchfilter.h
@@ -51,8 +51,7 @@ namespace filter
 class LOG4CXX_EXPORT LoggerMatchFilter : public spi::Filter
 {
 	private:
-		bool acceptOnMatch;
-		LogString loggerToMatch;
+		struct LoggerMatchFilterPrivate;
 
 	public:
 		typedef spi::Filter BASE_CLASS;
@@ -63,6 +62,7 @@ class LOG4CXX_EXPORT LoggerMatchFilter : public spi::Filter
 		END_LOG4CXX_CAST_MAP()
 
 		LoggerMatchFilter();
+		~LoggerMatchFilter();
 
 		/**
 		Set options
@@ -74,15 +74,9 @@ class LOG4CXX_EXPORT LoggerMatchFilter : public spi::Filter
 
 		LogString getLoggerToMatch() const;
 
-		inline void setAcceptOnMatch(bool acceptOnMatch1)
-		{
-			this->acceptOnMatch = acceptOnMatch1;
-		}
+		void setAcceptOnMatch(bool acceptOnMatch1);
 
-		inline bool getAcceptOnMatch() const
-		{
-			return acceptOnMatch;
-		}
+		bool getAcceptOnMatch() const;
 
 		/**
 		Return the decision of this filter.
diff --git a/src/main/include/log4cxx/filter/mapfilter.h b/src/main/include/log4cxx/filter/mapfilter.h
index 77305aa..67c49c5 100644
--- a/src/main/include/log4cxx/filter/mapfilter.h
+++ b/src/main/include/log4cxx/filter/mapfilter.h
@@ -45,9 +45,7 @@ class LOG4CXX_EXPORT MapFilter: public log4cxx::spi::Filter
 		typedef std::map < LogString, LogString > KeyVals;
 
 	private:
-		bool    acceptOnMatch;
-		bool    mustMatchAll; // true = AND; false = OR
-		KeyVals keyVals;
+		struct MapFilterPrivate;
 
 	public:
 		DECLARE_LOG4CXX_OBJECT(MapFilter)
@@ -57,6 +55,7 @@ class LOG4CXX_EXPORT MapFilter: public log4cxx::spi::Filter
 		END_LOG4CXX_CAST_MAP()
 
 		MapFilter();
+		~MapFilter();
 
 		/**
 		Set options
@@ -64,38 +63,17 @@ class LOG4CXX_EXPORT MapFilter: public log4cxx::spi::Filter
 		virtual void setOption(const LogString& option,
 			const LogString& value);
 
-		inline void setKeyValue(const LogString& strKey, const LogString& strValue)
-		{
-			this->keyVals[strKey] = strValue;
-		}
-
-		inline const LogString& getValue(const LogString& strKey) const
-		{
-			static  const LogString                 empty;
-			const KeyVals::const_iterator   it(this->keyVals.find(strKey));
-
-			return (it != keyVals.end() ? it->second : empty);
-		}
-
-		inline void setAcceptOnMatch(bool acceptOnMatch1)
-		{
-			this->acceptOnMatch = acceptOnMatch1;
-		}
-
-		inline bool getAcceptOnMatch() const
-		{
-			return acceptOnMatch;
-		}
-
-		inline bool getMustMatchAll() const
-		{
-			return mustMatchAll;
-		}
-
-		inline void setMustMatchAll(bool mustMatchAll1)
-		{
-			this->mustMatchAll = mustMatchAll1;
-		}
+		void setKeyValue(const LogString& strKey, const LogString& strValue);
+
+		const LogString& getValue(const LogString& strKey) const;
+
+		void setAcceptOnMatch(bool acceptOnMatch1);
+
+		bool getAcceptOnMatch() const;
+
+		bool getMustMatchAll() const;
+
+		void setMustMatchAll(bool mustMatchAll1);
 
 		/**
 		Returns {@link log4cxx::spi::Filter#NEUTRAL NEUTRAL}
diff --git a/src/main/include/log4cxx/filter/stringmatchfilter.h b/src/main/include/log4cxx/filter/stringmatchfilter.h
index 8e57ce3..1091ea1 100644
--- a/src/main/include/log4cxx/filter/stringmatchfilter.h
+++ b/src/main/include/log4cxx/filter/stringmatchfilter.h
@@ -53,8 +53,7 @@ seeting up a <code>StringMatchFilter</code>.
 class LOG4CXX_EXPORT StringMatchFilter : public spi::Filter
 {
 	private:
-		bool acceptOnMatch;
-		LogString stringToMatch;
+		struct StringMatchFilterPrivate;
 
 	public:
 		typedef spi::Filter BASE_CLASS;
@@ -65,6 +64,7 @@ class LOG4CXX_EXPORT StringMatchFilter : public spi::Filter
 		END_LOG4CXX_CAST_MAP()
 
 		StringMatchFilter();
+		~StringMatchFilter();
 
 		/**
 		Set options
@@ -72,25 +72,13 @@ class LOG4CXX_EXPORT StringMatchFilter : public spi::Filter
 		virtual void setOption(const LogString& option,
 			const LogString& value);
 
-		inline void setStringToMatch(const LogString& stringToMatch1)
-		{
-			this->stringToMatch.assign(stringToMatch1);
-		}
-
-		inline const LogString& getStringToMatch() const
-		{
-			return stringToMatch;
-		}
-
-		inline void setAcceptOnMatch(bool acceptOnMatch1)
-		{
-			this->acceptOnMatch = acceptOnMatch1;
-		}
-
-		inline bool getAcceptOnMatch() const
-		{
-			return acceptOnMatch;
-		}
+		void setStringToMatch(const LogString& stringToMatch1);
+
+		const LogString& getStringToMatch() const;
+
+		void setAcceptOnMatch(bool acceptOnMatch1);
+
+		bool getAcceptOnMatch() const;
 
 		/**
 		Returns {@link log4cxx::spi::Filter#NEUTRAL NEUTRAL}
diff --git a/src/main/cpp/filter.cpp b/src/main/include/log4cxx/private/filter_priv.h
similarity index 69%
copy from src/main/cpp/filter.cpp
copy to src/main/include/log4cxx/private/filter_priv.h
index d838286..68d8dca 100644
--- a/src/main/cpp/filter.cpp
+++ b/src/main/include/log4cxx/private/filter_priv.h
@@ -14,33 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#ifndef LOG4CXX_FILTER_PRIVATE_H
+#define LOG4CXX_FILTER_PRIVATE_H
 
-#include <log4cxx/logstring.h>
 #include <log4cxx/spi/filter.h>
 
-using namespace log4cxx;
-using namespace log4cxx::spi;
-using namespace log4cxx::helpers;
-
-Filter::Filter() : next()
+namespace log4cxx
 {
-}
-
-FilterPtr Filter::getNext() const
+namespace spi
 {
-	return next;
-}
 
-void Filter::setNext(const FilterPtr& newNext)
-{
-	next = newNext;
-}
+struct Filter::FilterPrivate{
+    /**
+    Points to the next filter in the filter chain.
+    */
+    FilterPtr next;
+};
 
-void Filter::activateOptions(Pool&)
-{
 }
-
-void Filter::setOption(const LogString&, const LogString&)
-{
 }
 
+#endif
diff --git a/src/main/include/log4cxx/spi/filter.h b/src/main/include/log4cxx/spi/filter.h
index 1bdf876..1f07f36 100644
--- a/src/main/include/log4cxx/spi/filter.h
+++ b/src/main/include/log4cxx/spi/filter.h
@@ -68,12 +68,14 @@ xml::DOMConfigurator DOMConfigurator}.
 class LOG4CXX_EXPORT Filter : public virtual OptionHandler,
 	public virtual helpers::Object
 {
-		/**
-		Points to the next filter in the filter chain.
-		*/
-		FilterPtr next;
+protected:
+		struct FilterPrivate;
+		std::unique_ptr<FilterPrivate> m_priv;
+
 	public:
 		Filter();
+		Filter(std::unique_ptr<FilterPrivate> priv);
+		virtual ~Filter();
 
 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(Filter)
 		BEGIN_LOG4CXX_CAST_MAP()

[logging-log4cxx] 15/20: Actually return from function

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3e0331b60b202d205a4445229def337a659fc31c
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Fri Nov 5 18:52:04 2021 -0400

    Actually return from function
---
 src/test/cpp/net/telnetappendertestcase.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/test/cpp/net/telnetappendertestcase.cpp b/src/test/cpp/net/telnetappendertestcase.cpp
index 7ba022e..989b981 100644
--- a/src/test/cpp/net/telnetappendertestcase.cpp
+++ b/src/test/cpp/net/telnetappendertestcase.cpp
@@ -48,6 +48,7 @@ class TelnetAppenderTestCase : public AppenderSkeletonTestCase
 		static LayoutPtr createLayout(){
 			PatternLayoutPtr pl = std::make_shared<PatternLayout>();
 			pl->setConversionPattern( "%r [%t] %-5p - %m%n" );
+			return pl;
 		}
 
 	public: