X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=inline;f=common%2Flog.cpp;h=3b857caa5c0ae38d87380f78fe2f0de3fb8d0a68;hb=2c57b0ed4ce856419f94e6eb9c4c37e4ec4dd66e;hp=82211663c2e07d82ca1a7e87c818a992f2c37b20;hpb=72b4a9c2536aefa8a21ca80b5d67ba3cbfed51ee;p=casparcg diff --git a/common/log.cpp b/common/log.cpp index 82211663c..3b857caa5 100644 --- a/common/log.cpp +++ b/common/log.cpp @@ -181,6 +181,45 @@ void add_file_sink(const std::wstring& folder) } } +std::shared_ptr add_preformatted_line_sink(std::function formatted_line_sink) +{ + class sink_backend : public boost::log::sinks::basic_formatted_sink_backend + { + std::function formatted_line_sink_; + public: + sink_backend(std::function formatted_line_sink) + : formatted_line_sink_(std::move(formatted_line_sink)) + { + } + + void consume(const boost::log::record_view& rec, const std::string& formatted_message) + { + try + { + formatted_line_sink_(formatted_message); + } + catch (...) + { + std::cerr << "[sink_backend] Error while consuming formatted message: " << formatted_message << std::endl << std::endl; + } + } + }; + + typedef boost::log::sinks::synchronous_sink sink_type; + + auto sink = boost::make_shared(std::move(formatted_line_sink)); + bool print_all_characters = true; + + sink->set_formatter(boost::bind(&my_formatter, print_all_characters, _1, _2)); + + boost::log::core::get()->add_sink(sink); + + return std::shared_ptr(nullptr, [=](void*) + { + boost::log::core::get()->remove_sink(sink); + }); +} + void set_log_level(const std::wstring& lvl) { if (boost::iequals(lvl, L"trace"))