pattern_layout.cxx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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/log_manager.h"
  10. #include "logger/properties.h"
  11. #include "pattern_layout.h"
  12. using namespace logging;
  13. struct pattern_layout : public layout {
  14. static std::shared_ptr<layout> create(properties const &);
  15. pattern_layout(properties const & props);
  16. void format(std::ostream & os, logpacket const & pkt) const override;
  17. std::string header() const override { return header_; }
  18. std::string footer() const override { return footer_; }
  19. class format formatter;
  20. std::string header_;
  21. std::string footer_;
  22. };
  23. using namespace logging::property;
  24. properties const DEFAULT_PATTERN_LAYOUT{_obj({
  25. {"charset", _v("en_US.UTF-8")},
  26. {"pattern", {}},
  27. {"patternSelector", {}},
  28. {"replace", _v("")},
  29. {"header", _v("")},
  30. {"footer", _v("")},
  31. {"disableAnsi", _v(false)},
  32. {"noConsoleNoAnsi", _v(false)}
  33. })};
  34. std::shared_ptr<layout> pattern_layout::create(properties const & props) {
  35. properties const actual = DEFAULT_PATTERN_LAYOUT.mergedWith(props);
  36. return std::make_shared<pattern_layout>(actual);
  37. }
  38. pattern_layout::pattern_layout(properties const & props)
  39. : formatter(format::parse_format_string(props["pattern"])),
  40. header_(props["header"]),
  41. footer_(props["footer"])
  42. {
  43. }
  44. void pattern_layout::format(std::ostream & os, logpacket const & pkt) const {
  45. os << formatter.process(pkt);
  46. }
  47. namespace {
  48. bool _ = layouts::instance().bind("PatternLayout", pattern_layout::create);
  49. }