我在我的项目中使用Boost Log,我希望能够在设置文件中过滤我当前对控制台接收器感兴趣的作用域。
我添加了names scope属性,使用:
BOOST_LOG_ATTRIBUTE_KEYWORD(scope_attr, "Scope", boost::log::attributes::named_scope::value_type)
boost::log::core::get()->add_global_attribute("Scope", boost::log::attributes::named_scope());
字符串
在代码中,我使用了BOOST_PROJECT_NAMED_SCOPE宏,并通过boost::log::init_from_stream传递了以下设置:
[Core]
DisableLogging = false
Filter = "%Severity% >= DEBUG"
[Sinks.1]
Destination = Console
Format = "[%Severity%] [%TimeStamp%] [%Scope%] [%Tag%]: %Message%"
Filter = "%Scope% = \"TargetScope\" & %Severity% >= DEBUG"
[Sinks.2]
Destination = TextFile
FileName = textfile.log
AutoFlush = true
Format = "[%Severity%] [%TimeStamp%] [%Scope%] [%Tag%]: %Message%"
型
没有激活过滤器,“Scope”属性工作正常,并正确打印,在作用域之间添加“->”,并且只有目标作用域被打印为“...[TargetScope]..."的日志。但是如果我激活过滤器,什么也不会打印。
默认情况下支持过滤命名作用域?还是应该为过滤器解析系统编写一个扩展?
1条答案
按热度按时间kh212irz1#
docs
必须注意的是,默认情况下,库只支持那些在库构建时已知的属性值类型。用户定义的类型在库中注册之前,将无法在解析的过滤器和格式化程序中正常工作。也可以重写已知类型的格式化规则,包括支持字符串模板中的其他格式参数。更多关于这方面的内容可以在扩展库部分找到。
从Boost日志中,通过命名范围过滤,你可以得到一个过滤器函数(我简化了):
字符串
解析过滤器
在这里,我们必须Extend library settings support。
向过滤器解析器添加对用户定义类型的支持提供了一些步骤。
我选择了自定义(非简单)过滤器工厂,并将其与通用匹配函数相结合,如刚才显示的
my_filter
,名为all
和any
:型
您使用
register_filter_factory
注册它,例如:型
然后我们可以用一些函数进行测试,如
型
的数据
完整列表
Live On Coliru
型