Livox SDK API  V2.0.0
dist_sink.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015 David Schury, Gabi Melman
3 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
4 //
5 
6 #pragma once
7 
8 #ifndef SPDLOG_H
9 #include "spdlog/spdlog.h"
10 #endif
11 
12 #include "base_sink.h"
13 #include "spdlog/details/log_msg.h"
15 
16 #include <algorithm>
17 #include <memory>
18 #include <mutex>
19 #include <vector>
20 
21 // Distribution sink (mux). Stores a vector of sinks which get called when log
22 // is called
23 
24 namespace spdlog {
25 namespace sinks {
26 
27 template<typename Mutex>
28 class dist_sink : public base_sink<Mutex>
29 {
30 public:
31  dist_sink() = default;
32  dist_sink(const dist_sink &) = delete;
33  dist_sink &operator=(const dist_sink &) = delete;
34 
35  void add_sink(std::shared_ptr<sink> sink)
36  {
37  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
38  sinks_.push_back(sink);
39  }
40 
41  void remove_sink(std::shared_ptr<sink> sink)
42  {
43  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
44  sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end());
45  }
46 
47  void set_sinks(std::vector<std::shared_ptr<sink>> sinks)
48  {
49  std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
50  sinks_ = std::move(sinks);
51  }
52 
53 protected:
54  void sink_it_(const details::log_msg &msg) override
55  {
56 
57  for (auto &sink : sinks_)
58  {
59  if (sink->should_log(msg.level))
60  {
61  sink->log(msg);
62  }
63  }
64  }
65 
66  void flush_() override
67  {
68  for (auto &sink : sinks_)
69  {
70  sink->flush();
71  }
72  }
73 
74  void set_pattern_(const std::string &pattern) override
75  {
76  set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern));
77  }
78 
79  void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) override
80  {
81  base_sink<Mutex>::formatter_ = std::move(sink_formatter);
82  for (auto &sink : sinks_)
83  {
85  }
86  }
87  std::vector<std::shared_ptr<sink>> sinks_;
88 };
89 
92 
93 } // namespace sinks
94 } // namespace spdlog
spdlog::sinks::sink
Definition: sink.h:14
spdlog::details::os::remove
int remove(const filename_t &filename) noexcept
Definition: os.h:169
spdlog::sinks::dist_sink
Definition: dist_sink.h:28
spdlog::sinks::dist_sink::set_formatter_
void set_formatter_(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition: dist_sink.h:79
spdlog::sinks::dist_sink::operator=
dist_sink & operator=(const dist_sink &)=delete
base_sink.h
spdlog::sinks::sink::sink
sink()=default
spdlog::sinks::dist_sink::set_sinks
void set_sinks(std::vector< std::shared_ptr< sink >> sinks)
Definition: dist_sink.h:47
spdlog::sinks::dist_sink::set_pattern_
void set_pattern_(const std::string &pattern) override
Definition: dist_sink.h:74
null_mutex.h
spdlog::sinks::sink::flush
virtual void flush()=0
spdlog::sinks::dist_sink::sinks_
std::vector< std::shared_ptr< sink > > sinks_
Definition: dist_sink.h:87
spdlog
Definition: async.h:27
spdlog::sinks::base_sink
Definition: base_sink.h:22
spdlog::sinks::dist_sink::dist_sink
dist_sink()=default
spdlog.h
spdlog::sinks::sink::log
virtual void log(const details::log_msg &msg)=0
spdlog::sinks::dist_sink::flush_
void flush_() override
Definition: dist_sink.h:66
spdlog::sinks::sink::should_log
bool should_log(level::level_enum msg_level) const
Definition: sink.h:30
spdlog::sinks::dist_sink::remove_sink
void remove_sink(std::shared_ptr< sink > sink)
Definition: dist_sink.h:41
spdlog::details::log_msg::level
level::level_enum level
Definition: log_msg.h:42
spdlog::details::log_msg
Definition: log_msg.h:16
spdlog::sinks::dist_sink::add_sink
void add_sink(std::shared_ptr< sink > sink)
Definition: dist_sink.h:35
spdlog::sinks::dist_sink::sink_it_
void sink_it_(const details::log_msg &msg) override
Definition: dist_sink.h:54
spdlog::sinks::sink::set_formatter
virtual void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter)=0
log_msg.h