2012-04-23 104 views
0

我正在使用Boost.Log庫。我創建了一個named_scope屬性,用於跟蹤我在代碼中的位置。 (我用BOOST_LOG_NAMED_SCOPE("...")手動指定它。)是否可以創建一個篩選器(使用set_filter)來僅選擇特定範圍的消息?按照範圍在Boost.Log中篩選

回答

2

請參閱安德烈的最新&最大記錄doc

範圍堆棧實現爲特定線程全局存儲 內部。 named_scope屬性允許將此堆棧掛接到日誌記錄管道中。此屬性生成值爲 的嵌套類型named_scope :: scope_stack,它是作用域堆棧的實例 。該屬性可以通過以下方式註冊:

logging :: core :: get() - > add_global_attribute(「Scope」, attrs :: named_scope());

然後,你應該配置前端水槽過濾器鎖存只是你的興趣標籤(在過濾器拉姆達或您的自定義過濾器傳遞給set_filter(),您可以使用以下,以提取範圍名,假設U帶MBCS工作)

typedef attrs::basic_named_scope<char>::value_type scope_stack;  
logging::value_extractor<char, scope_stack> S("Scope"); 
scope_stack s = *S(rec); 
if (s.empty() == false) 
{ 
    const attrs::basic_named_scope_entry<char>& e = s.back(); 
    // Filter by e.scope_name 
    ... 
} 

我希望它會爲你工作:)

+0

謝謝你的指針和解釋。去年我已經從Boost.Log移開。在加入Boost之前,維護起來非常困難。但如果我切換回來,這將非常有用。 – foxcub 2013-03-12 15:29:55