backtrace support api

This commit is contained in:
gabime
2019-08-25 17:24:17 +03:00
parent dd33c16aae
commit a7f7984c4a
8 changed files with 97 additions and 21 deletions

View File

@@ -4,6 +4,7 @@
#pragma once
#include "dist_sink.h"
#include "spdlog/common.h"
#include "spdlog/details/null_mutex.h"
#include "spdlog/details/log_msg_buffer.h"
#include "spdlog/details/circular_q.h"
@@ -22,10 +23,23 @@ template<typename Mutex>
class backtrace_sink : public dist_sink<Mutex>
{
public:
explicit backtrace_sink(size_t n_messages = 16)
: traceback_msgs_{n_messages}
explicit backtrace_sink(spdlog::level::level_enum filter_level, size_t n_messages)
: filter_level_{filter_level}
, traceback_msgs_{n_messages}
{}
void set_filter_level(spdlog::level::level_enum filter_level)
{
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
filter_level_ = filter_level;
}
spdlog::level::level_enum get_filter_level()
{
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
return filter_level_;
}
void dump_backtrace()
{
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
@@ -33,6 +47,7 @@ public:
}
protected:
spdlog::level::level_enum filter_level_;
details::circular_q<details::log_msg_buffer> traceback_msgs_;
// save the messages in a circular queue
@@ -40,7 +55,7 @@ protected:
{
traceback_msgs_.push_back(details::log_msg_buffer(msg));
if (msg.level > level::debug)
if (msg.level >= filter_level_)
{
dist_sink<Mutex>::sink_it_(msg);
}

View File

@@ -45,6 +45,12 @@ public:
sinks_ = std::move(sinks);
}
std::vector<std::shared_ptr<sink>>& sinks()
{
return sinks_;
}
protected:
void sink_it_(const details::log_msg &msg) override
{