boost::log (boost logging): BOOST_LOG_FUNCTION работает только в основном потоке
Рассмотрим следующую функцию:
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);
соответствующая запись в журнале пуста:
[]
Как я могу это исправить?
1 ответ
Решение
Я получил отзыв от автора журнала буста. Чтобы область была доступна в процессе входа в систему, вы должны добавить "Scope" в качестве атрибута. Он сделал это:
logging::core::get()->add_thread_attribute("Scope", attrs::named_scope());
Однако это относится только к текущему потоку, как указано. Если вы используете несколько потоков, вы должны позвонить:
logging::core::get()->add_global_attribute("Scope", attrs::named_scope());