// // pattern_layout.cxx // logging // // Created by Sam Jaffe on 4/4/19. // #include "resource_factory/prototype_factory.hpp" #include "logger/detail/layout.h" #include "logger/log_manager.h" #include "logger/properties.h" #include "pattern_layout.h" using namespace logging; struct pattern_layout : public layout { static std::shared_ptr create(properties const &); pattern_layout(properties const & props); void format(std::ostream & os, logpacket const & pkt) const override; std::string header() const override { return header_; } std::string footer() const override { return footer_; } class format formatter; std::string header_; std::string footer_; }; using namespace logging::property; properties const DEFAULT_PATTERN_LAYOUT{_obj({ {"charset", _v("en_US.UTF-8")}, {"pattern", {}}, {"patternSelector", {}}, {"replace", _v("")}, {"header", _v("")}, {"footer", _v("")}, {"disableAnsi", _v(false)}, {"noConsoleNoAnsi", _v(false)} })}; std::shared_ptr pattern_layout::create(properties const & props) { properties const actual = DEFAULT_PATTERN_LAYOUT.mergedWith(props); return std::make_shared(actual); } pattern_layout::pattern_layout(properties const & props) : formatter(format::parse_format_string(props["pattern"])), header_(props["header"]), footer_(props["footer"]) { } void pattern_layout::format(std::ostream & os, logpacket const & pkt) const { os << formatter.process(pkt); } namespace { bool _ = layouts::instance().bind("PatternLayout", pattern_layout::create); }