Рассмотрим следующую функцию:
void thread()
{
BOOST_LOG_FUNCTION();
while(true) {
// Create log entry
}
}
Если я просто вызываю «thread ()» внутри «main», мои записи в журнале, созданные в «thread ()», выглядят как ожидалось:
[void __cdecl thread(void) (c:\...\maintest.cpp:16)]
Однако, если вы используете «thread ()» внутри функции:
boost::thread t(thread);
соответствующая запись в журнале пуста:
[]
Как я могу это исправить?
Я получил отзыв от автора журнала буста. Чтобы область была доступна в процессе входа в систему, вы должны добавить «Scope» в качестве атрибута. Он сделал это:
logging::core::get()->add_thread_attribute("Scope", attrs::named_scope());
Однако это относится только к текущему потоку, как указано. Если вы используете несколько потоков, вы должны позвонить:
logging::core::get()->add_global_attribute("Scope", attrs::named_scope());
Других решений пока нет …