C++ 在Boost.Log中按范围过滤

C++ 在Boost.Log中按范围过滤,c++,boost,boost-log,C++,Boost,Boost Log,我在用图书馆。我创建了一个名为_scope的属性,用于跟踪我在代码中的位置。(我用BOOST\u LOG\u NAMED\u SCOPE(“…”)手动指定)是否可以创建一个过滤器(使用set\u filter)来只选择特定范围内的消息?请参阅Andrey最新和最棒的日志: 作用域堆栈实现为特定于线程的全局存储 内部。有一个命名的_scope属性允许挂接 将该堆栈插入日志记录管道。此属性生成值 的实例,该嵌套类型名为\u scope::scope\u stack 范围堆栈。可以通过以下方式注册该属

我在用图书馆。我创建了一个名为_scope的
属性,用于跟踪我在代码中的位置。(我用
BOOST\u LOG\u NAMED\u SCOPE(“…”
)手动指定)是否可以创建一个过滤器(使用
set\u filter
)来只选择特定范围内的消息?

请参阅Andrey最新和最棒的日志:

作用域堆栈实现为特定于线程的全局存储 内部。有一个命名的_scope属性允许挂接 将该堆栈插入日志记录管道。此属性生成值 的实例,该嵌套类型名为\u scope::scope\u stack 范围堆栈。可以通过以下方式注册该属性:

logging::core::get()->添加全局属性(“范围”, attrs::named_scope())

然后,您应该将前端接收器筛选器配置为仅锁定您感兴趣的标记(在筛选器lambda或您传递到set_filter()的自定义筛选器中,您可以使用以下命令来提取作用域名称,假设您使用MBCS)

typedef attrs::basic_named_scope::value_type scope_stack;
日志记录::值_提取器S(“范围”);
范围_堆栈s=*s(rec);
如果(s.empty()==false)
{
const attrs::basic_named_scope_entry&e=s.back();
//按e.scope\u名称筛选
...
}

我希望它对您有用:)

谢谢您的提示和解释。我已经离开Boost了。去年登录。在将其纳入Boost之前,它很难维护。但如果我再切换回来,这将非常有用。
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
   ...
}