console_appender.cxx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // console_logger.cxx
  3. // logging
  4. //
  5. // Created by Sam Jaffe on 4/1/19.
  6. //
  7. #include <iostream>
  8. #include "expect/expect.hpp"
  9. #include "resource_factory/prototype_factory.hpp"
  10. #include "logger/detail/appender.h"
  11. #include "logger/log_manager.h"
  12. #include "logger/properties.h"
  13. using namespace logging;
  14. class console_appender : public appender {
  15. public:
  16. static std::shared_ptr<appender> create(properties const& props);
  17. explicit console_appender(std::ostream& os);
  18. void write(std::string const & msg) override;
  19. void flush() override;
  20. private:
  21. std::ostream& out_;
  22. };
  23. std::shared_ptr<appender> console_appender::create(properties const& props) {
  24. const std::string target = props["target"];
  25. if (target == "SYSTEM_OUT") {
  26. return std::make_shared<console_appender>(std::cout);
  27. } else if (target == "SYSTEM_ERR") {
  28. return std::make_shared<console_appender>(std::cerr);
  29. } else {
  30. throw std::logic_error{target + " is not a valid console"};
  31. }
  32. }
  33. console_appender::console_appender(std::ostream& os) : out_(os) {}
  34. void console_appender::write(std::string const & msg) {
  35. out_ << msg;
  36. }
  37. void console_appender::flush() {
  38. out_.flush();
  39. }
  40. namespace {
  41. bool _ = appenders::instance().bind("Console", console_appender::create);
  42. }