使boost::log::core线程成为本地线程

make boost::log::core thread local

本文关键字:线程 core boost log      更新时间:2023-10-16

我在多线程项目中使用boost.log,但我不需要线程安全的版本记录器,因为我已经使代码以线程安全的方式运行。

如果使用非线程安全记录器,我需要使记录器对象为thread_local:每个线程都有自己的记录器对象。但该对象隐藏在boost.log的API后面:要创建记录器对象,用户不能将该对象定义为type obj;。它的创建是由BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULTIlogging::core::get()等宏完成的。我不能只写:

thread_local boost::core::logger logger_obj;

如何做到这一点?

是的,您可以在线程本地存储中创建记录器,几乎与您所写的完全一样:

thread_local boost::log::sources::logger logger_obj;

但是,日志核心不能成为线程本地的,因为它包含对接收器的引用,并且由所有线程的所有记录器同时使用。