26 #ifndef INCLUDED_LogSinks_h_GUID_C582966D_EA04_42D2_83FF_19483537D704
27 #define INCLUDED_LogSinks_h_GUID_C582966D_EA04_42D2_83FF_19483537D704
33 #if defined(OSVR_LINUX) || defined(OSVR_MACOSX)
34 #define OSVR_GET_ANSICOLOR_SINK
35 #elif defined(OSVR_WINDOWS)
36 #define OSVR_GET_WINCOLOR_SINK
40 #include <spdlog/sinks/ostream_sink.h>
41 #ifdef OSVR_GET_ANSICOLOR_SINK
42 #include <spdlog/sinks/ansicolor_sink.h>
44 #ifdef OSVR_GET_WINCOLOR_SINK
45 #include <spdlog/sinks/wincolor_sink.h>
47 #include <spdlog/common.h>
48 #include <spdlog/sinks/base_sink.h>
49 #include <spdlog/sinks/android_sink.h>
50 #include <spdlog/spdlog.h>
66 template <
typename Mutex>
67 class stdout_sink :
public ::spdlog::sinks::ostream_sink<Mutex> {
70 : ::spdlog::sinks::ostream_sink<Mutex>(std::cout,
true) {
83 template <
typename Mutex>
84 class stderr_sink :
public ::spdlog::sinks::ostream_sink<Mutex> {
87 : ::spdlog::sinks::ostream_sink<Mutex>(std::cerr,
true) {
102 spdlog::level::level_enum filter_level)
103 : sink_(
std::move(wrapped_sink)), level_(filter_level) {}
109 void set_level(spdlog::level::level_enum filter_level) {
110 level_ = filter_level;
116 void log(
const spdlog::details::log_msg &msg)
override {
117 if (msg.level < level_) {
124 void flush()
override { sink_->flush(); }
127 spdlog::sink_ptr sink_;
128 spdlog::level::level_enum level_;
131 static inline spdlog::sink_ptr getUnfilteredConsoleSink() {
133 auto console_out = spdlog::sinks::stderr_sink_mt::instance();
134 #if defined(OSVR_GET_ANSICOLOR_SINK)
135 auto color_sink = std::make_shared<spdlog::sinks::ansicolor_sink>(
138 #elif defined(OSVR_GET_WINCOLOR_SINK)
139 auto color_sink = std::make_shared<spdlog::sinks::wincolor_stderr_sink_mt>();
148 static inline spdlog::sink_ptr getDefaultUnfilteredSink() {
149 #if defined(OSVR_ANDROID)
152 std::make_shared<spdlog::sinks::android_sink>(
156 return getUnfilteredConsoleSink();
160 static inline std::shared_ptr<filter_sink>
161 getDefaultFilteredSink(spdlog::level::level_enum filter_level) {
162 return std::make_shared<filter_sink>(getDefaultUnfilteredSink(),
170 #endif // INCLUDED_LogSinks_h_GUID_C582966D_EA04_42D2_83FF_19483537D704
A sink which sends its output to std::cerr. This sink is a drop-in replacement for spdlog::stderr_sin...
void set_level(spdlog::level::level_enum filter_level)
filter_sink(spdlog::sink_ptr &&wrapped_sink, spdlog::level::level_enum filter_level)
void log(const spdlog::details::log_msg &msg) override
A sink which sends its output to std::cout. This sink is a drop-in replacement for spdlog::stdout_sin...
void flush() override
Obligatory implementation, just passed through.