如果我在 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(...) )
它作为过滤器。