mirror of
https://github.com/gabime/spdlog.git
synced 2025-05-08 15:23:52 +00:00
dist sink cleanup
This commit is contained in:
parent
efc8de6d64
commit
c4298a989e
@ -12,9 +12,10 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
// Distribution sink (mux). Stores a vector of sinks which get called when log is called
|
||||||
|
|
||||||
namespace spdlog
|
namespace spdlog
|
||||||
{
|
{
|
||||||
namespace sinks
|
namespace sinks
|
||||||
@ -29,40 +30,33 @@ public:
|
|||||||
virtual ~dist_sink() = default;
|
virtual ~dist_sink() = default;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
std::vector<std::shared_ptr<sink>> _sinks;
|
||||||
|
|
||||||
void _sink_it(const details::log_msg& msg) override
|
void _sink_it(const details::log_msg& msg) override
|
||||||
{
|
{
|
||||||
for (auto iter = _sinks.begin(); iter != _sinks.end(); iter++)
|
for (auto &sink : _sinks)
|
||||||
(*iter)->log(msg);
|
sink->log(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::shared_ptr<sink>> _sinks;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void flush() override
|
void flush() override
|
||||||
{
|
{
|
||||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::_mutex);
|
std::lock_guard<Mutex> lock(_mutex);
|
||||||
for (auto iter = _sinks.begin(); iter != _sinks.end(); iter++)
|
for (auto &sink : _sinks)
|
||||||
(*iter)->flush();
|
sink->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_sink(std::shared_ptr<sink> sink)
|
void add_sink(std::shared_ptr<sink> sink)
|
||||||
{
|
{
|
||||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::_mutex);
|
std::lock_guard<Mutex> lock(_mutex);
|
||||||
if (sink &&
|
_sinks.push_back(sink);
|
||||||
_sinks.end() == std::find(_sinks.begin(), _sinks.end(), sink))
|
|
||||||
{
|
|
||||||
_sinks.push_back(sink);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void remove_sink(std::shared_ptr<sink> sink)
|
void remove_sink(std::shared_ptr<sink> sink)
|
||||||
{
|
{
|
||||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::_mutex);
|
std::lock_guard<Mutex> lock(_mutex);
|
||||||
auto pos = std::find(_sinks.begin(), _sinks.end(), sink);
|
_sinks.erase(std::remove(_sinks.begin(), _sinks.end(), sink), _sinks.end());
|
||||||
if (pos != _sinks.end())
|
|
||||||
{
|
|
||||||
_sinks.erase(pos);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user