在升压日志中组合过滤器

时间:2015-04-03 09:18:56

标签: c++ boost boost-log

我使用提升日志并希望定义组合过滤器。我使用boost::log::init_from_stream从流中读取配置。在单一条件下过滤工作正常。我能做到

Filter = "%Channel% = A"

仅从通道A获取日志条目。我可以

Filter = "%Severity% >= warn"

仅获取严重性为警告或更高级别的日志条目。

问题出现了:我想做像

这样的事情
Filter = "   (%Channel% = A AND %Severity% >= warn)
          OR (%Channel% = B AND %Severity% >= info)"

我无法找到有关此类过滤器组合的任何文档。有没有办法在使用boost::log::init_from_stream时执行此操作?

1 个答案:

答案 0 :(得分:2)

我找到了这个记录语法的文档页面:

  • Filter and formatter parsers

    filter:
        condition { op condition }
    
    op:
        &
        and
        |
        or
    
    condition:
        !condition
        not condition
        (filter)
        %attribute_name%
        %attribute_name% relation operand
    
    relation:
        >
        <
        =
        !=
        >=
        <=
        begins_with
        ends_with
        contains
        matches
    

使用这个,问题中给出的例子可以表示如下:

Filter = "(%Channel% = A & %Severity% >= warn) | (%Channel% = B & %Severity% >= info)"