/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”的行。您可以看到我过滤掉了mail
、authpriv
和的日志cron
。据我所知,、mail
和authpriv
是cron
syslog 的预定义功能。
我的问题是:
我编写了一个名为“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); };