为什么rsyslog等值过滤器失败?

时间:2019-04-25 03:49:24

标签: syslog rsyslog

我想将rsyslogd可执行文件(守护程序)到文件的所有内容记录下来。

# /etc/rsyslog.conf
if $syslogtag isequal 'rsyslogd' then /tmp/foo.log 
if $syslogtag isequal 'rsyslogd:' then /tmp/foo.log
if $syslogtag isequal ' rsyslogd' then /tmp/foo.log
if $syslogtag isequal ' rsyslogd:' then /tmp/foo.log

在单独的外壳中:

sv down /root/service/rsyslog/
sv up /root/service/rsyslog/
tail -F /tmp/foo.log

结果:bupkus

所以我编辑rsyslog.conf

# /etc/rsyslog.conf
if $syslogtag contains 'rsyslogd' then /tmp/foo.log 

冲洗并重复;在单独的外壳中:

sv down /root/service/rsyslog/
sv up /root/service/rsyslog/
tail -F /tmp/foo.log

Tada:20190424_195027 linuxbox info rsyslogd: [origin software="rsyslogd" swVersion="8.28.0" x-pid="27384" x-info="http://www.rsyslog.com"] start

有什么作用?我不明白为什么使用isequals的尝试失败了。

%syslogtag% 看上去就像是“ rsyslogd”的某种变体,在空格或冒号处都附加了空格-但我认为我已经经历了所有合理的排列,所以为什么isequal比较失败?

1 个答案:

答案 0 :(得分:1)

您需要在配置解析期间查找错误消息(例如,使用rsyslogd -N1),因为您的行将被忽略。 isequal运算符用于以下语法:

:syslogtag, isequal, "rsyslogd:"  ./output1

if..then语法需要==运算符:

if $syslogtag == 'rsyslogd:' then ./output2

contains运算符可同时使用两种语法。