1 // 2 // Copyright(c) 2018 Gabi Melman. 3 // Distributed under the MIT License (http://opensource.org/licenses/MIT) 4 // 5 6 #pragma once 7 8 #include "spdlog/details/null_mutex.h" 9 #include "spdlog/sinks/base_sink.h" 10 11 #include <chrono> 12 #include <mutex> 13 #include <thread> 14 15 namespace spdlog { 16 namespace sinks { 17 18 template<class Mutex> 19 class test_sink : public base_sink<Mutex> 20 { 21 public: msg_counter()22 size_t msg_counter() 23 { 24 std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_); 25 return msg_counter_; 26 } 27 flush_counter()28 size_t flush_counter() 29 { 30 std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_); 31 return flush_counter_; 32 } 33 set_delay(std::chrono::milliseconds delay)34 void set_delay(std::chrono::milliseconds delay) 35 { 36 delay_ = delay; 37 } 38 39 protected: 40 void sink_it_(const details::log_msg &) override 41 { 42 msg_counter_++; 43 std::this_thread::sleep_for(delay_); 44 } 45 46 void flush_() override 47 { 48 flush_counter_++; 49 } 50 size_t msg_counter_{0}; 51 size_t flush_counter_{0}; 52 std::chrono::milliseconds delay_{std::chrono::milliseconds::zero()}; 53 }; 54 55 using test_sink_mt = test_sink<std::mutex>; 56 using test_sink_st = test_sink<details::null_mutex>; 57 58 } // namespace sinks 59 } // namespace spdlog 60