You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2026/10/20 02:16:26 UTC

(logging-log4cxx) branch remove_redundant_methods created (now 8079256d)

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

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


      at 8079256d Remove unnecessary and unimplemented interface methods

This branch includes the following new commits:

     new 8079256d Remove unnecessary and unimplemented interface methods

The 1 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) 01/01: Remove unnecessary and unimplemented interface methods

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

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

commit 8079256ddf1331b8fcabc9212952aa3710306fc8
Author: Stephen Webb <sw...@gmail.com>
AuthorDate: Tue Oct 20 13:16:03 2026 +1100

    Remove unnecessary and unimplemented interface methods
---
 src/main/cpp/hierarchy.cpp                      |  12 +-
 src/main/cpp/logger.cpp                         | 323 +-----------
 src/main/cpp/logmanager.cpp                     |  30 --
 src/main/cpp/logstream.cpp                      |   7 -
 src/main/cpp/rootlogger.cpp                     |   2 +-
 src/main/include/log4cxx/hierarchy.h            | 134 ++---
 src/main/include/log4cxx/logger.h               | 644 ++----------------------
 src/main/include/log4cxx/logmanager.h           |  48 +-
 src/main/include/log4cxx/spi/loggerrepository.h | 107 ++--
 src/main/include/log4cxx/spi/rootlogger.h       |   2 +-
 10 files changed, 188 insertions(+), 1121 deletions(-)

diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index aa1165bc..519deecb 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -218,12 +218,6 @@ LevelPtr Hierarchy::getThreshold() const
 	return m_priv->threshold ? m_priv->threshold : Level::getAll();
 }
 
