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:16 UTC

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

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;