syslog-ng 中的过滤器是如何组合的?

Pet*_*ner 4 logging filter syslog-ng

如果我在 syslog-ng 中有一个条目

log {
  source (src);
  filter (filter1);
  filter (filter2);
  filter (filter3);
  filter (filter4);
  destination (all_log)
 }
Run Code Online (Sandbox Code Playgroud)

而且,sayfilter4是一个非常宽松的过滤器,filter3是一个过滤器,可以根除一些令人讨厌的主机。如果filter2和/或filter1允许那些令人讨厌的主机之一,它会被记录吗?

Pet*_*ner 5

来自 syslog-ng 管理员指南(v 2.0,这是旧的,但您正在使用的)

当日志语句包含多个过滤器语句时,仅当所有过滤器都为消息时,syslog-ng 才会将消息发送到目标。换句话说,过滤器与逻辑 AND 运算符相连。在下面的示例中,没有消息到达目的地,因为过滤器是独占的(客户端的主机名不能同时是 example1 和 example2)。

所以这是有道理的,如果它以任何其他方式工作,它将太复杂且没有记录。因此,您将不得不寻找其他方法来完成您正在尝试做的事情!

一般来说,您希望排除主机的方法是将其not host('HOSTNAME') or (host('HOSTNAME') and level(...) ) 用作过滤器。