我的SchemaMap函数在使用Kafka管道时不匹配正则表达式,尽管正则表达式看起来很好

mi7gmzs6  于 2023-04-05  发布在  Apache
关注(0)|答案(1)|浏览(104)

我有一个要求,我需要首先匹配日志中的正则表达式,如果匹配,然后执行正则表达式提取,但不知何故,正则表达式在Kafka管道中不工作,而正则表达式在任何在线正则表达式测试平台上测试时都完全正常。
假设我有输入主题:topic 1和output topic:topic 2 topic 1包含所有有某种错误的日志条目。
我已经创建了一个转换管道,其中使用Map的模式为:

"mapping.config":"fields = [ { condition { function = "MATCHES_REGEX", args = [ "message", "Error \d{4}"] }, mapping { "timestamp" = "timestamp", "host" = "host", "service" = "service",  "message.errorcode" ={ function = "REGEX_EXTRACT", args = ["message", "Error (\d{4})", 1]}]

日志中的错误如下所示(在toipc 1中):

"message": {"string": "<userId xmlns=\"\">xxxxxxxxx</userId><command type=\"Error\" echo=\"test\" xsi:type=\"c:ErrorResponse\" xmlns:c=\"C\" xmlns=\"\"><summary>[Error 4007] Invalid login ID: xxxxxx</summary><summaryEnglish>[Error 4007] Invalid login ID: xxxxx</summaryEnglish></command>"}

我需要读取方括号[]中的值,以便在输出主题topic 2中获得类似于“message”的内容:{“errorcode”:4007
有谁能帮帮我吗
先谢谢你了。
我已经尝试了什么正则表达式,但日志条目被跳过,假设它不匹配正则表达式。

{ function = "MATCHES_REGEX", args = [ "message", "Error .+?\]"  ] { function = "MATCHES_REGEX", args = ["message", "Error\s\d+"] } { function = "MATCHES_REGEX", args = [ "message", "summary>\[Error(.+?)\]"] } { function = "MATCHES_REGEX", args = [ "message", "Error (\d{4})"] } { function = "MATCHES_REGEX", args = [ "message", "Error \d{4}"] }
vyu0f0g1

vyu0f0g11#

我的问题在使用Java兼容的正则表达式后得到了解决:
我使用的是summary>.{1}Error.{1}(.{4})而不是summary>\[Error(.+?)\],它工作正常。

相关问题