|
|
@@ -13,7 +13,9 @@
|
|
|
#include "../../../paradigm/declarative/expect/include/expect/expect.hpp"
|
|
|
#include "../../../types/resource_factory/include/resource_factory/prototype_factory.hpp"
|
|
|
|
|
|
+#include "common.h"
|
|
|
#include "logger/c_logger.h"
|
|
|
+#include "logger/detail/appender.h"
|
|
|
#include "logger/exception.h"
|
|
|
#include "logger/logger.h"
|
|
|
#include "logger/properties.h"
|
|
|
@@ -43,10 +45,10 @@ manager_impl::get_logger(properties const & props) {
|
|
|
auto out = std::make_shared<logger_impl>();
|
|
|
if (props.type == properties::OBJECT) {
|
|
|
// TODO include settings on the parent
|
|
|
- out->impls_.push_back(appenders.at(props["ref"]));
|
|
|
+ out->impls.push_back(appenders.at(props["ref"]));
|
|
|
} else if (props.type == properties::ARRAY) {
|
|
|
for (auto & part : props.array) {
|
|
|
- out->impls_.push_back(appenders.at(part["ref"]));
|
|
|
+ out->impls.push_back(appenders.at(part["ref"]));
|
|
|
}
|
|
|
} else {
|
|
|
throw invalid_property_type{"appenders cannot be a STRING"};
|
|
|
@@ -73,6 +75,13 @@ static p_layout load_layout(std::string const & source,
|
|
|
return layouts::instance().get("default", {});
|
|
|
}
|
|
|
|
|
|
+template <typename T>
|
|
|
+void inject_log_level(properties const & props, T & val) {
|
|
|
+ if (props.obj.count("level")) {
|
|
|
+ val.min_log_level = level_from_string(props["level"]);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void manager_impl::configure_appenders(properties const & props) {
|
|
|
// TODO: Load logger_impl here
|
|
|
// TODO: Support multiple File loggers, etc.
|
|
|
@@ -80,6 +89,7 @@ void manager_impl::configure_appenders(properties const & props) {
|
|
|
for (auto & app : props["appenders"].obj) {
|
|
|
auto pair = std::make_pair(load_appender(app.first, app.second),
|
|
|
load_layout(app.first, app.second));
|
|
|
+ inject_log_level(app.second, *pair.first);
|
|
|
appenders.emplace(app.first, pair);
|
|
|
}
|
|
|
}
|
|
|
@@ -87,9 +97,13 @@ void manager_impl::configure_appenders(properties const & props) {
|
|
|
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"]));
|
|
|
+ auto plog = get_logger(log.second["appenders"]);
|
|
|
+ inject_log_level(log.second, *plog);
|
|
|
+ loggers.emplace(log.first, plog);
|
|
|
+ }
|
|
|
+ if (loggers.count("root")) {
|
|
|
+ default_logger = loggers["root"];
|
|
|
}
|
|
|
- default_logger = get_logger(props["loggers"]["root"]["appenders"]);
|
|
|
}
|
|
|
|
|
|
manager::manager() : pimpl_(new manager_impl) {}
|