我的模板配置如下。
template (name="macfilter" type="string" string="/home/pi/nas/f/remotelogs/%programname:R,ERE,0,FIELD:(([0-9A-fa-f][0-9A-fa-f]: ?[0-9A-fa-f][0-9A-fa-f]: ?[0-9A-fa-f][0-9A-fa-f]: ?[0-9A-fa-f][0-9A-fa-f]: ?[0-9A-fa-f][0-9A-fa-f]: ?[0-9A-fa-f][0-9A-fa-f])|([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]))--end%/%$now%.log")
*.* ?macfilter
我的日志文件以多种方式进入,但只有一种似乎有问题。
该日志运行良好,它转到 /home/pi/nas/f/0004f28210ae/date.log
2023-04-11T13:14:05-05:00 192.168.1.251 0004f28210ae|0411131405|clist|4|00|dbCfg: :getServerDir:Unknown dbCfg type
这不行。它转到 /home/pi/nas/f/2023-05-19.log
2023-04-06T01:00:03-05:00 075-137-050-066.res.spectrum.com [80: 5e:0c:9f:11:dc] sua [1026.2005]: FSM <6+info > [003] allocating NICT context
我认为这与日志中的空格有关,我已经在正则表达式中为其分配了空格,并且正则表达式根据 rsyslog 正则表达式测试器工作,但我没有得到我尝试的文件路径。
然而,当我尝试以任何方式、任何形式修剪模板字符串时,它会告诉我模板中的额外内容,而忽略这些额外内容。
有什么想法吗?我是否以最简单的方式解决了这个问题?
编辑:
下面的两条评论是我如何修复它。
答案1
if ($rawmsg contains "64167f" or $rawmsg contains "0004f2" or $rawmsg contains "9cadef" or $rawmsg contains "482567" or $rawmsg contains "80:") then {
if ($rawmsg contains "80:") then {
set $!nameval0 = replace($rawmsg, " ", "");
set $!nameval = replace($!nameval0, ":", "");
} else {
set $!nameval = $app-name;
}
} else {
set $!nameval = $app-name;
}
template (name="macfilter" type="string" string="/home/pi/nas/f/remotelogs/%$!nameval:R,ERE,0,FIELD:([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f])--end%/%$now%.log")
*.* -?macfilter