-LoggerPtr Hierarchy::getLogger(const LogString& name)
-{
-	static WideLife<spi::LoggerFactoryPtr> defaultFactory = std::make_shared<LoggerFactory>();
-	return getLogger(name, defaultFactory);
-}
-
 LoggerPtr Hierarchy::getLogger(const LogString& name,
 	const spi::LoggerFactoryPtr& factory)
 {
@@ -237,9 +231,11 @@ LoggerPtr Hierarchy::getLogger(const LogString& name,
 	{
 		result = it->second;
 	}
-	if (!result && factory)
+	if (!result)
 	{
-		LoggerPtr logger(factory->makeNewLoggerInstance(name));
+		LoggerPtr logger = factory
+			? factory->makeNewLoggerInstance(name)
+			: std::make_shared<Logger>(name);
 		logger->setHierarchy(this);
 		m_priv->loggers.insert(LoggerMap::value_type(name, logger));
 
diff --git a/src/main/cpp/logger.cpp b/src/main/cpp/logger.cpp
index 6f3f7b8d..ff757f28 100644
--- a/src/main/cpp/logger.cpp
+++ b/src/main/cpp/logger.cpp
@@ -348,11 +348,6 @@ void Logger::forcedLog(const LevelPtr& level, const std::string& message,
 	callAppenders(event);
 }
 
-void Logger::forcedLog(const LevelPtr& level1, const std::string& message) const
-{
-	forcedLog(level1, message, LocationInfo::getLocationUnavailable());
-}
-
 void Logger::addEventLS(const LevelPtr& level, LogString&& message, const LocationInfo& location) const
 {
 	if (!getHierarchy()) // Has removeHierarchy() been called?
@@ -392,7 +387,7 @@ AppenderPtr Logger::getAppender(const LogString& name1) const
 	return result;
 }
 
-const LevelPtr& Logger::getEffectiveLevel() const
+LevelPtr Logger::getEffectiveLevel() const
 {
 	for (const Logger* l = this; l != 0; l = l->m_priv->getParent().get())
 	{
@@ -465,7 +460,7 @@ LoggerPtr Logger::getParent() const
 	return m_priv->getParent();
 }
 
-const LevelPtr& Logger::getLevel() const
+const LevelPtr Logger::getLevel() const
 {
 	return m_priv->level;
 }
@@ -578,33 +573,6 @@ bool Logger::isFatalEnabled() const
 	return m_threshold <= Level::FATAL_INT;
 }
 
-/*void Logger::l7dlog(const LevelPtr& level, const String& key,
-                        const char* file, int line)
-{
-	auto rep = getHierarchy();
-
-        if (!rep || rep->isDisabled(level->level))
-        {
-                return;
-        }
-
-        if (level->isGreaterOrEqual(getEffectiveLevel()))
-        {
-                String msg = getResourceBundleString(key);
-
-                // if message corresponding to 'key' could not be found in the
-                // resource bundle, then default to 'key'.
-                if (msg.empty())
-                {
-                        msg = key;
-                }
-
-                forcedLog(FQCN, level, msg, file, line);
-        }
-}*/
-
-
-
 void Logger::l7dlog(const LevelPtr& level1, const LogString& key,
 	const LocationInfo& location, const std::vector<LogString>& params) const
 {
@@ -633,40 +601,6 @@ void Logger::l7dlog(const LevelPtr& level1, const LogString& key,
 	}
 }
 
-void Logger::l7dlog(const LevelPtr& level1, const std::string& key,
-	const LocationInfo& location) const
-{
-	LOG4CXX_DECODE_CHAR(lkey, key);
-
-	std::vector<LogString> values(0);
-	l7dlog(level1, lkey, location, values);
-}
-
-void Logger::l7dlog(const LevelPtr& level1, const std::string& key,
-	const LocationInfo& location, const std::string& val1) const
-{
-	LOG4CXX_DECODE_CHAR(lkey, key);
-	LOG4CXX_DECODE_CHAR(lval1, val1);
-
-	std::vector<LogString> values(1);
-	values[0] = lval1;
-	l7dlog(level1, lkey, location, values);
-}
-
-void Logger::l7dlog(const LevelPtr& level1, const std::string& key,
-	const LocationInfo& location,
-	const std::string& val1, const std::string& val2) const
-{
-	LOG4CXX_DECODE_CHAR(lkey, key);
-	LOG4CXX_DECODE_CHAR(lval1, val1);
-	LOG4CXX_DECODE_CHAR(lval2, val2);
-
-	std::vector<LogString> values(2);
-	values[0] = lval1;
-	values[1] = lval2;
-	l7dlog(level1, lkey, location, values);
-}
-
 void Logger::l7dlog(const LevelPtr& level1, const std::string& key,
 	const LocationInfo& location,
 	const std::string& val1, const std::string& val2, const std::string& val3) const
@@ -788,12 +722,6 @@ LoggerPtr Logger::getLogger(const std::string& name)
 	return LogManager::getLogger(name);
 }
 
-
-LoggerPtr Logger::getLogger(const char* const name)
-{
-	return LogManager::getLogger(name);
-}
-
 void Logger::setResourceBundle(const helpers::ResourceBundlePtr& bundle)
 {
 	m_priv->resourceBundle = bundle;
@@ -815,8 +743,7 @@ void Logger::getName(std::string& rv) const
 	Transcoder::encode(m_priv->name, rv);
 }
 
-
-void Logger::trace(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::trace(const std::string& msg, const spi::LocationInfo& location) const
 {
 	if (isTraceEnabled())
 	{
@@ -824,16 +751,7 @@ void Logger::trace(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-
-void Logger::trace(const std::string& msg) const
-{
-	if (isTraceEnabled())
-	{
-		forcedLog(m_priv->levelData->Trace, msg);
-	}
-}
-
-void Logger::debug(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::debug(const std::string& msg, const spi::LocationInfo& location) const
 {
 	if (isDebugEnabled())
 	{
@@ -841,16 +759,7 @@ void Logger::debug(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::debug(const std::string& msg) const
-{
-	if (isDebugEnabled())
-	{
-		forcedLog(m_priv->levelData->Debug, msg);
-	}
-}
-
-
-void Logger::error(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::error(const std::string& msg, const spi::LocationInfo& location) const
 {
 	if (isErrorEnabled())
 	{
@@ -858,16 +767,7 @@ void Logger::error(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-
-void Logger::error(const std::string& msg) const
-{
-	if (isErrorEnabled())
-	{
-		forcedLog(m_priv->levelData->Error, msg);
-	}
-}
-
-void Logger::fatal(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::fatal(const std::string& msg, const spi::LocationInfo& location) const
 {
 	if (isFatalEnabled())
 	{
@@ -875,15 +775,7 @@ void Logger::fatal(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::fatal(const std::string& msg) const
-{
-	if (isFatalEnabled())
-	{
-		forcedLog(m_priv->levelData->Fatal, msg);
-	}
-}
-
-void Logger::info(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::info(const std::string& msg, const spi::LocationInfo& location) const
 {
 	if (isInfoEnabled())
 	{
@@ -891,16 +783,8 @@ void Logger::info(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& l
 	}
 }
 
-void Logger::info(const std::string& msg) const
-{
-	if (isInfoEnabled())
-	{
-		forcedLog(m_priv->levelData->Info, msg);
-	}
-}
-
 void Logger::log(const LevelPtr& level1, const std::string& message,
-	const LOG4CXX_NS::spi::LocationInfo& location) const
+	const spi::LocationInfo& location) const
 {
 	if (isEnabledFor(level1))
 	{
@@ -908,16 +792,8 @@ void Logger::log(const LevelPtr& level1, const std::string& message,
 	}
 }
 
-void Logger::log(const LevelPtr& level1, const std::string& message) const
-{
-	if (isEnabledFor(level1))
-	{
-		forcedLog(level1, message);
-	}
-}
-
 void Logger::logLS(const LevelPtr& level1, const LogString& message,
-	const LOG4CXX_NS::spi::LocationInfo& location) const
+	const spi::LocationInfo& location) const
 {
 	if (isEnabledFor(level1))
 	{
@@ -925,7 +801,7 @@ void Logger::logLS(const LevelPtr& level1, const LogString& message,
 	}
 }
 
-void Logger::warn(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::warn(const std::string& msg, const spi::LocationInfo& location) const
 {
 	if (isWarnEnabled())
 	{
@@ -933,22 +809,6 @@ void Logger::warn(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& l
 	}
 }
 
-void Logger::warn(const std::string& msg) const
-{
-	if (isWarnEnabled())
-	{
-		forcedLog(m_priv->levelData->Warn, msg);
-	}
-}
-
-LoggerPtr Logger::getLoggerLS(const LogString& name)
-{
-	return LogManager::getLoggerLS(name);
-}
-
-
-
-
 #if LOG4CXX_WCHAR_T_API
 void Logger::addEvent(const LevelPtr& level, std::wstring&& message, const LocationInfo& location) const
 {
@@ -1007,11 +867,6 @@ void Logger::forcedLog(const LevelPtr& level, const std::wstring& message,
 	callAppenders(event);
 }
 
-void Logger::forcedLog(const LevelPtr& level1, const std::wstring& message) const
-{
-	forcedLog(level1, message, LocationInfo::getLocationUnavailable());
-}
-
 void Logger::getName(std::wstring& rv) const
 {
 	Transcoder::encode(m_priv->name, rv);
@@ -1022,12 +877,7 @@ LoggerPtr Logger::getLogger(const std::wstring& name)
 	return LogManager::getLogger(name);
 }
 
-LoggerPtr Logger::getLogger(const wchar_t* const name)
-{
-	return LogManager::getLogger(name);
-}
-
-void Logger::trace(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::trace(const std::wstring& msg, const spi::LocationInfo& location) const
 {
 	if (isTraceEnabled())
 	{
@@ -1035,16 +885,7 @@ void Logger::trace(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-
-void Logger::trace(const std::wstring& msg) const
-{
-	if (isTraceEnabled())
-	{
-		forcedLog(m_priv->levelData->Trace, msg);
-	}
-}
-
-void Logger::debug(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::debug(const std::wstring& msg, const spi::LocationInfo& location) const
 {
 	if (isDebugEnabled())
 	{
@@ -1052,15 +893,7 @@ void Logger::debug(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::debug(const std::wstring& msg) const
-{
-	if (isDebugEnabled())
-	{
-		forcedLog(m_priv->levelData->Debug, msg);
-	}
-}
-
-void Logger::error(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::error(const std::wstring& msg, const spi::LocationInfo& location) const
 {
 	if (isErrorEnabled())
 	{
@@ -1068,15 +901,7 @@ void Logger::error(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::error(const std::wstring& msg) const
-{
-	if (isErrorEnabled())
-	{
-		forcedLog(m_priv->levelData->Error, msg);
-	}
-}
-
-void Logger::fatal(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::fatal(const std::wstring& msg, const spi::LocationInfo& location) const
 {
 	if (isFatalEnabled())
 	{
@@ -1084,15 +909,7 @@ void Logger::fatal(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::fatal(const std::wstring& msg) const
-{
-	if (isFatalEnabled())
-	{
-		forcedLog(m_priv->levelData->Fatal, msg);
-	}
-}
-
-void Logger::info(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::info(const std::wstring& msg, const spi::LocationInfo& location) const
 {
 	if (isInfoEnabled())
 	{
@@ -1100,16 +917,8 @@ void Logger::info(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::info(const std::wstring& msg) const
-{
-	if (isInfoEnabled())
-	{
-		forcedLog(m_priv->levelData->Info, msg);
-	}
-}
-
 void Logger::log(const LevelPtr& level1, const std::wstring& message,
-	const LOG4CXX_NS::spi::LocationInfo& location) const
+	const spi::LocationInfo& location) const
 {
 	if (isEnabledFor(level1))
 	{
@@ -1117,15 +926,7 @@ void Logger::log(const LevelPtr& level1, const std::wstring& message,
 	}
 }
 
-void Logger::log(const LevelPtr& level1, const std::wstring& message) const
-{
-	if (isEnabledFor(level1))
-	{
-		forcedLog(level1, message);
-	}
-}
-
-void Logger::warn(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::warn(const std::wstring& msg, const spi::LocationInfo& location) const
 {
 	if (isWarnEnabled())
 	{
@@ -1133,14 +934,6 @@ void Logger::warn(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::warn(const std::wstring& msg) const
-{
-	if (isWarnEnabled())
-	{
-		forcedLog(m_priv->levelData->Warn, msg);
-	}
-}
-
 #endif
 
 
@@ -1157,16 +950,6 @@ void Logger::forcedLog(const LevelPtr& level, const CFStringRef& message,
 	callAppenders(event);
 }
 
-void Logger::forcedLog(const LevelPtr& level, const CFStringRef& message) const
-{
-	if (!getHierarchy()) // Has removeHierarchy() been called?
-		return;
-	LOG4CXX_DECODE_CFSTRING(msg, message);
-	auto event = std::make_shared<LoggingEvent>(m_priv->name, level, msg,
-			LocationInfo::getLocationUnavailable());
-	callAppenders(event);
-}
-
 void Logger::getName(CFStringRef& rv) const
 {
 	rv = Transcoder::encode(m_priv->name);
@@ -1177,7 +960,7 @@ LoggerPtr Logger::getLogger(const CFStringRef& name)
 	return LogManager::getLogger(name);
 }
 
-void Logger::trace(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::trace(const CFStringRef& msg, const spi::LocationInfo& location) const
 {
 	if (isTraceEnabled())
 	{
@@ -1185,16 +968,7 @@ void Logger::trace(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-
-void Logger::trace(const CFStringRef& msg) const
-{
-	if (isTraceEnabled())
-	{
-		forcedLog(m_priv->levelData->Trace, msg);
-	}
-}
-
-void Logger::debug(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::debug(const CFStringRef& msg, const spi::LocationInfo& location) const
 {
 	if (isDebugEnabled())
 	{
@@ -1202,15 +976,7 @@ void Logger::debug(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::debug(const CFStringRef& msg) const
-{
-	if (isDebugEnabled())
-	{
-		forcedLog(m_priv->levelData->Debug, msg);
-	}
-}
-
-void Logger::error(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::error(const CFStringRef& msg, const spi::LocationInfo& location) const
 {
 	if (isErrorEnabled())
 	{
@@ -1218,15 +984,7 @@ void Logger::error(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::error(const CFStringRef& msg) const
-{
-	if (isErrorEnabled())
-	{
-		forcedLog(m_priv->levelData->Error, msg);
-	}
-}
-
-void Logger::fatal(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::fatal(const CFStringRef& msg, const spi::LocationInfo& location) const
 {
 	if (isFatalEnabled())
 	{
@@ -1234,15 +992,7 @@ void Logger::fatal(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo&
 	}
 }
 
-void Logger::fatal(const CFStringRef& msg) const
-{
-	if (isFatalEnabled())
-	{
-		forcedLog(m_priv->levelData->Fatal, msg);
-	}
-}
-
-void Logger::info(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::info(const CFStringRef& msg, const spi::LocationInfo& location) const
 {
 	if (isInfoEnabled())
 	{
@@ -1250,16 +1000,8 @@ void Logger::info(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& l
 	}
 }
 
-void Logger::info(const CFStringRef& msg) const
-{
-	if (isInfoEnabled())
-	{
-		forcedLog(m_priv->levelData->Info, msg);
-	}
-}
-
 void Logger::log(const LevelPtr& level1, const CFStringRef& message,
-	const LOG4CXX_NS::spi::LocationInfo& location) const
+	const spi::LocationInfo& location) const
 {
 	if (isEnabledFor(level1))
 	{
@@ -1267,30 +1009,13 @@ void Logger::log(const LevelPtr& level1, const CFStringRef& message,
 	}
 }
 
-void Logger::log(const LevelPtr& level1, const CFStringRef& message) const
-{
-	if (isEnabledFor(level1))
-	{
-		forcedLog(level1, message);
-	}
-}
-
-void Logger::warn(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const
+void Logger::warn(const CFStringRef& msg, const spi::LocationInfo& location) const
 {
 	if (isWarnEnabled())
 	{
 		forcedLog(m_priv->levelData->Warn, msg, location);
 	}
 }
-
-void Logger::warn(const CFStringRef& msg) const
-{
-	if (isWarnEnabled())
-	{
-		forcedLog(m_priv->levelData->Warn, msg);
-	}
-}
-
 #endif
 
 
diff --git a/src/main/cpp/logmanager.cpp b/src/main/cpp/logmanager.cpp
index aaae54f0..421eaa36 100644
--- a/src/main/cpp/logmanager.cpp
+++ b/src/main/cpp/logmanager.cpp
@@ -72,8 +72,6 @@ void LogManager::setRepositorySelector(const spi::RepositorySelectorPtr& selecto
 	APRInitializer::setUnique<spi::RepositorySelector>(selector);
 }
 
-
-
 LoggerRepositoryPtr LogManager::getLoggerRepository()
 {
 	return getRepositorySelector()->getLoggerRepository();
@@ -87,16 +85,6 @@ LoggerPtr LogManager::getRootLogger()
 	return r->getRootLogger();
 }
 
-/**
-Retrieve the appropriate Logger instance.
-*/
-LoggerPtr LogManager::getLoggerLS(const LogString& name)
-{
-	auto r = getLoggerRepository();
-	r->ensureIsConfigured(std::bind(DefaultConfigurator::configure, r));
-	return r->getLogger(name);
-}
-
 /**
 Retrieve the appropriate Logger instance.
 */
@@ -109,12 +97,6 @@ LoggerPtr LogManager::getLoggerLS(const LogString& name,
 	return r->getLogger(name, factory);
 }
 
-LoggerPtr LogManager::getLogger(const std::string& name)
-{
-	LOG4CXX_DECODE_CHAR(n, name);
-	return getLoggerLS(n);
-}
-
 LoggerPtr LogManager::getLogger(const std::string& name,
 	const spi::LoggerFactoryPtr& factory)
 {
@@ -129,12 +111,6 @@ LoggerPtr LogManager::exists(const std::string& name)
 }
 
 #if LOG4CXX_WCHAR_T_API
-LoggerPtr LogManager::getLogger(const std::wstring& name)
-{
-	LOG4CXX_DECODE_WCHAR(n, name);
-	return getLoggerLS(n);
-}
-
 LoggerPtr LogManager::getLogger(const std::wstring& name,
 	const spi::LoggerFactoryPtr& factory)
 {
@@ -151,12 +127,6 @@ LoggerPtr LogManager::exists(const std::wstring& name)
 
 
 #if LOG4CXX_CFSTRING_API
-LoggerPtr LogManager::getLogger(const CFStringRef& name)
-{
-	LOG4CXX_DECODE_CFSTRING(n, name);
-	return getLoggerLS(n);
-}
-
 LoggerPtr LogManager::getLogger(const CFStringRef& name,
 	const spi::LoggerFactoryPtr& factory)
 {
diff --git a/src/main/cpp/logstream.cpp b/src/main/cpp/logstream.cpp
index 1556ee7b..8cbdee62 100644
--- a/src/main/cpp/logstream.cpp
+++ b/src/main/cpp/logstream.cpp
@@ -216,13 +216,6 @@ logstream::logstream(const LOG4CXX_NS::LoggerPtr& logger,
 {
 }
 
-logstream::logstream(const Ch* loggerName,
-	const LOG4CXX_NS::LevelPtr& level)
-	: logstream_base(LOG4CXX_NS::Logger::getLogger(loggerName), level), stream(0)
-{
-}
-
-
 logstream::logstream(const std::basic_string<Ch>& loggerName,
 	const LOG4CXX_NS::LevelPtr& level) : logstream_base(LOG4CXX_NS::Logger::getLogger(loggerName), level), stream(0)
 {
diff --git a/src/main/cpp/rootlogger.cpp b/src/main/cpp/rootlogger.cpp
index 2479eb9f..1a605db8 100644
--- a/src/main/cpp/rootlogger.cpp
+++ b/src/main/cpp/rootlogger.cpp
@@ -31,7 +31,7 @@ RootLogger::RootLogger(const LevelPtr& level1)
 }
 
 
-const LevelPtr& RootLogger::getEffectiveLevel() const
+LevelPtr RootLogger::getEffectiveLevel() const
 {
 	return getLevel();
 }
diff --git a/src/main/include/log4cxx/hierarchy.h b/src/main/include/log4cxx/hierarchy.h
index fc70db36..7749f867 100644
--- a/src/main/include/log4cxx/hierarchy.h
+++ b/src/main/include/log4cxx/hierarchy.h
@@ -62,29 +62,28 @@ class LOG4CXX_EXPORT Hierarchy : public spi::LoggerRepository
 
 	private:
 		/**
-		Create a new logger hierarchy.
+		An empty logger hierarchy.
 		*/
 		Hierarchy();
 
 	public:
+		/**
+		Create a new logger hierarchy.
+		*/
 		static HierarchyPtr create();
 
 		~Hierarchy();
 
+		/** {@inheritDoc}
+		*/
 		void addHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener) override;
 
-		/**
-		 * Remove a previously added HierarchyEventListener.
-		 *
-		 */
+		/** {@inheritDoc}
+		*/
 		void removeHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener) override;
 
-		/**
-		 * Call \c configurator if not yet configured and \c configurator has not already been tried.
-		 * If \c configurator succeeds, it must call LoggerRepository::setConfigured
-		 * to ensure subsequent calls to LoggerRepository::ensureIsConfigured
-		 * from overwriting the configuration.
-		 */
+		/** {@inheritDoc}
+		*/
 		void ensureIsConfigured(std::function<void()> configurator) override;
 
 		/**
@@ -99,114 +98,55 @@ class LOG4CXX_EXPORT Hierarchy : public spi::LoggerRepository
 
 		void emitNoAppenderWarning(const Logger* logger) override;
 
-		/**
-		Check if the named logger exists in the hierarchy. If so return
-		its reference, otherwise returns <code>null</code>.
-
-		  @param name The name of the logger to search for.
-
+		/** {@inheritDoc}
 		*/
 		LoggerPtr exists(const LogString& name) override;
 
-		/**
-		The string form of {@link #setThreshold(const LevelPtr&) setThreshold}.
+		/** {@inheritDoc}
 		*/
 		void setThreshold(const LogString& levelStr) override;
 
-		/**
-		Enable logging for logging requests with level <code>newLevel</code> or
-		higher. By default all levels are enabled.
-
-		@param newLevel The minimum level of logging requests that are sent to appenders.
+		/** {@inheritDoc}
 		*/
 		void setThreshold(const LevelPtr& newLevel) override;
 
+		/** {@inheritDoc}
+		*/
 		void fireAddAppenderEvent(const Logger* logger, const Appender* appender) override;
 
+		/** {@inheritDoc}
+		*/
 		void fireRemoveAppenderEvent(const Logger* logger, const Appender* appender) override;
 
-		/**
-		Returns a Level representation of the <code>enable</code>
-		state.
+		/** {@inheritDoc}
 		*/
 		LevelPtr getThreshold() const override;
 
-		/**
-		Retrieve the \c name Logger instance using
-		the default factory to create it if required.
-
-		If a logger of that name already exists, then it will be
-		returned.  Otherwise, a new logger will be instantiated and
-		then linked with its existing ancestors as well as children.
-
-		@param name The name of the logger to retrieve.
-
-		*/
-		LoggerPtr getLogger(const LogString& name) override;
-
-		/**
-		Retrieve the \c name Logger instance using
-		<code>factory</code> to create it if required.
-
-		If a logger of that name already exists, then it will be
-		returned.  Otherwise, a new logger will be instantiated by the
-		<code>factory</code> parameter and linked with its existing
-		ancestors as well as children.
-
-		@param name The name of the logger to retrieve.
-		@param factory The factory that will make the new logger instance.
-
+		/** {@inheritDoc}
 		*/
 		LoggerPtr getLogger(const LogString& name,
-			const spi::LoggerFactoryPtr& factory) override;
-
-		/**
-		Returns all the currently defined loggers in this hierarchy as
-		a LoggerList.
+			const spi::LoggerFactoryPtr& factory = {}) override;
 
-		<p>The root logger is <em>not</em> included in the returned
-		LoggerList.  */
+		/** {@inheritDoc}
+		*/
 		LoggerList getCurrentLoggers() const override;
 
-		/**
-		Get the root of this hierarchy.
+		/** {@inheritDoc}
 		*/
 		LoggerPtr getRootLogger() const override;
 
-		/**
-		This method will return <code>true</code> if this repository is
-		disabled for <code>level</code> object passed as parameter and
-		<code>false</code> otherwise. See also the
-		{@link #setThreshold(const LevelPtr&) setThreshold} method.  */
+		/** {@inheritDoc}
+		*/
 		bool isDisabled(int level) const override;
 
-		/**
-		Reset all values contained in this hierarchy instance to their
-		default.  This removes all appenders from all categories, sets
-		the level of all non-root categories to <code>null</code>,
-		sets their additivity flag to <code>true</code> and sets the level
-		of the root logger to DEBUG.  Moreover,
-		message disabling is set its default "off" value.
-
-		<p>Existing categories are not removed. They are just reset.
-
-		<p>This method should be used sparingly and with care as it will
-		block all logging until it is completed.</p>
+		/** {@inheritDoc}
 		*/
 		void resetConfiguration() override;
 
-		/**
-		Used by subclasses to add a renderer to the hierarchy passed as parameter.
-		*/
 		/**
 		Shutting down a hierarchy will <em>safely</em> close and remove
 		all appenders in all categories including the root logger.
 
-		<p>Some appenders such as {@link net::XMLSocketAppender XMLSocketAppender}
-		and AsyncAppender need to be closed before the
-		application exists. Otherwise, pending logging events might be
-		lost.
-
 		<p>The <code>shutdown</code> method is careful to close nested
 		appenders before closing regular appenders. This is allows
 		configurations where a regular appender is attached to a logger
@@ -214,27 +154,19 @@ class LOG4CXX_EXPORT Hierarchy : public spi::LoggerRepository
 		*/
 		void shutdown() override;
 
-
+		/** {@inheritDoc}
+		*/
 		virtual bool isConfigured() override;
+
+		/** {@inheritDoc}
+		*/
 		virtual void setConfigured(bool configured) override;
 
-		/**
-		Refresh the configuration of all loggers where \c parent
-		is somewhere in their ancestor chain.
-		The ancestor chain ends at the root logger.
+		/** {@inheritDoc}
 		*/
 		void updateChildren(const Logger* parent) override;
 
-		/**
-		Remove the \c name Logger from the hierarchy.
-
-		Note: The \c name Logger must be retrieved from the hierarchy
-		\b after any subsequent configuration file change
-		for the newly loaded settings to be used.
-
-		@param name The logger to remove.
-		@param ifNotUsed If true and use_count() indicates there are other references, do not remove the Logger and return false.
-		@returns true if \c name Logger was removed from the hierarchy.
+		/** {@inheritDoc}
 		*/
 		bool removeLogger(const LogString& name, bool ifNotUsed = true) override;
 
diff --git a/src/main/include/log4cxx/logger.h b/src/main/include/log4cxx/logger.h
index 5b29fb50..399551ac 100644
--- a/src/main/include/log4cxx/logger.h
+++ b/src/main/include/log4cxx/logger.h
@@ -107,22 +107,7 @@ class LOG4CXX_EXPORT Logger
 		@param msg the message string to log.
 		@param location The source code location of the logging request.
 		*/
-		void debug(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>DEBUG</code> events.
-
-		<p>This method first checks if this logger is <code>DEBUG</code>
-		enabled by comparing the level of this logger with the
-		DEBUG level. If this logger is
-		<code>DEBUG</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_DEBUG.
-		*/
-		void debug(const std::string& msg) const;
+		void debug(const std::string& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #if LOG4CXX_WCHAR_T_API
 		/**
 		Add a new logging event containing \c msg and \c location to attached appender(s) if this logger is enabled for <code>DEBUG</code> events.
@@ -139,22 +124,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_DEBUG.
 		*/
-		void debug(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>DEBUG</code> events.
-
-		<p>This method first checks if this logger is <code>DEBUG</code>
-		enabled by comparing the level of this logger with the
-		DEBUG level. If this logger is
-		<code>DEBUG</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_DEBUG.
-		*/
-		void debug(const std::wstring& msg) const;
+		void debug(const std::wstring& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -172,22 +142,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_DEBUG.
 		*/
-		void debug(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>DEBUG</code> events.
-
-		<p>This method first checks if this logger is <code>DEBUG</code>
-		enabled by comparing the level of this logger with the
-		DEBUG level. If this logger is
-		<code>DEBUG</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_DEBUG.
-		*/
-		void debug(const CFStringRef& msg) const;
+		void debug(const CFStringRef& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 
 		/**
@@ -205,38 +160,8 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_ERROR.
 		*/
-		void error(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>ERROR</code> events.
-
-		<p>This method first checks if this logger is <code>ERROR</code>
-		enabled by comparing the level of this logger with the
-		ERROR level. If this logger is
-		<code>ERROR</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_ERROR.
-		*/
-		void error(const std::string& msg) const;
+		void error(const std::string& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #if LOG4CXX_WCHAR_T_API
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>ERROR</code> events.
-
-		<p>This method first checks if this logger is <code>ERROR</code>
-		enabled by comparing the level of this logger with the
-		ERROR level. If this logger is
-		<code>ERROR</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_ERROR.
-		*/
-		void error(const std::wstring& msg) const;
 		/**
 		Add a new logging event containing \c msg and \c location to attached appender(s) if this logger is enabled for <code>ERROR</code> events.
 
@@ -252,7 +177,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_ERROR.
 		*/
-		void error(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
+		void error(const std::wstring& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -270,22 +195,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_ERROR.
 		*/
-		void error(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>ERROR</code> events.
-
-		<p>This method first checks if this logger is <code>ERROR</code>
-		enabled by comparing the level of this logger with the
-		ERROR level. If this logger is
-		<code>ERROR</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_ERROR.
-		*/
-		void error(const CFStringRef& msg) const;
+		void error(const CFStringRef& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 
 		/**
@@ -303,22 +213,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_FATAL.
 		*/
-		void fatal(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>FATAL</code> events.
-
-		<p>This method first checks if this logger is <code>ERROR</code>
-		enabled by comparing the level of this logger with the
-		ERROR level. If this logger is
-		<code>ERROR</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_FATAL.
-		*/
-		void fatal(const std::string& msg) const;
+		void fatal(const std::string& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #if LOG4CXX_WCHAR_T_API
 		/**
 		Add a new logging event containing \c msg and \c location to attached appender(s) if this logger is enabled for <code>FATAL</code> events.
@@ -335,22 +230,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_FATAL.
 		*/
-		void fatal(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>FATAL</code> events.
-
-		<p>This method first checks if this logger is <code>ERROR</code>
-		enabled by comparing the level of this logger with the
-		ERROR level. If this logger is
-		<code>ERROR</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_FATAL.
-		*/
-		void fatal(const std::wstring& msg) const;
+		void fatal(const std::wstring& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -368,22 +248,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_FATAL.
 		*/
-		void fatal(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>FATAL</code> events.
-
-		<p>This method first checks if this logger is <code>ERROR</code>
-		enabled by comparing the level of this logger with the
-		ERROR level. If this logger is
-		<code>ERROR</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_FATAL.
-		*/
-		void fatal(const CFStringRef& msg) const;
+		void fatal(const CFStringRef& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 
 		/**
@@ -510,14 +375,7 @@ class LOG4CXX_EXPORT Logger
 		@param location The source code location of the logging request.
 		*/
 		void forcedLog(const LevelPtr& level, const std::string& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c message to attached appender(s)
-		without further checks.
-		@param level The logging event level.
-		@param message The text to add to the logging event.
-		*/
-		void forcedLog(const LevelPtr& level, const std::string& message) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 
 #if LOG4CXX_WCHAR_T_API
 		/**
@@ -586,14 +444,7 @@ class LOG4CXX_EXPORT Logger
 		@param location The source code location of the logging request.
 		*/
 		void forcedLog(const LevelPtr& level, const std::wstring& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c message to attached appender(s)
-		without further checks.
-		@param level The logging event level.
-		@param message The text to add to the logging event.
-		*/
-		void forcedLog(const LevelPtr& level, const std::wstring& message) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -604,14 +455,7 @@ class LOG4CXX_EXPORT Logger
 		@param location The source code location of the logging request.
 		*/
 		void forcedLog(const LevelPtr& level, const CFStringRef& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c message to attached appender(s)
-		without further checks.
-		@param level The logging event level.
-		@param message The text to add to the logging event.
-		*/
-		void forcedLog(const LevelPtr& level, const CFStringRef& message) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 		/**
 		Add a new logging event containing \c message and \c location to attached appender(s)
@@ -631,7 +475,7 @@ class LOG4CXX_EXPORT Logger
 		@param location location of the logging statement.
 		*/
 		void forcedLogLS(const LevelPtr& level, const LogString& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 
 		/**
 		Get the additivity flag for this logger.
@@ -660,7 +504,7 @@ class LOG4CXX_EXPORT Logger
 
 		@throws RuntimeException if all levels are null in the hierarchy
 		*/
-		virtual const LevelPtr& getEffectiveLevel() const;
+		virtual LevelPtr getEffectiveLevel() const;
 
 
 		/**
@@ -703,7 +547,7 @@ class LOG4CXX_EXPORT Logger
 
 		@return Level - the assigned Level, can be null.
 		*/
-		const LevelPtr& getLevel() const;
+		const LevelPtr getLevel() const;
 
 		/**
 		The object that holds all Logger instances.
@@ -715,22 +559,12 @@ class LOG4CXX_EXPORT Logger
 		* @param name logger name.
 		*/
 		static LoggerPtr getLogger(const std::string& name);
-		/**
-		* Retrieve a logger by name in current encoding.
-		* @param name logger name.
-		*/
-		static LoggerPtr getLogger(const char* const name);
 #if LOG4CXX_WCHAR_T_API
 		/**
 		* Retrieve a logger by name.
 		* @param name logger name.
 		*/
 		static LoggerPtr getLogger(const std::wstring& name);
-		/**
-		* Retrieve a logger by name.
-		* @param name logger name.
-		*/
-		static LoggerPtr getLogger(const wchar_t* const name);
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -739,12 +573,6 @@ class LOG4CXX_EXPORT Logger
 		*/
 		static LoggerPtr getLogger(const CFStringRef& name);
 #endif
-		/**
-		* Retrieve a logger by name in Unicode.
-		* @param name logger name.
-		*/
-		static LoggerPtr getLoggerLS(const LogString& name);
-
 		/**
 		Retrieve the root logger.
 		*/
@@ -764,56 +592,7 @@ class LOG4CXX_EXPORT Logger
 		actually create a new Instance.
 		*/
 		static LoggerPtr getLoggerLS(const LogString& name,
-			const LOG4CXX_NS::spi::LoggerFactoryPtr& factory);
-		/**
-		Like #getLogger except that the type of logger
-		instantiated depends on the type returned by the
-		LoggerFactory#makeNewLoggerInstance method of the
-		<code>factory</code> parameter.
-
-		<p>This method is intended to be used by sub-classes.
-
-		@param name The name of the logger to retrieve.
-
-		@param factory A LoggerFactory implementation that will
-		actually create a new Instance.
-		*/
-		static LoggerPtr getLogger(const std::string& name,
-			const LOG4CXX_NS::spi::LoggerFactoryPtr& factory);
-#if LOG4CXX_WCHAR_T_API
-		/**
-		Like #getLogger except that the type of logger
-		instantiated depends on the type returned by the
-		LoggerFactory#makeNewLoggerInstance method of the
-		<code>factory</code> parameter.
-
-		<p>This method is intended to be used by sub-classes.
-
-		@param name The name of the logger to retrieve.
-
-		@param factory A LoggerFactory implementation that will
-		actually create a new Instance.
-		*/
-		static LoggerPtr getLogger(const std::wstring& name,
-			const LOG4CXX_NS::spi::LoggerFactoryPtr& factory);
-#endif
-#if LOG4CXX_CFSTRING_API
-		/**
-		Like #getLogger except that the type of logger
-		instantiated depends on the type returned by the
-		LoggerFactory#makeNewLoggerInstance method of the
-		<code>factory</code> parameter.
-
-		<p>This method is intended to be used by sub-classes.
-
-		@param name The name of the logger to retrieve.
-
-		@param factory A LoggerFactory implementation that will
-		actually create a new Instance.
-		*/
-		static LoggerPtr getLogger(const CFStringRef& name,
-			const LOG4CXX_NS::spi::LoggerFactoryPtr& factory);
-#endif
+			const spi::LoggerFactoryPtr& factory = {});
 
 		/**
 		Return the <em>inherited</em> ResourceBundle for this logger.
@@ -854,22 +633,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_INFO.
 		*/
-		void info(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>INFO</code> events.
-
-		<p>This method first checks if this logger is <code>INFO</code>
-		enabled by comparing the level of this logger with the
-		INFO level. If this logger is
-		<code>INFO</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_INFO.
-		*/
-		void info(const std::string& msg) const;
+		void info(const std::string& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #if LOG4CXX_WCHAR_T_API
 		/**
 		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>INFO</code> events.
@@ -886,22 +650,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_INFO.
 		*/
-		void info(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>INFO</code> events.
-
-		<p>This method first checks if this logger is <code>INFO</code>
-		enabled by comparing the level of this logger with the
-		INFO level. If this logger is
-		<code>INFO</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_INFO.
-		*/
-		void info(const std::wstring& msg) const;
+		void info(const std::wstring& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -919,22 +668,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_INFO.
 		*/
-		void info(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>INFO</code> events.
-
-		<p>This method first checks if this logger is <code>INFO</code>
-		enabled by comparing the level of this logger with the
-		INFO level. If this logger is
-		<code>INFO</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_INFO.
-		*/
-		void info(const CFStringRef& msg) const;
+		void info(const CFStringRef& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 
 		/**
@@ -1143,86 +877,32 @@ class LOG4CXX_EXPORT Logger
 		}
 
 		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using \c values for parameter substitution
+		Add a new logging event containing \c locationInfo and the localized message \c key
+		using \c values for parameter substitution
 		to attached appender(s) if this logger is enabled for \c level events.
-
+-
 		First, the user supplied
 		<code>key</code> is searched in the resource bundle. Next, the resulting
 		pattern is formatted using helpers::StringHelper::format method.
-
+-
 		@param level The level of the logging request.
 		@param key The key to be searched in the ResourceBundle.
 		@param locationInfo The location info of the logging request.
 		@param values The values for the placeholders <code>{0}</code>,
 		              <code>{1}</code> etc. within the pattern.
-
+-
 		@see #setResourceBundle
-
+-
 		See also #LOG4CXX_L7DLOG1.
 		*/
 		void l7dlog(const LevelPtr& level, const LogString& key,
 			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
 			const std::vector<LogString>& values) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-
-		@see #setResourceBundle
 
-		See also #LOG4CXX_L7DLOG.
-		*/
-		void l7dlog(const LevelPtr& level, const std::string& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo) const;
 		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameter \c val to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method with the
-		supplied parameters in a string array.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-		@param val The first value for the placeholders within the pattern.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG1.
-		*/
-		void l7dlog(const LevelPtr& level, const std::string& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const std::string& val) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameters \c val1 and \c val2 to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method with the
-		supplied parameters in a string array.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-		@param val1 The first value for the placeholders within the pattern.
-		@param val2 The second value for the placeholders within the pattern.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG2.
-		*/
-		void l7dlog(const LevelPtr& level, const std::string& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const std::string& val1, const std::string& val2) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameters \c val1, \c val2 and \c val3 to attached appender(s) if this logger is enabled for \c level events.
+		Add a new logging event containing \c locationInfo and the localized message \c key
+		using parameters \c val1, \c val2 and \c val3 to attached appender(s)
+		if this logger is enabled for \c level events.
 
 		First, the user supplied
 		<code>key</code> is searched in the resource bundle. Next, the resulting
@@ -1241,69 +921,11 @@ class LOG4CXX_EXPORT Logger
 		See also #LOG4CXX_L7DLOG3.
 		*/
 		void l7dlog(const LevelPtr& level, const std::string& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const std::string& val1, const std::string& val2, const std::string& val3) const;
+			const spi::LocationInfo& locationInfo = spi::LocationInfo::getLocationUnavailable(),
+			const std::string& val1 = {}, const std::string& val2 = {}, const std::string& val3 = {}) const;
 
 #if LOG4CXX_WCHAR_T_API
 		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method .
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG.
-		*/
-		void l7dlog(const LevelPtr& level, const std::wstring& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameter \c val to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method with the
-		supplied parameter in a string array.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-		@param val The value for the first placeholder within the pattern.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG1.
-		*/
-		void l7dlog(const LevelPtr& level, const std::wstring& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const std::wstring& val) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameters \c val1 and \c val2 to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method with the
-		supplied parameters in a string array.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-		@param val1 The value for the first placeholder within the pattern.
-		@param val2 The value for the second placeholder within the pattern.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG2.
-		*/
-		void l7dlog(const LevelPtr& level, const std::wstring& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const std::wstring& val1, const std::wstring& val2) const;
-		/**
 		Add a new logging event containing \c locationInfo and the localized message \c key using parameters \c val1, \c val2 and \c val3 to attached appender(s) if this logger is enabled for \c level events.
 
 		First, the user supplied
@@ -1323,69 +945,11 @@ class LOG4CXX_EXPORT Logger
 		See also #LOG4CXX_L7DLOG3.
 		*/
 		void l7dlog(const LevelPtr& level, const std::wstring& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const std::wstring& val1, const std::wstring& val2, const std::wstring& val3) const;
+			const spi::LocationInfo& locationInfo = spi::LocationInfo::getLocationUnavailable(),
+			const std::wstring& val1 = {}, const std::wstring& val2 = {}, const std::wstring& val3 = {}) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG.
-		*/
-		void l7dlog(const LevelPtr& level, const CFStringRef& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameter \c val to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method with the
-		supplied parameter in a string array.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-		@param val1 The value for the first placeholder within the pattern.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG1.
-		*/
-		void l7dlog(const LevelPtr& level, const CFStringRef& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const CFStringRef& val1) const;
-		/**
-		Add a new logging event containing \c locationInfo and the localized message \c key using parameters \c val1 and \c val2 to attached appender(s) if this logger is enabled for \c level events.
-
-		First, the user supplied
-		<code>key</code> is searched in the resource bundle. Next, the resulting
-		pattern is formatted using helpers::StringHelper::format method with the
-		supplied parameters in a string array.
-
-		@param level The level of the logging request.
-		@param key The key to be searched in the ResourceBundle.
-		@param locationInfo The location info of the logging request.
-		@param val1 The value for the first placeholder within the pattern.
-		@param val2 The value for the second placeholder within the pattern.
-
-		@see #setResourceBundle
-
-		See also #LOG4CXX_L7DLOG2.
-		*/
-		void l7dlog(const LevelPtr& level, const CFStringRef& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const CFStringRef& val1, const CFStringRef& val2) const;
-		/**
 		Add a new logging event containing \c locationInfo and the localized message \c key using parameters \c val1, \c val2 and \c val3 to attached appender(s) if this logger is enabled for \c level events.
 
 		First, the user supplied
@@ -1405,9 +969,8 @@ class LOG4CXX_EXPORT Logger
 		See also #LOG4CXX_L7DLOG3.
 		*/
 		void l7dlog(const LevelPtr& level, const CFStringRef& key,
-			const LOG4CXX_NS::spi::LocationInfo& locationInfo,
-			const CFStringRef& val1, const CFStringRef& val2,
-			const CFStringRef& val3) const;
+			const spi::LocationInfo& locationInfo = spi::LocationInfo::getLocationUnavailable()
+			const CFStringRef& val1  = {}, const CFStringRef& val2  = {}, const CFStringRef& val3  = {}) const;
 #endif
 
 		/**
@@ -1419,16 +982,7 @@ class LOG4CXX_EXPORT Logger
 		@param message The message of the logging request.
 		@param location The source file of the logging request, may be null. */
 		void log(const LevelPtr& level, const std::string& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c message to the appenders attached to this logger if this logger is enabled for \c level events.
-		This is the most generic printing method. It is intended to be
-		invoked by <b>wrapper</b> classes.
-
-		@param level The level of the logging request.
-		@param message The message of the logging request.
-		*/
-		void log(const LevelPtr& level, const std::string& message) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #if LOG4CXX_WCHAR_T_API
 		/**
 		Add a new logging event containing \c message and \c location to the appenders attached to this logger if this logger is enabled for \c level events.
@@ -1439,16 +993,7 @@ class LOG4CXX_EXPORT Logger
 		@param message The message of the logging request.
 		@param location The source file of the logging request, may be null. */
 		void log(const LevelPtr& level, const std::wstring& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c message to the appenders attached to this logger if this logger is enabled for \c level events.
-		This is the most generic printing method. It is intended to be
-		invoked by <b>wrapper</b> classes.
-
-		@param level The level of the logging request.
-		@param message The message of the logging request.
-		*/
-		void log(const LevelPtr& level, const std::wstring& message) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -1460,16 +1005,7 @@ class LOG4CXX_EXPORT Logger
 		@param message The message of the logging request.
 		@param location The source file of the logging request, may be null. */
 		void log(const LevelPtr& level, const CFStringRef& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c message to the appenders attached to this logger if this logger is enabled for \c level events.
-		This is the most generic printing method. It is intended to be
-		invoked by <b>wrapper</b> classes.
-
-		@param level The level of the logging request.
-		@param message The message of the logging request.
-		*/
-		void log(const LevelPtr& level, const CFStringRef& message) const;
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 		/**
 		Add a new logging event containing \c message and \c location to the appenders attached to this logger if this logger is enabled for \c level events.
@@ -1480,9 +1016,7 @@ class LOG4CXX_EXPORT Logger
 		@param message The message of the logging request.
 		@param location The source file of the logging request, may be null. */
 		void logLS(const LevelPtr& level, const LogString& message,
-			const LOG4CXX_NS::spi::LocationInfo& location) const;
-
-
+			const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 
 		/**
 		Remove all previously added appenders from this logger
@@ -1587,22 +1121,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_WARN.
 		*/
-		void warn(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>WARN</code> events.
-
-		<p>This method first checks if this logger is <code>WARN</code>
-		enabled by comparing the level of this logger with the
-		WARN level. If this logger is
-		<code>WARN</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_WARN.
-		*/
-		void warn(const std::wstring& msg) const;
+		void warn(const std::wstring& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -1620,22 +1139,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_WARN.
 		*/
-		void warn(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>WARN</code> events.
-
-		<p>This method first checks if this logger is <code>WARN</code>
-		enabled by comparing the level of this logger with the
-		WARN level. If this logger is
-		<code>WARN</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_WARN.
-		*/
-		void warn(const CFStringRef& msg) const;
+		void warn(const CFStringRef& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 		/**
 		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>WARN</code> events.
@@ -1652,22 +1156,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_WARN.
 		*/
-		void warn(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>WARN</code> events.
-
-		<p>This method first checks if this logger is <code>WARN</code>
-		enabled by comparing the level of this logger with the
-		WARN level. If this logger is
-		<code>WARN</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_WARN.
-		*/
-		void warn(const std::string& msg) const;
+		void warn(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 
 #if LOG4CXX_WCHAR_T_API
 		/**
@@ -1685,22 +1174,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_TRACE.
 		*/
-		void trace(const std::wstring& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>TRACE</code> events.
-
-		<p>This method first checks if this logger is <code>TRACE</code>
-		enabled by comparing the level of this logger with the
-		TRACE level. If this logger is
-		<code>TRACE</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_TRACE.
-		*/
-		void trace(const std::wstring& msg) const;
+		void trace(const std::wstring& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 #if LOG4CXX_CFSTRING_API
 		/**
@@ -1718,22 +1192,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_TRACE.
 		*/
-		void trace(const CFStringRef& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>TRACE</code> events.
-
-		<p>This method first checks if this logger is <code>TRACE</code>
-		enabled by comparing the level of this logger with the
-		TRACE level. If this logger is
-		<code>TRACE</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_TRACE.
-		*/
-		void trace(const CFStringRef& msg) const;
+		void trace(const CFStringRef& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 #endif
 		/**
 		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>TRACE</code> events.
@@ -1750,22 +1209,7 @@ class LOG4CXX_EXPORT Logger
 
 		See also #LOG4CXX_TRACE.
 		*/
-		void trace(const std::string& msg, const LOG4CXX_NS::spi::LocationInfo& location) const;
-		/**
-		Add a new logging event containing \c msg to attached appender(s) if this logger is enabled for <code>TRACE</code> events.
-
-		<p>This method first checks if this logger is <code>TRACE</code>
-		enabled by comparing the level of this logger with the
-		TRACE level. If this logger is
-		<code>TRACE</code> enabled, it proceeds to call all the
-		registered appenders in this logger and also higher in the
-		hierarchy depending on the value of the additivity flag.
-
-		@param msg the message string to log.
-
-		See also #LOG4CXX_TRACE.
-		*/
-		void trace(const std::string& msg) const;
+		void trace(const std::string& msg, const spi::LocationInfo& location = spi::LocationInfo::getLocationUnavailable()) const;
 
 		/**
 		 * Replace all current appenders with \c newList and
diff --git a/src/main/include/log4cxx/logmanager.h b/src/main/include/log4cxx/logmanager.h
index c487c239..8c2ed231 100644
--- a/src/main/include/log4cxx/logmanager.h
+++ b/src/main/include/log4cxx/logmanager.h
@@ -75,16 +75,6 @@ class LOG4CXX_EXPORT LogManager
 		*/
 		static LoggerPtr getRootLogger();
 
-		/**
-		Retrieve the \c name Logger instance from the
-		{@link spi::LoggerRepository LoggerRepository}
-		using the default factory to create it if required.
-
-		Calls {@link spi::LoggerRepository::ensureIsConfigured ensureIsConfigured} passing {@link DefaultConfigurator::configure} to ensure
-		the repository is configured.
-		*/
-		static LoggerPtr getLogger(const std::string& name);
-
 		/**
 		Retrieve the \c name Logger instance from the
 		{@link spi::LoggerRepository LoggerRepository}
@@ -94,7 +84,7 @@ class LOG4CXX_EXPORT LogManager
 		the repository is configured.
 		*/
 		static LoggerPtr getLogger(const std::string& name,
-			const spi::LoggerFactoryPtr& factory);
+			const spi::LoggerFactoryPtr& factory = {});
 		/**
 		 A pointer to the Logger \c name instance if it exists in the {@link spi::LoggerRepository LoggerRepository}.
 
@@ -102,15 +92,6 @@ class LOG4CXX_EXPORT LogManager
 		 */
 		static LoggerPtr exists(const std::string& name);
 #if LOG4CXX_WCHAR_T_API
-		/**
-		Retrieve the \c name Logger instance from the
-		{@link spi::LoggerRepository LoggerRepository}
-		using the default factory to create it if required.
-
-		Calls {@link spi::LoggerRepository::ensureIsConfigured ensureIsConfigured} passing {@link DefaultConfigurator::configure} to ensure
-		the repository is configured.
-		*/
-		static LoggerPtr getLogger(const std::wstring& name);
 		/**
 		Retrieve the \c name Logger instance from the
 		{@link spi::LoggerRepository LoggerRepository}
@@ -120,7 +101,7 @@ class LOG4CXX_EXPORT LogManager
 		the repository is configured.
 		*/
 		static LoggerPtr getLogger(const std::wstring& name,
-			const spi::LoggerFactoryPtr& factory);
+			const spi::LoggerFactoryPtr& factory = {});
 		/**
 		 A pointer to the Logger \c name instance if it exists in the {@link spi::LoggerRepository LoggerRepository}.
 
@@ -129,16 +110,6 @@ class LOG4CXX_EXPORT LogManager
 		static LoggerPtr exists(const std::wstring& name);
 #endif
 #if LOG4CXX_CFSTRING_API
-		/**
-		Retrieve the \c name Logger instance from the
-		{@link spi::LoggerRepository LoggerRepository}
-		using the default factory to create it if required.
-
-		Calls {@link spi::LoggerRepository::ensureIsConfigured ensureIsConfigured}
-		passing {@link DefaultConfigurator::configure} to ensure
-		the repository is configured.
-		*/
-		static LoggerPtr getLogger(const CFStringRef& name);
 		/**
 		Retrieve the \c name Logger instance from the
 		{@link spi::LoggerRepository LoggerRepository}
@@ -149,7 +120,7 @@ class LOG4CXX_EXPORT LogManager
 		the repository is configured.
 		*/
 		static LoggerPtr getLogger(const CFStringRef& name,
-			const spi::LoggerFactoryPtr& factory);
+			const spi::LoggerFactoryPtr& factory = {});
 		/**
 		 A pointer to the Logger \c name instance if it exists in the {@link spi::LoggerRepository LoggerRepository}.
 
@@ -158,17 +129,6 @@ class LOG4CXX_EXPORT LogManager
 		static LoggerPtr exists(const CFStringRef& name);
 #endif
 
-
-		/**
-		Retrieve the \c name Logger instance from the
-		{@link spi::LoggerRepository LoggerRepository}
-		using the default factory to create it if required.
-
-		Calls {@link spi::LoggerRepository::ensureIsConfigured ensureIsConfigured}
-		passing {@link DefaultConfigurator::configure} to ensure
-		the repository is configured.
-		*/
-		static LoggerPtr getLoggerLS(const LogString& name);
 		/**
 		Retrieve the \c name Logger instance from the
 		{@link spi::LoggerRepository LoggerRepository}
@@ -179,7 +139,7 @@ class LOG4CXX_EXPORT LogManager
 		the repository is configured.
 		*/
 		static LoggerPtr getLoggerLS(const LogString& name,
-			const spi::LoggerFactoryPtr& factory);
+			const spi::LoggerFactoryPtr& factory = {});
 
 		/**
 		 A pointer to the Logger \c name instance if it exists in the {@link spi::LoggerRepository LoggerRepository}.
diff --git a/src/main/include/log4cxx/spi/loggerrepository.h b/src/main/include/log4cxx/spi/loggerrepository.h
index 22c1028d..f1f8a77e 100644
--- a/src/main/include/log4cxx/spi/loggerrepository.h
+++ b/src/main/include/log4cxx/spi/loggerrepository.h
@@ -49,67 +49,71 @@ class LOG4CXX_EXPORT LoggerRepository : public virtual helpers::Object
 		virtual ~LoggerRepository() {}
 
 		/**
-		Add a {@link spi::HierarchyEventListener HierarchyEventListener}
-		        event to the repository.
+		Add \c listener to the repository.
 		*/
-		virtual void addHierarchyEventListener(const HierarchyEventListenerPtr&
-			listener) = 0;
+		virtual void addHierarchyEventListener(const HierarchyEventListenerPtr& listener) = 0;
 
 		/**
-		 * Remove a previously added HierarchyEventListener from the repository.
+		 * Remove \c listener from the repository.
 		 *
 		 */
 		virtual void removeHierarchyEventListener(const spi::HierarchyEventListenerPtr& listener) = 0;
 
 		/**
-		 * Call \c configurator if not yet configured.
+		 * Call \c configurator if not yet configured and \c configurator has not already been tried.
+		 * If \c configurator succeeds, it must call LoggerRepository::setConfigured
+		 * to ensure subsequent calls to LoggerRepository::ensureIsConfigured
+		 * from overwriting the configuration.
 		 */
 		virtual void ensureIsConfigured(std::function<void()> configurator) = 0;
 
 		/**
-		Is the repository disabled for a given level? The answer depends
+		Is the repository disabled for \c level? The answer depends
 		on the repository threshold and the <code>level</code>
-		parameter. See also #setThreshold method.  */
+		parameter. See also the #setThreshold method.
+		*/
 		virtual bool isDisabled(int level) const = 0;
 
 		/**
-		Set the repository-wide threshold. All logging requests below the
-		threshold are immediately dropped. By default, the threshold is
-		set to <code>Level::getAll()</code> which has the lowest possible rank.  */
-		virtual void setThreshold(const LevelPtr& level) = 0;
+		Enable logging for logging requests with level <code>newLevel</code> or higher.
+		All logging requests below the threshold are immediately dropped.
+		By default, the threshold is set to <code>Level::getAll()</code> which has the lowest possible rank.
+		*/
+		virtual void setThreshold(const LevelPtr& newLevel) = 0;
 
 		/**
-		Another form of {@link #setThreshold(const LevelPtr&)
-		            setThreshold} accepting a string
-		parameter instead of a <code>Level</code>. */
-		virtual void setThreshold(const LogString& val) = 0;
+		Enable logging for logging requests with level <code>newLevel</code> or higher.
+		The threshold is set the <code>DEBUG</code> if \c newLevel is not recognised by Level::getLevel.
+		All logging requests below the threshold are immediately dropped.
+		By default, the threshold is set to <code>Level::getAll()</code> which has the lowest possible rank.
+		*/
+		virtual void setThreshold(const LogString& newLevel) = 0;
 
+		/**
+		Add a warning to internal debug output that \c logger does not have any Appender attached.
+		To avoid overloading the output stream, the warning is emitted only once.
+		*/
 		virtual void emitNoAppenderWarning(const Logger* logger) = 0;
 
 		/**
-		Get the repository-wide threshold.
+		The current repository-wide threshold.
 
-		See setThreshold for an explanation.
+		See #setThreshold for an explanation.
 		*/
 		virtual LevelPtr getThreshold() const = 0;
 
 		/**
-		Retrieve the \c name Logger instance
-		*/
-		virtual LoggerPtr getLogger(const LogString& name) = 0;
-
-		/**
-		Retrieve the \c name Logger instance
+		Retrieve the \c name Logger instance.
 
-		If a logger of that name already exists, then it will be
-		returned.  Otherwise, a new logger will be instantiated by the
-		provided <code>factory</code>.
+		If a logger of that name already exists, it will be returned.
+		Otherwise, a new logger will be instantiated,
+		optionally by calling <code>factory->makeNewLoggerInstance()</code>.
 
-		@param name The name of the logger to retrieve.
-		@param factory The factory that will make the new logger instance.
+		@param name The logger to retrieve.
+		@param factory If provided, used to instantiate a new logger.
 		*/
 		virtual LoggerPtr getLogger(const LogString& name,
-			const spi::LoggerFactoryPtr& factory) = 0;
+			const spi::LoggerFactoryPtr& factory = {}) = 0;
 
 		/**
 		Remove the \c name Logger from the repository.
@@ -124,21 +128,64 @@ class LOG4CXX_EXPORT LoggerRepository : public virtual helpers::Object
 		*/
 		virtual bool removeLogger(const LogString& name, bool ifNotUsed = true) = 0;
 
+		/**
+		The logger that cannot be retrieved by name.
+		*/
 		virtual LoggerPtr getRootLogger() const = 0;
 
+		/**
+		Does \c name exist in the repository?
+		@returns The Logger instance if \c name exists in the repository.
+		*/
 		virtual LoggerPtr exists(const LogString& name) = 0;
 
+		/**
+		Close and remove all appenders in all categories including the root logger.
+		The configured status becomes <code>false</code>.
+		*/
 		virtual void shutdown() = 0;
 
+		/**
+		All the loggers currently defined in this repository.
+
+		The root logger is <em>not</em> included in the returned
+		LoggerList.
+		*/
 		virtual LoggerList getCurrentLoggers() const = 0;
 
+		/**
+		Call addAppenderEvent on all registered listeners.
+		*/
 		virtual void fireAddAppenderEvent(const Logger* logger,	const Appender* appender) {};
 
+		/**
+		Call removeAppenderEvent on all registered listeners.
+		*/
 		virtual void fireRemoveAppenderEvent(const Logger* logger, const Appender* appender) {};
 
+		/**
+		Reset all values contained in this repository instance to their default.
+		This removes all appenders from all categories, sets
+		the level of all non-root categories to <code>null</code>,
+		sets their additivity flag to <code>true</code> and sets the level
+		of the root logger to DEBUG.
+		Also the repository wide threshold is set its default "ALL" value.
+
+		Existing categories are not removed.
+
+		This method should be used sparingly and with care as it will
+		block all logging until this is configured again.
+		*/
 		virtual void resetConfiguration() = 0;
 
+		/**
+		The value of the configured status.
+		*/
 		virtual bool isConfigured() = 0;
+
+		/**
+		Set the configured status to <code>true</code>.
+		*/
 		virtual void setConfigured(bool configured) = 0;
 
 		/**
diff --git a/src/main/include/log4cxx/spi/rootlogger.h b/src/main/include/log4cxx/spi/rootlogger.h
index 58c5f8d9..7e015c70 100644
--- a/src/main/include/log4cxx/spi/rootlogger.h
+++ b/src/main/include/log4cxx/spi/rootlogger.h
@@ -49,7 +49,7 @@ class LOG4CXX_EXPORT RootLogger : public Logger
 		Return the assigned level value without walking the logger
 		hierarchy.
 		*/
-		virtual const LevelPtr& getEffectiveLevel() const;
+		virtual LevelPtr getEffectiveLevel() const;
 
 		/**
 		            Setting a null value to the level of the root logger may have catastrophic