3#include <spdlog/sinks/base_sink.h>
25template <
typename Mutex>
30 explicit RingLogSink(std::size_t capacity = 100000) : capacity_(capacity) {}
40 std::lock_guard<Mutex> lock(this->mutex_);
41 return {buffer_.begin(), buffer_.end()};
45 void sink_it_(
const spdlog::details::log_msg& msg)
override {
46 spdlog::memory_buf_t formatted;
47 this->formatter_->format(msg, formatted);
48 std::string entry{formatted.data(), formatted.size()};
51 if (!entry.empty() && entry.back() ==
'\n') {
54 if (!entry.empty() && entry.back() ==
'\r') {
57 if (buffer_.size() >= capacity_) {
60 buffer_.push_back(std::move(entry));
66 std::size_t capacity_;
67 std::deque<std::string> buffer_;
Thread-safe spdlog sink that retains the most recent log entries in memory.
Definition ring_log_sink.h:26
std::vector< std::string > entries()
Returns a snapshot of all currently buffered log lines.
Definition ring_log_sink.h:39
void flush_() override
Definition ring_log_sink.h:63
void sink_it_(const spdlog::details::log_msg &msg) override
Definition ring_log_sink.h:45
RingLogSink(std::size_t capacity=100000)
Constructs the sink with the given ring-buffer capacity.
Definition ring_log_sink.h:30
Definition cert_info.cc:13