From f0622c8fb80916f3a3b261c55fdb4a4da2d588f4 Mon Sep 17 00:00:00 2001 From: gabi Date: Tue, 2 Sep 2014 00:24:35 +0300 Subject: [PATCH] factory changes --- include/c11log/details/factory.h | 43 ++++++++++++++-------------- include/c11log/logger.h | 32 +++++++++++++++------ include/c11log/sinks/console_sinks.h | 2 -- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/include/c11log/details/factory.h b/include/c11log/details/factory.h index 4445490c..a84e667e 100644 --- a/include/c11log/details/factory.h +++ b/include/c11log/details/factory.h @@ -5,9 +5,9 @@ #include #include + namespace c11log { -class logger; namespace details { class factory @@ -15,47 +15,46 @@ class factory public: using logger_ptr = std::shared_ptr; using logger_map = std::unordered_map; - void add_logger(const std::string& name, logger_ptr); + std::shared_ptr create_logger(const std::string& name, logger::sinks_init_list, logger::formatter_ptr = nullptr); logger_ptr get_logger(const std::string &name); - static c11log::details::factory& instance(); + static factory& instance(); + private: - std::mutex _loggers_mutex; - logger_map _loggers; + std::mutex _factory_mutex; + logger_map _factory; + + }; } } -inline void c11log::details::factory::add_logger(const std::string& name, logger_ptr logger_p) +inline std::shared_ptr c11log::details::factory::create_logger(const std::string& name, logger::sinks_init_list sinks, logger::formatter_ptr formatter) { - std::lock_guard lock(_loggers_mutex); - _loggers.insert(logger_map::value_type(name, logger_p)); + std::lock_guard lock(_factory_mutex); + logger_ptr logger_p = std::make_shared(name, sinks, std::move(formatter)); + + _factory.insert(logger_map::value_type(name, logger_p)); + return logger_p; } + + inline c11log::details::factory::logger_ptr c11log::details::factory::get_logger(const std::string &name) { - std::lock_guard lock(_loggers_mutex); + std::lock_guard lock(_factory_mutex); - auto found = _loggers.find(name); - if (found != _loggers.end()) + auto found = _factory.find(name); + if (found != _factory.end()) return found->second; else return logger_ptr(nullptr); - /* - auto found = _loggers.find(name); - - if (found == _loggers.end()) { - auto new_logger_ptr = std::make_shared(name); - _loggers.insert(std::make_pair(name, new_logger_ptr)); - return new_logger_ptr; - } else { - return found->second; - }*/ } + inline c11log::details::factory & c11log::details::factory::instance() { - static c11log::details::factory instance; + static factory instance; return instance; } diff --git a/include/c11log/logger.h b/include/c11log/logger.h index d865e27d..1248de26 100644 --- a/include/c11log/logger.h +++ b/include/c11log/logger.h @@ -7,9 +7,11 @@ #include #include #include -#include "common_types.h" + #include "sinks/base_sink.h" -#include "details/factory.h" +#include "common_types.h" + + //Thread safe, fast logger. @@ -23,6 +25,9 @@ class line_logger; template class fast_buf; } + + + class logger { public: @@ -79,15 +84,28 @@ private: }; -//Get from loggers pool if exists with such name -logger& get_logger(const std::string& name); +std::shared_ptr create_logger(const std::string& name, logger::sinks_init_list sinks, logger::formatter_ptr formatter = nullptr); +std::shared_ptr get_logger(const std::string& name); } + // // Logger inline implementation // + #include "details/line_logger.h" +#include "details/factory.h" + + +inline std::shared_ptr c11log::create_logger(const std::string& name, logger::sinks_init_list sinks, logger::formatter_ptr formatter) +{ + return details::factory::instance().create_logger(name, sinks, std::move(formatter)); +} +inline std::shared_ptr c11log::get_logger(const std::string& name) +{ + return details::factory::instance().get_logger(name); +} inline c11log::logger::logger(const std::string& name, sinks_init_list sinks_list, formatter_ptr f) : @@ -215,8 +233,4 @@ inline void c11log::logger::_log_it(details::log_msg& msg) sink->log(msg); } -// Static factory function -inline c11log::logger& c11log::get_logger(const std::string& name) -{ - return *(c11log::details::factory::instance().get_logger(name)); -} + diff --git a/include/c11log/sinks/console_sinks.h b/include/c11log/sinks/console_sinks.h index 27210260..e0004456 100644 --- a/include/c11log/sinks/console_sinks.h +++ b/include/c11log/sinks/console_sinks.h @@ -43,7 +43,5 @@ inline std::shared_ptr& stderr_sink () return inst; } - - } }