在syslog-ng中过滤一个设施

以下是我的/etc/syslog-ng/syslog-ng.conf与login到文件debug.log相关的一些内容

source s_sys {file(“/ proc / kmsg”log_prefix(“kernel:”)); unix-stream(“/ dev / log”); 内部(); #udp(ip(0.0.0.0)port(514)); };

destination d_mesg {file(“/ tmp / log / debug.log”); };

filterf_filter2 {级别(info..emerg),而不是设施(邮件,authpriv,cron); };

log {source(s_sys); 滤波器(f_filter2); 目的地(d_mesg); };

我想把你的注意力放在包含“filter”的行上。 在那里你可以看到我从mailauthprivcron筛选出日志。 据我所知, mailauthprivcron是syslog的预定义工具。

我的查询是:

我写了一个名为“pm”的守护进程,它也使用syslog API进行日志logging。 现在无论我的守护进程日志如何,进入文件/tmp/log/debug.log如上所见。 我想从/tmp/log/debug.log过滤掉“pm”的日志。 为了更清楚我想有像filter

filter f_filter2 {level(info..emerg)而不是facility(mail,authpriv,cron,pm); };

请注意:f_filter2与上面相比有所不同。

是否有可能做到这一点 ? 我怎样才能防止pm日志进入/tmp/log/debug.log

我得到了答案。

我们可以使用filter关键字创buildfilter:

filter <filtername> { expression; };

expression式是一个简单的布尔expression式。 您可以使用“和”,“或”和“不”来连接内置函数。 函数可以是以下之一:

  • 设施(逗号分隔设施名称列表)

  • 级别(逗号分隔的优先级列表或以“..”分隔的范围)

  • program(regexp to match program name)

  • 主机(正则expression式匹配程序名)

  • 匹配(正则expression式匹配程序名)

所以,如果我们想要添加自己的程序,例如“pm”,就可以像这样使用它:

过滤f_filter2 {level(info..emerg)而不是facility(mail,authpriv,cron)和program(pm); };

如果我们想过滤掉“pm”的日志消息,使用如下filter:

filter f_filter2 {level(info..emerg)而不是facility(mail,authpriv,cron)而不是program(pm); };