rainerscript:如何记录到名为 $programname 子字符串的文件?

rainerscript:如何记录到名为 $programname 子字符串的文件?

如何编写rainerscript规则来记录到名称为 的子字符串的文件$programname

我想要一些符合这个伪规则的东西:

if $programname startswith "foo" then /path/to/<substring of $programname from 4 to end>

另外:有没有办法从$programname写入文件的文本中去除“foo”前缀?

答案1

事实上,我对OP的评论感到无济于事。我做了更多测试,这是我想分享的可靠答案:

使用以下内容创建 /etc/rsyslog.d/00-local.conf:

template(name="AdminLog" type="string" string="/var/log/admin_%syslogtag:R,ERE,1,ZERO::(.*):--end%")

if ($programname == "admin") then {
  action(type="omfile" dynaFile="AdminLog")
  stop
}

systemctl restart rsyslog
logger -t admin:backup starting

这会导致 /var/log/admin_backup 获取日志。

笔记:

  • 我正在运行 Ubunto 20.04。平台/版本特定的细微差别可能会影响您的结果。
  • 所有更改和命令均已在 下完成sudo -s
  • 该模板不需要使用正则表达式。 '%property:Field' 表示法会更有效。这是为了演示如何使用更复杂的正则表达式。请参阅两者的语法财产替代者运营。
  • 在 %syslogtag 的末尾看到附加了一个冒号并且需要在解析中容纳。
  • 使用非常有帮助正则表达式测试页对于 Rsyslog。
  • 在 /var/log 以外的文件夹中创建新文件会带来已知的复杂性,并且超出了 OP 请求的范围。让它适用于 /var/log 中的文件,然后单独接受挑战以使其适用于不同的文件夹。
  • 请注意行动使用动态文件选项。
  • 这也可以通过将结果模板到变量使用 exec_template 然后进一步操作它。这是一个示例页面
  • 使用 Rainerscript 执行正则表达式的另一种方法是使用重新提取函数。例子:
    set $.thefunction = re_extract($syslogtag,...)

相关内容