// Copyright(c) 2015-present Gabi Melman & spdlog contributors. // Distributed under the MIT License (http://opensource.org/licenses/MIT) #pragma once #ifndef SPDLOG_H #include "spdlog/spdlog.h" #endif #include "spdlog/details/null_mutex.h" #include "spdlog/sinks/base_sink.h" #include #include namespace spdlog { namespace sinks { template class ostream_sink final : public base_sink { public: explicit ostream_sink(std::ostream &os, bool force_flush = false) : ostream_(os) , force_flush_(force_flush) {} ostream_sink(const ostream_sink &) = delete; ostream_sink &operator=(const ostream_sink &) = delete; protected: void sink_it_(const details::log_msg &msg) override { fmt::memory_buffer formatted; sink::formatter_->format(msg, formatted); ostream_.write(formatted.data(), static_cast(formatted.size())); if (force_flush_) { ostream_.flush(); } } void flush_() override { ostream_.flush(); } std::ostream &ostream_; bool force_flush_; }; using ostream_sink_mt = ostream_sink; using ostream_sink_st = ostream_sink; } // namespace sinks } // namespace spdlog