spdlog
Loading...
Searching...
No Matches
dist_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
6#include "base_sink.h"
10
11#include <algorithm>
12#include <memory>
13#include <mutex>
14#include <vector>
15
16// Distribution sink (mux). Stores a vector of sinks which get called when log
17// is called
18
19namespace spdlog {
20namespace sinks {
21
22template<typename Mutex>
23class dist_sink : public base_sink<Mutex>
24{
25public:
26 dist_sink() = default;
30
31 dist_sink(const dist_sink &) = delete;
32 dist_sink &operator=(const dist_sink &) = delete;
33
39
41 {
43 sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end());
44 }
45
51
56
57protected:
58 void sink_it_(const details::log_msg &msg) override
59 {
60 for (auto &sink : sinks_)
61 {
62 if (sink->should_log(msg.level))
63 {
64 sink->log(msg);
65 }
66 }
67 }
68
69 void flush_() override
70 {
71 for (auto &sink : sinks_)
72 {
73 sink->flush();
74 }
75 }
76
77 void set_pattern_(const std::string &pattern) override
78 {
79 set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
80 }
81
83 {
84 base_sink<Mutex>::formatter_ = std::move(sink_formatter);
85 for (auto &sink : sinks_)
86 {
88 }
89 }
91};
92
95
96} // namespace sinks
97} // namespace spdlog
std::vector< std::shared_ptr< sink > > sinks_
Definition dist_sink.h:90
void set_sinks(std::vector< std::shared_ptr< sink > > sinks)
Definition dist_sink.h:46
void sink_it_(const details::log_msg &msg) override
Definition dist_sink.h:58
void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition dist_sink.h:82
void set_pattern_(const std::string &pattern) override
Definition dist_sink.h:77
void flush_() override
Definition dist_sink.h:69
void remove_sink(std::shared_ptr< sink > sink)
Definition dist_sink.h:40
std::vector< std::shared_ptr< sink > > & sinks()
Definition dist_sink.h:52
dist_sink & operator=(const dist_sink &)=delete
void add_sink(std::shared_ptr< sink > sink)
Definition dist_sink.h:34
dist_sink(std::vector< std::shared_ptr< sink > > sinks)
Definition dist_sink.h:27
dist_sink(const dist_sink &)=delete
virtual void log(const details::log_msg &msg)=0
virtual void flush()=0
bool should_log(level::level_enum msg_level) const
Definition sink-inl.h:12
virtual void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter)=0
Definition async.h:25
level::level_enum level
Definition log_msg.h:21