Фильтровать по области в 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
   ...
}

Я надеюсь, что это будет работать для вас:)

Другие вопросы по тегам