Merge pull request #92 from divaykin/vector-registry
vector based registry & no mutex at get
This commit is contained in:
commit
00d5c94135
@ -54,9 +54,19 @@ public:
|
|||||||
|
|
||||||
std::shared_ptr<logger> get(const std::string& logger_name)
|
std::shared_ptr<logger> get(const std::string& logger_name)
|
||||||
{
|
{
|
||||||
|
#ifndef SPDLOG_NO_REGISTRY_MUTEX
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
#endif
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
for (auto& logger : _loggers) {
|
||||||
|
if (logger_name == logger->name())
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
#else
|
||||||
auto found = _loggers.find(logger_name);
|
auto found = _loggers.find(logger_name);
|
||||||
return found == _loggers.end() ? nullptr : found->second;
|
return found == _loggers.end() ? nullptr : found->second;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class It>
|
template<class It>
|
||||||
@ -84,7 +94,17 @@ public:
|
|||||||
void drop(const std::string& logger_name)
|
void drop(const std::string& logger_name)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
for (auto it = _loggers.begin(); it != _loggers.end();) {
|
||||||
|
if (logger_name == (*it)->name()) {
|
||||||
|
it = _loggers.erase(it);
|
||||||
|
} else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
_loggers.erase(logger_name);
|
_loggers.erase(logger_name);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void drop_all()
|
void drop_all()
|
||||||
@ -108,7 +128,11 @@ public:
|
|||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
_formatter = f;
|
_formatter = f;
|
||||||
for (auto& l : _loggers)
|
for (auto& l : _loggers)
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
l->set_formatter(_formatter);
|
||||||
|
#else
|
||||||
l.second->set_formatter(_formatter);
|
l.second->set_formatter(_formatter);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_pattern(const std::string& pattern)
|
void set_pattern(const std::string& pattern)
|
||||||
@ -116,14 +140,22 @@ public:
|
|||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
_formatter = std::make_shared<pattern_formatter>(pattern);
|
_formatter = std::make_shared<pattern_formatter>(pattern);
|
||||||
for (auto& l : _loggers)
|
for (auto& l : _loggers)
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
l->set_formatter(_formatter);
|
||||||
|
#else
|
||||||
l.second->set_formatter(_formatter);
|
l.second->set_formatter(_formatter);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_level(level::level_enum log_level)
|
void set_level(level::level_enum log_level)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(_mutex);
|
std::lock_guard<std::mutex> lock(_mutex);
|
||||||
for (auto& l : _loggers)
|
for (auto& l : _loggers)
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
l->set_level(log_level);
|
||||||
|
#else
|
||||||
l.second->set_level(log_level);
|
l.second->set_level(log_level);
|
||||||
|
#endif
|
||||||
_level = log_level;
|
_level = log_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,15 +184,25 @@ private:
|
|||||||
void register_logger_impl(std::shared_ptr<logger> logger)
|
void register_logger_impl(std::shared_ptr<logger> logger)
|
||||||
{
|
{
|
||||||
auto logger_name = logger->name();
|
auto logger_name = logger->name();
|
||||||
if (_loggers.find(logger_name) != std::end(_loggers))
|
if (get(logger_name) != nullptr)
|
||||||
throw spdlog_ex("logger with name " + logger_name + " already exists");
|
throw spdlog_ex("logger with name " + logger_name + " already exists");
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
_loggers.push_back(logger);
|
||||||
|
#else
|
||||||
_loggers[logger->name()] = logger;
|
_loggers[logger->name()] = logger;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
registry() = default;
|
registry() = default;
|
||||||
registry(const registry&) = delete;
|
registry(const registry&) = delete;
|
||||||
registry& operator=(const registry&) = delete;
|
registry& operator=(const registry&) = delete;
|
||||||
std::mutex _mutex;
|
std::mutex _mutex;
|
||||||
|
|
||||||
|
#ifdef SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
std::vector <std::shared_ptr<logger>> _loggers;
|
||||||
|
#else
|
||||||
std::unordered_map <std::string, std::shared_ptr<logger>> _loggers;
|
std::unordered_map <std::string, std::shared_ptr<logger>> _loggers;
|
||||||
|
#endif
|
||||||
|
|
||||||
formatter_ptr _formatter;
|
formatter_ptr _formatter;
|
||||||
level::level_enum _level = level::info;
|
level::level_enum _level = level::info;
|
||||||
bool _async_mode = false;
|
bool _async_mode = false;
|
||||||
|
@ -64,3 +64,15 @@
|
|||||||
// #define SPDLOG_DEBUG_ON
|
// #define SPDLOG_DEBUG_ON
|
||||||
// #define SPDLOG_TRACE_ON
|
// #define SPDLOG_TRACE_ON
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Uncomment to enable lockless registry
|
||||||
|
// #define SPDLOG_NO_REGISTRY_MUTEX
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Uncomment to enable vector based registry
|
||||||
|
// #define SPDLOG_VECTOR_BASED_REGISTRY
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user