2012-04-23 105 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