使用 Rsyslog 格式化文件名

使用 Rsyslog 格式化文件名

我需要格式化 rsyslog 将创建的文件的名称:

现在,在 /etc/rsyslog.d/51-loggingdriver.conf 中我有:

$template DockerLogs,"/var/log/docker/%HOSTNAME%_%FROMHOST-IP%_%PROGRAMMENAME%_syslog.log"

但看起来 programmename 给了我类似的东西:

gitlab_gitlab.1.2rr19xz43unto19ba1sih7jqg_syslog.log
gitlab_gitlab.1.aw2xvfp77i68i2c87szy5n8g9_syslog.log
gitlab_gitlab.1.ig5hk4j3i5x8i6hi07ebqotln_syslog.log

所以它为我提供了同一个应用程序的几个文件,但我只想要一个文件。(随机后缀是由于使用 Docker Swarm 服务)

我希望这个字段等于:gitlab_gitlab,或者更好的是,只是“gitlab”

可能吗?我该怎么做?有没有办法做子字符串?

答案1

你可以用物业更换者,包括取固定大小的子字符串,或者更有力地匹配正则表达式。例如,

%programmename:R,ERE,1,FIELD:([^_.]+).*--end%

而不是%PROGRAMMENAME%模板中的 将在第一个_.字符后停止。这R意味着使用扩展语法的正则表达式ERE,保留第一个捕获组 1,如果没有匹配,则使用原始 FIELD 值。正则表达式模式有一个捕获组(),它匹配除前面提到的两个字符之外的任何字符[^_.]+--end显示语法的结尾R

相关内容