#pragma once #include namespace fc { class path; struct appender_config { appender_config(const fc::string& n="",const fc::string& t="", variant a=variant()) :name(n),type(t),args(fc::move(a)),enabled(true){} string name; string type; variant args; bool enabled; }; struct logger_config { logger_config(const fc::string& n=""):name(n),enabled(true),additivity(false){} string name; ostring parent; /// if not set, then parents level is used. fc::optional level; bool enabled; /// if any appenders are sepecified, then parent's appenders are not set. bool additivity; std::vector appenders; logger_config& add_appender( const string& s ); }; struct logging_config { static logging_config default_config(); std::vector includes; std::vector appenders; std::vector loggers; }; void configure_logging( const fc::path& log_config ); bool configure_logging( const logging_config& l ); } #include FC_REFLECT( fc::appender_config, (name)(type)(args)(enabled) ) FC_REFLECT( fc::logger_config, (name)(parent)(level)(enabled)(additivity)(appenders) ) FC_REFLECT( fc::logging_config, (includes)(appenders)(loggers) )