26 #ifndef INCLUDED_LogSinks_h_GUID_C582966D_EA04_42D2_83FF_19483537D704 27 #define INCLUDED_LogSinks_h_GUID_C582966D_EA04_42D2_83FF_19483537D704 31 #include <osvr/Util/PlatformConfig.h> 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 Definition: RunLoopManager.h:42
The main namespace for all C++ elements of the framework, internal and external.
Definition: namespace_osvr.dox:3
Definition: TypeSafeIdHash.h:44
A sink which sends its output to std::cerr.
Definition: LogSinks.h:84
void set_level(spdlog::level::level_enum filter_level)
Change our internal level threshold, below which we will not pass messages on to the wrapped sink...
Definition: LogSinks.h:109
filter_sink(spdlog::sink_ptr &&wrapped_sink, spdlog::level::level_enum filter_level)
Construct from a wrapped sink rvalue-ref and a filter level threshold.
Definition: LogSinks.h:101
A decorator around another sink that applies a custom log level filter.
Definition: LogSinks.h:97
void log(const spdlog::details::log_msg &msg) override
This is the guts of the implementation: we check the level against our internal level setting and ear...
Definition: LogSinks.h:116
A sink which sends its output to std::cout.
Definition: LogSinks.h:67
void flush() override
Obligatory implementation, just passed through.
Definition: LogSinks.h:124