2017-07-20 10 views
0

16進スレッド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使用することでした。しかし、問題はこれをブーストロギング構造に挿入する方法です。これを正しく行う方法はありますか?

答えて

1

スレッド固有の属性にスレッド名を追加できます。

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); 

あなたはドキュメントからthread-specific attributesattribute keywordsconstant attributeについての詳細を学ぶことができます。

+0

ありがとうございました!それがまさに私が必要なものです! – Kirill

+0

ああ!あなたが理解しているように、あなたはログの開発者を増やしているので、もう少し疑問です。私は、プロジェクト内のすべての関数に対してboost_log_functionを名前付きスコープに追加する必要があります。グローバルなものを設定することは可能ですか?または、私はすべての関数にboost_log_function()を設定する必要がありますか? – Kirill

+0

ログに表示するすべての機能またはスコープを明示的にマークする必要があります。コンパイラによって暗黙または自動的に追加されるオプションはありません。あなたのリファクタリング/コーディングサービスに慣れていれば、IDEが役立つかもしれません。 –

関連する問題