rsyslog:两个字符串之间的正则表达式提取

rsyslog:两个字符串之间的正则表达式提取

我想提取两个字符串之间的 msg 字段的子字符串。

日志示例:测试本地日志记录:db=testdb,message

我想要的是“testdb”,因此,“db=”和“,”之间的字符串

这是我的配置:

template(name="jsonTemplate"
         type="list"
         option.json="on") {
           constant(value="{")
             constant(value="\"timestamp\":\"")      property(name="timereported" dateFormat="rfc3339")
             constant(value="\",\"message\":\"")     property(name="msg")
             constant(value="\",\"host\":\"")        property(name="hostname")
             constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
             constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
             constant(value="\",\"syslogtag\":\"")   property(name="syslogtag")
             constant(value="\",\"database\":\"")    property(name="msg" regex.expression="(db=)(.*)(,)" regex.match="0" regex.type="ERE")
           constant(value="\"}")
         }

但是我得到的结果是:“db=testdb,”,但是我不希望出现“db=”和“,”

我已经测试了几个正则表达式,但没有效果:

(?<=db=)(.*)(?=,) --> 这在https://regex101.com

我不明白为什么正则表达式不起作用。

版本:rsyslogd:版本 8.24.0

答案1

使用子匹配 2 找到了解决方案:

property(name="msg" regex.expression="(db=)(.*)(,)" regex.submatch="2" regex.type="ERE")

相关内容