0

我正在使用Boost.Log库。我创建了一个named_scope属性来跟踪我在代码中的位置。(我用 手动指定它BOOST_LOG_NAMED_SCOPE("...")。)是否可以创建一个过滤器(使用set_filter)只选择来自特定范围的消息?

4

1 回答 1

2

请参考 Andrey 最新和最棒的日志记录文档

范围堆栈在内部实现为特定于线程的全局存储。有一个 named_scope 属性,允许将此堆栈挂钩到日志记录管道。此属性生成嵌套类型 named_scope::scope_stack 的值,它是范围堆栈的实例。该属性可以通过以下方式注册:

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

然后,您应该配置您的前端接收器过滤器以仅锁定您感兴趣的标签(在过滤器 lambda 或您传递给 set_filter() 的自定义过滤器中,您可以使用以下内容来提取范围名称,假设您工作与 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
   ...
}

我希望它对你有用:)

于 2013-03-11T22:37:36.363 回答