|
|
@@ -30,7 +30,9 @@ using p_logger = std::shared_ptr<logger_impl>;
|
|
|
|
|
|
struct logging::manager_impl {
|
|
|
p_logger get_logger(properties const & props);
|
|
|
-
|
|
|
+ void configure_appenders(properties const & props);
|
|
|
+ void configure_loggers(properties const & props);
|
|
|
+
|
|
|
p_logger default_logger;
|
|
|
std::unordered_map<std::string, std::pair<p_appender, p_layout>> appenders;
|
|
|
std::unordered_map<std::string, p_logger> loggers;
|
|
|
@@ -71,6 +73,25 @@ static p_layout load_layout(std::string const & source,
|
|
|
return layouts::instance().get("default", {});
|
|
|
}
|
|
|
|
|
|
+void manager_impl::configure_appenders(properties const & props) {
|
|
|
+ // TODO: Load logger_impl here
|
|
|
+ // TODO: Support multiple File loggers, etc.
|
|
|
+ expects(props["appenders"].type == properties::OBJECT);
|
|
|
+ for (auto & app : props["appenders"].obj) {
|
|
|
+ auto pair = std::make_pair(load_appender(app.first, app.second),
|
|
|
+ load_layout(app.first, app.second));
|
|
|
+ appenders.emplace(app.first, pair);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void manager_impl::configure_loggers(properties const & props) {
|
|
|
+ expects(props["loggers"].type == properties::OBJECT);
|
|
|
+ for (auto & log : props["loggers"].obj) {
|
|
|
+ loggers.emplace(log.first, get_logger(log.second["appenders"]));
|
|
|
+ }
|
|
|
+ default_logger = get_logger(props["loggers"]["root"]["appenders"]);
|
|
|
+}
|
|
|
+
|
|
|
manager::manager() : pimpl_(new manager_impl) {}
|
|
|
|
|
|
manager::~manager() {}
|
|
|
@@ -92,21 +113,6 @@ c_logger manager::c_get(std::string const & name) {
|
|
|
}
|
|
|
|
|
|
void manager::configure(properties const & props) {
|
|
|
- // TODO: Load logger_impl here
|
|
|
- auto & impls = props["configuration"]["appenders"];
|
|
|
- // TODO: Support multiple File loggers, etc.
|
|
|
- expects(impls.type == properties::OBJECT);
|
|
|
- for (auto & app : impls.obj) {
|
|
|
- auto pair = std::make_pair(load_appender(app.first, app.second),
|
|
|
- load_layout(app.first, app.second));
|
|
|
- pimpl_->appenders.emplace(app.first, pair);
|
|
|
- }
|
|
|
-
|
|
|
- auto & configs = props["configuration"]["loggers"];
|
|
|
- expects(configs.type == properties::OBJECT);
|
|
|
- for (auto & log : configs.obj) {
|
|
|
- auto logimpl = pimpl_->get_logger(log.second["appenders"]);
|
|
|
- pimpl_->loggers.emplace(log.first, logimpl);
|
|
|
- }
|
|
|
- pimpl_->default_logger = pimpl_->get_logger(configs["root"]["appenders"]);
|
|
|
+ pimpl_->configure_appenders(props["configuration"]);
|
|
|
+ pimpl_->configure_loggers(props["configuration"]);
|
|
|
}
|