// // format.hpp // logger // // Created by Sam Jaffe on 8/21/16. // #pragma once #include #include #include #include #include "logger_fwd.h" #include "wrapper_object.h" namespace logging { class format { public: enum class token_id { DATE, PRIORITY, CATEGORY, MESSAGE, STRING, NEWLINE }; using generator = std::function; static format parse_format_string(std::string const &); void process(logpacket const & pkt, std::ostream & os) const; std::string process(logpacket const & pkt) const; private: std::vector gen; }; using string_generator = std::function; string_generator get_date_formatter(std::string fmt); class message { public: message() = default; message(char const * fmt) : format_code(fmt) {} template message(std::string const & fmt, Args && ...args); std::string str() const; std::string json() const; private: std::string format_code; std::vector objects; }; template message::message(std::string const & fmt, Args && ...args) : format_code(fmt), objects({detail::object(args)...}) { } }