如何按标签过滤 rsyslog 消息

mis*_*uge 13 bash logging syslog rsyslog

我有几个应用程序和脚本,我想将输出重定向到自定义文件。

我使用这些应用程序启动

command | logger -t TAG
Run Code Online (Sandbox Code Playgroud)

我想根据它们的标签过滤这些消息并将它们重定向到不同的文件。我不想使用 bash 重定向,因为这些应用程序主要是长时间运行的进程并且需要适当的日志轮换。

我尝试在 /etc/rsyslog.d/60-myfilter.conf 中添加自定义过滤器;

if $syslogtag == 'giomanager' then /var/log/giomanager.log
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?根据标签进行过滤的正确方法是什么,或者是否有更好的选择来获得类似的结果?

use*_*517 25

我没有使用过 if 那样(或 syslogtag),但我使用过:<blah>,<condition> ...(特别是 :msg、contains、...)但尝试

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
Run Code Online (Sandbox Code Playgroud)

& stop(或者,& ~在rsyslog现在V6和老年人(如上RHEL6))导致否则记录将被其他规则来进一步解析后丢弃匹配消息。


更新:经过测试和

syslogtag 包含一个:并且应该包含在""而不是''

  • 非常感谢,我现在将我的日志重定向到`/var/log/giomanager.log` **但**它仍然写入/var/log/syslog。您知道为什么会发生这种情况以及如何预防吗? (2认同)

mis*_*uge 7

所以我终于找到了解决我的问题的方法。

非常感谢@lain 带路。

如前所述的解决方案是在标签名称中包含一个“:”。此外,这很重要,文件名必须50-default.conf按字母顺序排在前面。

要继续,请将以下内容放入30-giomanager.conf

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
Run Code Online (Sandbox Code Playgroud)

请注意,/var/log/giomanager.log“syslog”用户应该可以写入该文件。