namespace isc {
namespace log {
+LoggerImpl*
+Logger::getLoggerPtr() {
+ if (!loggerptr_) {
+ std::call_once(flag_, [&](){ initLoggerImpl(); });
+ }
+ return (loggerptr_);
+}
+
// Initialize underlying logger, but only if logging has been initialized.
-void Logger::initLoggerImpl() {
+void
+Logger::initLoggerImpl() {
if (isLoggingInitialized()) {
loggerptr_ = new LoggerImpl(name_);
} else {
#include <cstdlib>
#include <string>
#include <cstring>
+#include <mutex>
#include <boost/static_assert.hpp>
/// cause a "LoggingNotInitialized" exception to be thrown.
///
/// \return Returns pointer to implementation
- LoggerImpl* getLoggerPtr() {
- if (!loggerptr_) {
- initLoggerImpl();
- }
- return (loggerptr_);
- }
+ LoggerImpl* getLoggerPtr();
/// \brief Initialize Underlying Implementation and Set loggerptr_
void initLoggerImpl();
- LoggerImpl* loggerptr_; ///< Pointer to underlying logger
+ LoggerImpl* loggerptr_; ///< Pointer to underlying logger
char name_[MAX_LOGGER_NAME_SIZE + 1]; ///< Copy of the logger name
+ std::once_flag flag_; ///< Flag to initialize only once
};
} // namespace log