// // logger_impl.cxx // logging // // Created by Sam Jaffe on 4/3/19. // #include "logger_impl.h" #include "common.h" #include "logger/detail/appender.h" #include "logger/detail/layout.h" #include "logger/logpacket.h" #include "logger/properties.h" using namespace logging; simple_appender::simple_appender(properties const & props) : threshold(level_from_string(props["threshold"])) {} void simple_appender::write(logpacket const & packet, layout & withLayout) { withLayout.format(stream(), packet); } bool simple_appender::should_log(level ll) const { return ll >= threshold; } void simple_appender::flush() { stream().flush(); } log_appender::log_appender(p_appender append, p_layout layout) : appender_(append), layout_(layout), has_logged_(false) { appender_->stream() << layout_->header(); } log_appender::~log_appender() { appender_->stream() << layout_->footer(); } void log_appender::write(logpacket const & packet) { if (has_logged_) { appender_->stream() << layout_->separator(); } appender_->write(packet, *layout_); has_logged_ = true; } bool log_appender::should_log(level ll) const { return appender_->should_log(ll); } void log_appender::flush() { appender_->flush(); } bool logger_impl::should_log(level ll) const { return ll >= min_log_level; } void logger_impl::write(logpacket const & pkt) { if (!should_log(pkt.level)) return; for (auto & appender : impls) { if (appender->should_log(pkt.level)) { appender->write(pkt); } } } void logger_impl::flush() { for (auto & appender : impls) { appender->flush(); } }