#c #boost-log
Вопрос:
Я могу легко создать файл конфигурации для отправки сообщений в консоль, в файл журнала, в DebugView и в журнал событий, но я не узнал, как его настроить, чтобы — в качестве общего файла конфигурации — приложение «A» имело 4 секции приемника, отличающиеся от приложения «B».
- Возможно ли это?
- Как это реализовать? (есть какие-нибудь ссылки?)
Моя основная настройка в основной функции следующая:
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;
}
С уважением,
Томас
Ответ №1:
- Возможно ли это?
Да, хотя и не поддерживается Boost.Выйдите из системы.
- Как это реализовать? (есть какие-нибудь ссылки?)
Вы можете реализовать чтение конфигурационного файла самостоятельно или повторно использовать анализатор конфигурационных файлов в Boost.Log. Например:
std::ifstream logConfiguration(getCwd() "\test-logging.ini");
boost::log::settings unifiedConfig = boost::log::parse_settings(logConfiguration);
Здесь settings
находится контейнер со всеми настройками, проанализированными из файла (см. Документацию Здесь и здесь).
После анализа файла вам нужно будет создать отфильтрованный контейнер настроек, соответствующий каждому конкретному приложению. Как вы это сделаете, зависит от формата файла унифицированных настроек. Например, если каждая из настроек вашего приложения хранится в отдельном подразделе единой конфигурации, это может быть так просто:
boost::property_tree::ptree constamp; unifiedPtree = unifiedConfig.property_tree();
boost::optional<boost::property_tree::ptree constamp;> ptreeA =
unifiedPtree.get_child_optional("A");
if (ptreeA) {
// We have some settings for application A
boost::log::settings configA(*ptreeA);
// ...
}
Если у вас более сложный формат единой конфигурации, вам может потребоваться выполнить итерацию по ptree
узлам, чтобы отфильтровать параметры, относящиеся к различным приложениям. См. Повышение.Документация по дереву свойств для получения более подробной информации.
Наконец, когда вы создали контейнер настроек для конкретного приложения, вы можете вызвать init_from_settings
Boost.Log:
boost::log::init_from_settings(configA);