aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/spdlog/tests/test_sink.h
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2025-10-24 10:19:24 +0200
committerGitHub Enterprise <[email protected]>2025-10-24 10:19:24 +0200
commit0e21e0d57a5da36f2a4fbbd315254b22cd2fbf00 (patch)
treebe7c96101bf9c91615f04412c7bafe156a3d6ac8 /thirdparty/spdlog/tests/test_sink.h
parentchangelog (diff)
downloadzen-0e21e0d57a5da36f2a4fbbd315254b22cd2fbf00.tar.xz
zen-0e21e0d57a5da36f2a4fbbd315254b22cd2fbf00.zip
in-tree spdlog (#602)
move spdlog into the tree to remove dependency on vcpkg::spdlog, to allow diverging from the official version and evolve it to fit better with OTLP logging requirements
Diffstat (limited to 'thirdparty/spdlog/tests/test_sink.h')
-rw-r--r--thirdparty/spdlog/tests/test_sink.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/thirdparty/spdlog/tests/test_sink.h b/thirdparty/spdlog/tests/test_sink.h
new file mode 100644
index 000000000..9c0945232
--- /dev/null
+++ b/thirdparty/spdlog/tests/test_sink.h
@@ -0,0 +1,70 @@
+//
+// Copyright(c) 2018 Gabi Melman.
+// Distributed under the MIT License (http://opensource.org/licenses/MIT)
+//
+
+#pragma once
+
+#include "spdlog/details/null_mutex.h"
+#include "spdlog/sinks/base_sink.h"
+#include "spdlog/fmt/fmt.h"
+#include <chrono>
+#include <mutex>
+#include <thread>
+
+namespace spdlog {
+namespace sinks {
+
+template <class Mutex>
+class test_sink : public base_sink<Mutex> {
+ const size_t lines_to_save = 100;
+
+public:
+ size_t msg_counter() {
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
+ return msg_counter_;
+ }
+
+ size_t flush_counter() {
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
+ return flush_counter_;
+ }
+
+ void set_delay(std::chrono::milliseconds delay) {
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
+ delay_ = delay;
+ }
+
+ // return last output without the eol
+ std::vector<std::string> lines() {
+ std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
+ return lines_;
+ }
+
+protected:
+ void sink_it_(const details::log_msg &msg) override {
+ memory_buf_t formatted;
+ base_sink<Mutex>::formatter_->format(msg, formatted);
+ // save the line without the eol
+ auto eol_len = strlen(details::os::default_eol);
+ using diff_t = typename std::iterator_traits<decltype(formatted.end())>::difference_type;
+ if (lines_.size() < lines_to_save) {
+ lines_.emplace_back(formatted.begin(), formatted.end() - static_cast<diff_t>(eol_len));
+ }
+ msg_counter_++;
+ std::this_thread::sleep_for(delay_);
+ }
+
+ void flush_() override { flush_counter_++; }
+
+ size_t msg_counter_{0};
+ size_t flush_counter_{0};
+ std::chrono::milliseconds delay_{std::chrono::milliseconds::zero()};
+ std::vector<std::string> lines_;
+};
+
+using test_sink_mt = test_sink<std::mutex>;
+using test_sink_st = test_sink<details::null_mutex>;
+
+} // namespace sinks
+} // namespace spdlog