// // console_logger.cxx // logging // // Created by Sam Jaffe on 4/1/19. // #include #include "expect/expect.hpp" #include "resource_factory/prototype_factory.hpp" #include "logger/detail/appender.h" #include "logger/detail/layout.h" #include "logger/log_manager.h" #include "logger/properties.h" using namespace logging; class console_appender : public appender { public: static std::shared_ptr create(properties const& props); explicit console_appender(std::ostream& os); void write(logpacket const & pkt) override; void flush() override; private: std::ostream& out_; }; std::shared_ptr console_appender::create(properties const& props) { const std::string target = props["target"]; if (target == "SYSTEM_OUT") { return std::make_shared(std::cout); } else if (target == "SYSTEM_ERR") { return std::make_shared(std::cerr); } else { throw std::logic_error{target + " is not a valid console"}; } } console_appender::console_appender(std::ostream& os) : out_(os) {} void console_appender::write(logpacket const & pkt) { layout->format(out_, pkt); } void console_appender::flush() { out_.flush(); } namespace { bool _ = appenders::instance().bind("Console", console_appender::create); }