pattern_layout.cxx 987 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. //
  2. // pattern_layout.cxx
  3. // logging
  4. //
  5. // Created by Sam Jaffe on 4/4/19.
  6. //
  7. #include "resource_factory/prototype_factory.hpp"
  8. #include "logger/detail/layout.h"
  9. #include "logger/format.h"
  10. #include "logger/log_manager.h"
  11. #include "logger/properties.h"
  12. using namespace logging;
  13. struct pattern_layout : public layout {
  14. static std::shared_ptr<layout> create(properties const &);
  15. pattern_layout(std::string const & fmt);
  16. void format(std::ostream & os, logpacket const & pkt) const override;
  17. class format formatter;
  18. };
  19. std::shared_ptr<layout> pattern_layout::create(properties const & props) {
  20. return std::make_shared<pattern_layout>(props["pattern"]);
  21. }
  22. pattern_layout::pattern_layout(std::string const & fmt) :
  23. formatter(format::parse_format_string(fmt)) {}
  24. void pattern_layout::format(std::ostream & os, logpacket const & pkt) const {
  25. os << formatter.process(pkt);
  26. }
  27. namespace {
  28. bool _ = layouts::instance().bind("PatternLayout", pattern_layout::create);
  29. }