Photon 1.0.0
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
20{
21 namespace sinks
22 {
23
24 template <typename Mutex>
25 class dist_sink : public base_sink<Mutex>
26 {
27 public:
28 dist_sink() = default;
29 explicit dist_sink(std::vector<std::shared_ptr<sink>> sinks)
30 : sinks_(sinks)
31 {
32 }
33
34 dist_sink(const dist_sink&) = delete;
35 dist_sink& operator=(const dist_sink&) = delete;
36
37 void add_sink(std::shared_ptr<sink> sub_sink)
38 {
39 std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
40 sinks_.push_back(sub_sink);
41 }
42
43 void remove_sink(std::shared_ptr<sink> sub_sink)
44 {
45 std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
46 sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sub_sink), sinks_.end());
47 }
48
49 void set_sinks(std::vector<std::shared_ptr<sink>> sinks)
50 {
51 std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
52 sinks_ = std::move(sinks);
53 }
54
55 std::vector<std::shared_ptr<sink>>& sinks()
56 {
57 return sinks_;
58 }
59
60 protected:
61 void sink_it_(const details::log_msg& msg) override
62 {
63 for (auto& sub_sink : sinks_)
64 {
65 if (sub_sink->should_log(msg.level))
66 {
67 sub_sink->log(msg);
68 }
69 }
70 }
71
72 void flush_() override
73 {
74 for (auto& sub_sink : sinks_)
75 {
76 sub_sink->flush();
77 }
78 }
79
80 void set_pattern_(const std::string& pattern) override
81 {
82 set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
83 }
84
85 void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override
86 {
87 base_sink<Mutex>::formatter_ = std::move(sink_formatter);
88 for (auto& sub_sink : sinks_)
89 {
90 sub_sink->set_formatter(base_sink<Mutex>::formatter_->clone());
91 }
92 }
93 std::vector<std::shared_ptr<sink>> sinks_;
94 };
95
98
99 } // namespace sinks
100} // namespace spdlog
Definition base_sink.h:22
Definition dist_sink.h:26
void add_sink(std::shared_ptr< sink > sub_sink)
Definition dist_sink.h:37
std::vector< std::shared_ptr< sink > > sinks_
Definition dist_sink.h:93
void set_sinks(std::vector< std::shared_ptr< sink > > sinks)
Definition dist_sink.h:49
void sink_it_(const details::log_msg &msg) override
Definition dist_sink.h:61
void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition dist_sink.h:85
void set_pattern_(const std::string &pattern) override
Definition dist_sink.h:80
void flush_() override
Definition dist_sink.h:72
void remove_sink(std::shared_ptr< sink > sub_sink)
Definition dist_sink.h:43
std::vector< std::shared_ptr< sink > > & sinks()
Definition dist_sink.h:55
dist_sink & operator=(const dist_sink &)=delete
dist_sink(std::vector< std::shared_ptr< sink > > sinks)
Definition dist_sink.h:29
dist_sink(const dist_sink &)=delete
dist_sink< details::null_mutex > dist_sink_st
Definition dist_sink.h:97
dist_sink< std::mutex > dist_sink_mt
Definition dist_sink.h:96
Definition async.h:26
Definition log_msg.h:14
level::level_enum level
Definition log_msg.h:23