繁体   English   中英

设置Boost记录器的线程名称

[英]Set thread name for boost logger

我试图将可读名称设置为Boost logger的线程,而不是十六进制线程ID。 这是现在的样子:

sink->set_formatter(
boost::log::expressions::stream << std::setw(5) << 
boost::log::expressions::attr <unsigned int>("LineID")
<< " [" << boost::log::expressions::format_date_time <boost::posix_time::ptime>("TimeStamp", "%H:%M:%S.%f")
<< "] <" << boost::log::expressions::attr <Severity_Level>("Severity") 
<< "> (" << boost::log::expressions::attr <boost::log::attributes::current_thread_id::value_type> ("ThreadID")
<< ") " << boost::log::expressions::smessage);

我的第一个想法是制作地图容器或以某种方式使用pthread_setname_np。 但是问题是如何将其插入到boost日志记录结构中。 有什么办法可以正确地做到这一点?

您可以使用线程名称添加特定于线程的属性。

BOOST_LOG_ATTRIBUTE_KEYWORD(a_thread_name, "ThreadName", std::string)

void thread_entry()
{
    boost::log::core::get()->add_thread_attribute("ThreadName",
        boost::log::attributes::constant< std::string >("My thread name"));

    // Your thread logic follows
}

这通常是在您的线程启动功能中完成的。

您可以像其他任何属性一样在过滤器和格式化程序中使用此属性。 例如:

sink->set_formatter(
    boost::log::expressions::stream << std::setw(5) << 
    boost::log::expressions::attr <unsigned int>("LineID")
    << " [" << boost::log::expressions::format_date_time <boost::posix_time::ptime>("TimeStamp", "%H:%M:%S.%f")
    << "] <" << boost::log::expressions::attr <Severity_Level>("Severity") 
    << "> (" << boost::log::expressions::attr <boost::log::attributes::current_thread_id::value_type> ("ThreadID")
    << ", " << a_thread_name
    << ") " << boost::log::expressions::smessage);

您可以从文档中了解有关线程特定属性属性关键字constant属性的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM