-{
- if(boost::iequals(lvl, L"trace"))
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= trace);
- else if(boost::iequals(lvl, L"debug"))
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= debug);
- else if(boost::iequals(lvl, L"info"))
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= info);
- else if(boost::iequals(lvl, L"warning"))
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= warning);
- else if(boost::iequals(lvl, L"error"))
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= error);
- else if(boost::iequals(lvl, L"fatal"))
- boost::log::wcore::get()->set_filter(boost::log::filters::attr<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get()) >= fatal);
+{
+ boost::lock_guard<boost::mutex> lock(get_filter_mutex());
+
+ if (boost::iequals(lvl, L"trace"))
+ get_level() = boost::log::trivial::trace;
+ else if (boost::iequals(lvl, L"debug"))
+ get_level() = boost::log::trivial::debug;
+ else if (boost::iequals(lvl, L"info"))
+ get_level() = boost::log::trivial::info;
+ else if (boost::iequals(lvl, L"warning"))
+ get_level() = boost::log::trivial::warning;
+ else if (boost::iequals(lvl, L"error"))
+ get_level() = boost::log::trivial::error;
+ else if (boost::iequals(lvl, L"fatal"))
+ get_level() = boost::log::trivial::fatal;
+
+ set_log_filter();
+}
+
+void set_log_category(const std::wstring& cat, bool enabled)
+{
+ log_category category_to_set;
+
+ if (boost::iequals(cat, L"calltrace"))
+ category_to_set = log_category::calltrace;
+ else if (boost::iequals(cat, L"communication"))
+ category_to_set = log_category::communication;
+ else
+ return; // Ignore
+
+ boost::lock_guard<boost::mutex> lock(get_filter_mutex());
+ auto& disabled_categories = get_disabled_categories();
+
+ if (enabled)
+ disabled_categories &= ~category_to_set;
+ else
+ disabled_categories |= category_to_set;
+
+ set_log_filter();
+}
+
+void print_child(
+ boost::log::trivial::severity_level level,
+ const std::wstring& indent,
+ const std::wstring& elem,
+ const boost::property_tree::wptree& tree)
+{
+ auto& data = tree.data();
+
+ if (!data.empty())
+ BOOST_LOG_STREAM_WITH_PARAMS(log::logger::get(), (boost::log::keywords::severity = level)) << indent << elem << L" " << replace_nonprintable_copy(data, L'?');
+ else if (tree.size() == 0)
+ BOOST_LOG_STREAM_WITH_PARAMS(log::logger::get(), (boost::log::keywords::severity = level)) << indent << elem;
+
+ for (auto& child : tree)
+ print_child(level, indent + (elem.empty() ? L"" : elem + L"."), child.first, child.second);
+}
+
+const char* remove_source_prefix(const char* file)
+{
+ auto found = boost::ifind_first(file, get_source_prefix().c_str());
+
+ if (found)
+ return found.end();
+ else
+ return file;