如何在C++Boost中使用一个共享配置文件,每个应用程序使用一个接收器



我可以很容易地创建一个配置文件,将消息发送到控制台、日志文件、DebugView和Eventlog,但我不知道如何将其配置为共享配置文件-Application;A";具有4个不同于应用";B";。

  1. 这可能吗
  2. 如何实现?(有链接吗?(

我在主功能中的基本设置如下:

std::ifstream logConfiguration(getCwd() + "\test-logging.ini");
try {
boost::log::init_from_stream(logConfiguration);
boost::log::add_common_attributes();
boost::log::core::get()->add_global_attribute("Scope", boost::log::attributes::named_scope());
}
catch (std::exception e) {
MYTRACE(error) << e.what() << std::endl;
return 1;
}

谨致问候,Thomas

  1. 这可能吗

是,但Boost不支持。从框中注销。

  1. 如何实现?(有链接吗?(

您可以自己实现读取配置文件,也可以在Boost中重用配置文件解析器。日志例如:

std::ifstream logConfiguration(getCwd() + "\test-logging.ini");
boost::log::settings unifiedConfig = boost::log::parse_settings(logConfiguration);

这里,settings是一个包含从文件中解析的所有设置的容器(有关文档,请参阅此处和此处(。

解析文件后,您将不得不构建一个与每个特定应用程序相对应的过滤设置容器。如何执行此操作取决于统一设置文件格式。例如,如果您的每个应用程序设置都存储在统一配置的一个单独的子部分中,那么它可能很简单:

boost::property_tree::ptree const& unifiedPtree = unifiedConfig.property_tree();
boost::optional<boost::property_tree::ptree const&> ptreeA =
unifiedPtree.get_child_optional("A");
if (ptreeA) {
// We have some settings for application A
boost::log::settings configA(*ptreeA);
// ...
}

如果您有一个更复杂的统一配置格式,您可能需要在ptree节点上迭代,以筛选出与不同应用程序相关的设置。请参见Boost。有关详细信息,请参阅PropertyTree文档。

最后,当您构建了特定于应用程序的设置容器时,您可以在Boost中调用init_from_settings。日志:

boost::log::init_from_settings(configA);

相关内容

最新更新