【发布时间】:2017-06-02 19:51:51
【问题描述】:
我有以下消息
1)"customer1"," 5","0","".....
2)"customer2"," 5","0",""....
3)"customer3"," 5","0",""...
4)""," 5","0",""
5)""," 5","0",""
我想要实现的是基于双引号中的第一个值我想创建文件夹,然后只在相应的文件夹中写入日志,只要双引号为空,就将这些日志发送到其他文件夹中。通过以下配置,我能够创建文件夹,如(customer1、customer2 和 customer3)。当我在第一个位置(如日志 4 和 5)有空白值时会出现问题。
syslog-ng.conf
filter c1 {match('(^"")' flags("store-matches") type("pcre") value("MESSAGE") );}; 目的地 d1 {file("/opt/data/cef/other/${DAY}${MONTH}${YEAR}_other.log");}; 记录{源(s_udp);过滤器(c1);目的地(d1);};
filter c2 {match('(?${MONTH}${YEAR}_$1.log");}; 日志{源(s_udp);过滤器(c2);目的地(d2);};
第一个过滤器检查第一个双引号是否为空或就像“”一样,并将这些日志写入其他文件夹。问题在于第二个过滤器匹配“”之间的所有内容。因此,如果它具有价值,但如果它是空的,则它工作正常。因此,它将此日志写入 /opt/data/cef 文件夹中名为 03_06_2017.log 的文件中。我不确定它为什么要创建一个单独的文件。
请帮忙。
问候 虚拟机
【问题讨论】:
标签: syslog-ng