过滤 syslog-ng 中的设施

过滤 syslog-ng 中的设施

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

源 s_sys {文件(“/ proc / kmsg” log_prefix(“内核:”));unix-stream(“ / dev / log”);内部();#udp(ip(0.0.0.0)端口(514));};

目标 d_mesg { 文件(“/tmp/log/debug.log”); };

过滤器 f_filter2 { 级别(info..emerg)而不是设施(mail,authpriv,cron); };

日志 { 源(s_sys); 过滤器(f_filter2); 目的地(d_mesg); };

我想请您注意包含“filter”的行。您可以看到我过滤掉了mailauthpriv和的日志cron。据我所知,、mailauthprivcronsyslog 的预定义功能。

我的问题是:

我编写了一个名为“pm”的守护进程,它也使用 syslog API 进行日志记录。现在,我的守护进程记录的任何内容都会进入文件,/tmp/log/debug.log如上所示。我想过滤掉“pm”的日志,使其不进入/tmp/log/debug.log。为了更清楚起见,我希望有这样的过滤器

过滤器 f_filter2 { 级别(info..emerg)而不是设施(mail,authpriv,cron,pm); };

请注意:f_filter2 与上面相比有区别。

可以这样做吗?如何防止pm日志进入/tmp/log/debug.log

答案1

我得到了答案。

我们可以使用 filter 关键字创建过滤器:

filter <filtername> { expression; };

其中表达式是一个简单的布尔表达式。您可以使用“and”、“or”和“not”来连接内置函数。函数可以是以下之一:

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

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

  • program(regexp to match program name)

  • 主机(匹配程序名称的正则表达式)

  • 匹配(匹配程序名称的正则表达式)

因此,如果我们想将自己的程序(例如“pm”)添加到过滤器中,请像这样使用:

过滤器 f_filter2 { 级别(info..emerg)而不是设施(mail,authpriv,cron)和程序(pm); };

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

过滤器 f_filter2 { 级别(info..emerg)而不是设施(mail,authpriv,cron)而不是程序(pm); };

相关内容