我想提取两个字符串之间的 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")