zoukankan      html  css  js  c++  java
  • Filter Conditions

    选择器字段本身有两个部分组成,一个设备和一个优先级,
    
    通过一个句号(".").
    
    
    两部分都是不区分小写的,也可以指定为十进数,但是不要那么做,你会被警告。
    
    facilities and priorities是在syslog(3)描述。
    
    
    facility 是下面关键字中的一个:auth,authpriv, cron, daemon, kern, lpr, mail, mark, news, security (same as auth), syslog, user, uucp and
    
    local 0 到local 7.
    
    
    关键字security  不应该再被使用,标记为内部使用,因此不能被应用使用。
    
    
    priority 是下面中的一个关键字,升序顺序:debug, info, notice, warning, warn (same as warning), err, error (same as err), crit, alert, emerg, panic (same as emerg). 
    
    关键字error,wrn和panic 是过时的,不再被使用。priority  定义消息的严重性
    
    
    原始的BSD syslogd 行为是 特定的priority  或者更高的所有消息是记录根据给定的动作
    
    除了额外的上面提到的理解下面的扩展:
    
    一个asterisk ("*") 代表所有的 facilities or all priorities, 
    
    
    取决于 它被用在哪里(句号之前或者之后).
    
    
    keyword  none 表示用于没有给定的facility的优先级。
    
    你可以指定多个facilities 使用相同的优先级模式在一个语句使用逗号,
    
    
    多个selectors 可以指定用于一个单独的动作使用,分隔符。
    
    
    基于属性的过滤器:
    
    
    基于属性的过滤器是唯一的对于rsyslogd.
    
    它们允许过滤任何property(属性), 像HOSTNAME,systag和msg.
    
    所有的当前支持的属性的列表可以在属性替换文档中找到(但是记住只有属性,不是替换)
    
    
    基于属性过滤器必须以一个:开始在第一个列,这个告诉rsyslog 它是一个新的filter 类型。
    
    
    冒号必须跟着属性名字,一个逗号,比较表达式的名字来完成,另外的逗号,和然后比对的值。
    
    这个值必须被引号引起。
    
    
    可以是空格和tabs 在逗号之间。
    
    属性名称和比较操作是区分大小写的,因此"msg"工作,当"MSG"是一个无效的属性名
    
    :property, [!]compare-operation, "value"
    
    Compare-Operations:
    
    下面的比较操作当前是支持的:
    
    contains:
    
    检查 如果提供的字符串是包含在属性中, 必须有一个精确的匹配,不支持通配符。
    
    isequal:
    
    
    比较:
    
    
    比较提供的值和属性的内容,那些两个值必须完全相等。
    
    和contain不同的是contains 搜索值在属性值的任何地方,
    
    而所有字符必须相等对于isequal.
    
    因此,isequal 是最重要的用于字段像 syslogtag or FROMHOST,
    
    在哪里你可能知道确切的内容。
    
    startswith:
    
    检查如果值是准确找到在属性值的开始, 例如,如果你搜索"val":
    
    
    :msg, startswith, "val"
    
    
    它会是一个匹配如果msg 包含"值是在这个消息",但是它不会匹配如果msg包含"有值在这个消息里"
    
    (在后面的例子,"contain"会匹配)。注意"startwith" 是比正则表达式快的。
    
    所以一旦实施,它会变的非常高性能 使用"startwith"
    
    
    regex:
    
    比较属性和提供的POSIX BRE正则表达式
    
    你可以使用!在比较操作的前面, 这个操作的结果被否定。
    
    例如,如果 msg contains  “This is an informative message” 下面例子不会匹配:
    
    
    :msg, contains, "error"
    
    
    
    但是这个会匹配:
    
    :msg, !contains, "error"
    
    
    使用~!可以是有用的如果你想要做一些特定的处理,
    
    但是排除一些指定的事件。你可以使用discard action 
    
    
    *.* /var/log/allmsgs-including-informational.log
    :msg, contains, "informational"  ~
    *.* /var/log/allmsgs-but-informational.log
    
    
    
    Value Part  值部分:
    
    值是引号字符串,它支持一些转义字符:
    
    " 引号字符
    
    \ 转义反斜杠
    
    转义字符总是开始一个反斜杠,额外的转义可能被增加。
    
    反斜杠字符必须是被转义
    
    可能的,"msg" 是最突出的属性基于过滤器的使用例子。
    
    它实际上是文本消息。
    
    如果你想要基于一些消息内容过滤 ,可以这么搞
    
    :msg, contains, "ID-4711"
    
    过滤器 会匹配当消息包含字符串 “ID-4711”. 
    
    请注意 比较是大小写敏感的,
    
    因此它不会匹配如果 “id-4711”  会包含在消息里。
    
    
    :msg, regex, "fatal .* error"
    
    
    这个过滤器使用一个POSIX 恒泽表达式。它包含当字符串包含字符"fatal"和"error" 
    
    
    和任何其他(比如: “fatal net error” and “fatal lib error” but not “fatal error”
    
    因为两个空格是需要的通过正则表达式)
    
    
    获取基于属性过滤器有时是具有挑战性的。
    
    为了帮助你用最小的努力,rsyslogd 分割我们的debug信息用于所有基于属性的过滤器在它们的评估
    
    表达型过滤器:
    
    表达式基于过滤器允许过滤任何复杂的表达式,可以包含布尔运算,算术运算和字符串操作。
    
    表达式过滤器会进化到一个完整的配置脚本语言。
    
    不幸的是, 它们的语法会轻微的改变在那个过程中。
    
    因此如果你使用它们,你需要准备改变你的配置文件。
    
    
    表达式基于filter 是通过关键字if 表明,它们有这种格式:
    
    if expr then action-part-of-selector-line
    
    例子:
    
    *.* /var/log/file1 # the traditional way
    if $msg contains 'error' then /var/log/errlog # the expression-based way
    
    现在,你需要指定数字的值如果想要检查facilities and severity.
    
    
    那些可以找到在RFC 5424.
    
    如果你不喜欢那个,你可以使用文本属性。
    
    一定要确保使用正确的,随着表达式支持被增强,这个会改变。
    
    比如,你想要过滤消息在有facility =local0,
    
    以DEVNAME开始和有 error1或者error0 在消息内容里,你可以使用下面的过滤:
    if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and
     ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
    
    请注意上面的必须在一行! 如果你想要存储所有的消息除了那些包含n “error1” or “error0”, 你可以增加一个not:
    
    if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and not ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
    

  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349673.html
Copyright © 2011-2022 走看看