From 2a0d00929cb6795bdf2c7a81ae7d5ec55bbb3662 Mon Sep 17 00:00:00 2001 From: gabime Date: Sat, 18 Apr 2015 01:47:30 +0300 Subject: [PATCH] stdout_loggers now thread safe across all instances (share same stdout_sink_mt) --- include/spdlog/details/spdlog_impl.h | 8 ++++---- include/spdlog/sinks/stdout_sinks.h | 14 +++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/include/spdlog/details/spdlog_impl.h b/include/spdlog/details/spdlog_impl.h index 76843d71..5e1bc73a 100644 --- a/include/spdlog/details/spdlog_impl.h +++ b/include/spdlog/details/spdlog_impl.h @@ -72,22 +72,22 @@ inline std::shared_ptr spdlog::daily_logger_st(const std::string // Create stdout/stderr loggers inline std::shared_ptr spdlog::stdout_logger_mt(const std::string& logger_name) { - return create(logger_name); + return details::registry::instance().create(logger_name, spdlog::sinks::stdout_sink_mt::instance()); } inline std::shared_ptr spdlog::stdout_logger_st(const std::string& logger_name) { - return create(logger_name); + return details::registry::instance().create(logger_name, spdlog::sinks::stdout_sink_st::instance()); } inline std::shared_ptr spdlog::stderr_logger_mt(const std::string& logger_name) { - return create(logger_name); + return details::registry::instance().create(logger_name, spdlog::sinks::stderr_sink_mt::instance()); } inline std::shared_ptr spdlog::stderr_logger_st(const std::string& logger_name) { - return create(logger_name); + return details::registry::instance().create(logger_name, spdlog::sinks::stderr_sink_st::instance()); } #ifdef __linux__ diff --git a/include/spdlog/sinks/stdout_sinks.h b/include/spdlog/sinks/stdout_sinks.h index e944e273..5ad06c29 100644 --- a/include/spdlog/sinks/stdout_sinks.h +++ b/include/spdlog/sinks/stdout_sinks.h @@ -37,9 +37,14 @@ namespace sinks template class stdout_sink : public ostream_sink { + using MyType = stdout_sink; public: stdout_sink() : ostream_sink(std::cout, true) {} - + static std::shared_ptr instance() + { + static std::shared_ptr instance = std::make_shared(); + return instance; + } }; typedef stdout_sink stdout_sink_st; @@ -49,8 +54,15 @@ typedef stdout_sink stdout_sink_mt; template class stderr_sink : public ostream_sink { + using MyType = stderr_sink; public: stderr_sink() : ostream_sink(std::cerr, true) {} + static std::shared_ptr instance() + { + static std::shared_ptr instance = std::make_shared(); + return instance; + } + }; typedef stderr_sink stderr_sink_mt;