diff --git a/include/spdlog/details/logger_impl.h b/include/spdlog/details/logger_impl.h index 7f0171e6..174ddc99 100644 --- a/include/spdlog/details/logger_impl.h +++ b/include/spdlog/details/logger_impl.h @@ -296,4 +296,10 @@ inline void spdlog::logger::flush() { for (auto& sink : _sinks) sink->flush(); +} + +inline void spdlog::logger::clear() +{ + for (auto& sink : _sinks) + sink->clear(); } \ No newline at end of file diff --git a/include/spdlog/logger.h b/include/spdlog/logger.h index a756ea3a..0b853b04 100644 --- a/include/spdlog/logger.h +++ b/include/spdlog/logger.h @@ -89,6 +89,7 @@ public: void set_formatter(formatter_ptr); virtual void flush(); + virtual void clear(); protected: virtual void _log_msg(details::log_msg&); diff --git a/include/spdlog/sinks/android_sink.h b/include/spdlog/sinks/android_sink.h index d872c1ba..71abf33a 100644 --- a/include/spdlog/sinks/android_sink.h +++ b/include/spdlog/sinks/android_sink.h @@ -32,6 +32,10 @@ public: { } + void clear() override + { + } + protected: void _sink_it(const details::log_msg& msg) override { diff --git a/include/spdlog/sinks/file_sinks.h b/include/spdlog/sinks/file_sinks.h index 136f63e2..8be26e38 100644 --- a/include/spdlog/sinks/file_sinks.h +++ b/include/spdlog/sinks/file_sinks.h @@ -33,6 +33,11 @@ public: _file_helper.flush(); } + void clear() override + { + _file_helper.reopen(true); + } + protected: void _sink_it(const details::log_msg& msg) override { @@ -71,6 +76,11 @@ public: _file_helper.flush(); } + void clear() override + { + _file_helper.reopen(true); + } + protected: void _sink_it(const details::log_msg& msg) override { @@ -163,6 +173,11 @@ public: _file_helper.flush(); } + void clear() override + { + _file_helper.reopen(true); + } + protected: void _sink_it(const details::log_msg& msg) override { diff --git a/include/spdlog/sinks/null_sink.h b/include/spdlog/sinks/null_sink.h index ea32df48..efe2aa15 100644 --- a/include/spdlog/sinks/null_sink.h +++ b/include/spdlog/sinks/null_sink.h @@ -24,6 +24,8 @@ protected: void flush() override {} + void clear() override + {} }; typedef null_sink null_sink_st; typedef null_sink null_sink_mt; diff --git a/include/spdlog/sinks/ostream_sink.h b/include/spdlog/sinks/ostream_sink.h index 318643c9..95c4486c 100644 --- a/include/spdlog/sinks/ostream_sink.h +++ b/include/spdlog/sinks/ostream_sink.h @@ -38,6 +38,10 @@ protected: _ostream.flush(); } + void clear() override + { + } + std::ostream& _ostream; bool _force_flush; }; diff --git a/include/spdlog/sinks/sink.h b/include/spdlog/sinks/sink.h index 09f1021c..a6bd90de 100644 --- a/include/spdlog/sinks/sink.h +++ b/include/spdlog/sinks/sink.h @@ -18,6 +18,7 @@ public: virtual ~sink() {} virtual void log(const details::log_msg& msg) = 0; virtual void flush() = 0; + virtual void clear() = 0; }; } } diff --git a/include/spdlog/sinks/syslog_sink.h b/include/spdlog/sinks/syslog_sink.h index 4963692f..dcf7deb3 100644 --- a/include/spdlog/sinks/syslog_sink.h +++ b/include/spdlog/sinks/syslog_sink.h @@ -63,6 +63,10 @@ public: { } + void clear() override + { + } + private: std::array _priorities;