spdlog
Loading...
Searching...
No Matches
ringbuffer_sink.h
Go to the documentation of this file.
1// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
2// Distributed under the MIT License (http://opensource.org/licenses/MIT)
3
4#pragma once
5
10
11#include <mutex>
12#include <string>
13#include <vector>
14
15namespace spdlog {
16namespace sinks {
17/*
18 * Ring buffer sink
19 */
20template<typename Mutex>
21class ringbuffer_sink final : public base_sink<Mutex>
22{
23public:
24 explicit ringbuffer_sink(size_t n_items)
25 : q_{n_items}
26 {}
27
29 {
31 auto items_available = q_.size();
32 auto n_items = lim > 0 ? (std::min)(lim, items_available) : items_available;
34 ret.reserve(n_items);
35 for (size_t i = (items_available - n_items); i < items_available; i++)
36 {
37 ret.push_back(q_.at(i));
38 }
39 return ret;
40 }
41
43 {
45 auto items_available = q_.size();
46 auto n_items = lim > 0 ? (std::min)(lim, items_available) : items_available;
48 ret.reserve(n_items);
49 for (size_t i = (items_available - n_items); i < items_available; i++)
50 {
51 memory_buf_t formatted;
52 base_sink<Mutex>::formatter_->format(q_.at(i), formatted);
53 ret.push_back(fmt::to_string(formatted));
54 }
55 return ret;
56 }
57
58protected:
59 void sink_it_(const details::log_msg &msg) override
60 {
61 q_.push_back(details::log_msg_buffer{msg});
62 }
63 void flush_() override {}
64
65private:
67};
68
71
72} // namespace sinks
73
74} // namespace spdlog
std::vector< std::string > last_formatted(size_t lim=0)
std::vector< details::log_msg_buffer > last_raw(size_t lim=0)
void sink_it_(const details::log_msg &msg) override
details::circular_q< details::log_msg_buffer > q_
T min(T... args)
Definition async.h:25
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:116
T push_back(T... args)
T reserve(T... args)