diff options
Diffstat (limited to 'matching/include/spdlog/sinks/base_sink.h')
-rw-r--r-- | matching/include/spdlog/sinks/base_sink.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/matching/include/spdlog/sinks/base_sink.h b/matching/include/spdlog/sinks/base_sink.h new file mode 100644 index 0000000..2259518 --- /dev/null +++ b/matching/include/spdlog/sinks/base_sink.h @@ -0,0 +1,69 @@ +// +// Copyright(c) 2015 Gabi Melman. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) +// + +#pragma once +// +// base sink templated over a mutex (either dummy or real) +// concrete implementation should override the sink_it_() and flush_() methods. +// locking is taken care of in this class - no locking needed by the +// implementers.. +// + +#include "spdlog/common.h" +#include "spdlog/details/log_msg.h" +#include "spdlog/formatter.h" +#include "spdlog/sinks/sink.h" + +namespace spdlog { +namespace sinks { +template<typename Mutex> +class base_sink : public sink +{ +public: + base_sink() = default; + base_sink(const base_sink &) = delete; + base_sink &operator=(const base_sink &) = delete; + + void log(const details::log_msg &msg) final + { + std::lock_guard<Mutex> lock(mutex_); + sink_it_(msg); + } + + void flush() final + { + std::lock_guard<Mutex> lock(mutex_); + flush_(); + } + + void set_pattern(const std::string &pattern) final + { + std::lock_guard<Mutex> lock(mutex_); + set_pattern_(pattern); + } + + void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final + { + std::lock_guard<Mutex> lock(mutex_); + set_formatter_(std::move(sink_formatter)); + } + +protected: + virtual void sink_it_(const details::log_msg &msg) = 0; + virtual void flush_() = 0; + + virtual void set_pattern_(const std::string &pattern) + { + set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern)); + } + + virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) + { + formatter_ = std::move(sink_formatter); + } + Mutex mutex_; +}; +} // namespace sinks +} // namespace spdlog |