Фильтровать по области в Boost.Log
Я использую библиотеку Boost.Log. Я создал named_scope
атрибут, который отслеживает, где я нахожусь в коде. (Я указываю это вручную с BOOST_LOG_NAMED_SCOPE("...")
.) Можно ли создать фильтр (используя set_filter
) что бы выделять только сообщения из определенной области?
1 ответ
Пожалуйста, обратитесь к последнему и лучшему документу Андрея:
Стек области видимости реализован как глобальное хранилище для конкретного потока. Существует атрибут named_scope, который позволяет подключить этот стек к конвейеру регистрации. Этот атрибут генерирует значение вложенного типа named_scope::scope_stack, который является экземпляром стека областей. Атрибут может быть зарегистрирован следующим образом:
logging:: core:: get () -> add_global_attribute ("Scope", attrs:: named_scope ());
Затем вы должны настроить фильтр внешнего приемника так, чтобы он фиксировал только интересующие вас теги (в лямбда-фильтре или в пользовательском фильтре, который вы передаете в set_filter(), вы можете использовать следующее для извлечения имени области, предполагая, что вы работаете с MBCS)
typedef attrs::basic_named_scope< char >::value_type scope_stack;
logging::value_extractor<char, scope_stack> S("Scope");
scope_stack s = *S(rec);
if ( s.empty() == false )
{
const attrs::basic_named_scope_entry<char>& e = s.back();
// Filter by e.scope_name
...
}
Я надеюсь, что это будет работать для вас:)