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());
Другие вопросы по тегам