diff --git a/include/spdlog/sinks/dist_sink.h b/include/spdlog/sinks/dist_sink.h index 1ad22120..152e45da 100644 --- a/include/spdlog/sinks/dist_sink.h +++ b/include/spdlog/sinks/dist_sink.h @@ -7,7 +7,6 @@ #include "spdlog/details/log_msg.h" #include "spdlog/details/null_mutex.h" -#include "spdlog/sink/base_sink.h" #include #include @@ -18,22 +17,18 @@ namespace spdlog { namespace sinks { -template -class dist_sink : public base_sink + +template +class dist_sink : public sink { public: - explicit dist_sink() - : sinks_() - { - } + dist_sink() = default; dist_sink(const dist_sink &) = delete; dist_sink &operator=(const dist_sink &) = delete; -protected: - std::vector> sinks_; - - void sink_it_(const details::log_msg &msg) override + void log(const details::log_msg &msg) SPDLOG_FINAL override { + std::lock_guard lock(mutex_); for (auto &sink : sinks_) { if (sink->should_log(msg.level)) @@ -43,24 +38,29 @@ protected: } } - void flush_() override + void flush() SPDLOG_FINAL override { + std::lock_guard lock(mutex_); for (auto &sink : sinks_) sink->flush(); } -public: void add_sink(std::shared_ptr sink) { - std::lock_guard lock(base_sink::mutex_); + std::lock_guard lock(mutex_); sinks_.push_back(sink); } void remove_sink(std::shared_ptr sink) { - std::lock_guard lock(base_sink::mutex_); + std::lock_guard lock(mutex_); sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end()); } + +private: + Mutex mutex_; + std::vector> sinks_; + }; using dist_sink_mt = dist_sink;