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

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

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

log {
  source (src);
  filter (filter1);
  filter (filter2);
  filter (filter3);
  filter (filter4);
  destination (all_log)
 }

并且,假设filter4是一个非常宽松的过滤器,并且filter3是一个用于消除一些令人讨厌的主机的过滤器。如果filter2和/或filter1允许其中一个令人讨厌的主机,它会被记录下来吗?

答案1

来自 syslog-ng 管理员指南(v 2.0,虽然比较旧,但您仍在使用)

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

所以这是有道理的,如果以其他方式工作,就会太复杂,而且没有文档记录。所以你必须找到其他方法来完成你想做的事情!

看起来,一般来说,您想要排除主机的方式是使用not host('HOSTNAME') or (host('HOSTNAME') and level(...) ) 它作为过滤器。

相关内容