用于提取复杂线结构的 Grok 模式?

Grok pattern for extracting complicated line structure?

我有单行像

sgcib.solstis.core.dao.referential.InsertionMonitoringDao:10:37:36.860 [SOLSTAIRJVM1: customService :false-persistor-3-] INFO Begin updating insertion_monitoring table: analysisProcessId=1000000648897, insertionMonitorId=9153700, binFileName=TIS_MRM_Meteor_DeltaSpot_RA_SMCPLX_47769.2x2.2016-11-29-00-00-00_1480377600000.bin.tisdevweb043.SOLSTAIRJVM1

在这里,将值 [SOLSTAIRJVM1: customService :false-persistor-3-] 提取为 thread 字段 AND 1000000648897 作为一个 analysisProcessId 字段9153700 作为另一个 insertionMonitorId 字段。字段值在输入行中是可选的,如果在输入行中找不到,则字段必须显示为空值。

请问哪位大侠可以推荐一下pattern的写法吗?

您可以使用

\[(?<thread>[^\]\[]*)].*?analysisProcessId=(?<analysisProcessId>\d+).*?insertionMonitorId=(?<insertionMonitorId>\d+)

描述:

  • \[ - 文字 [
  • (?<thread>[^\]\[]*) -
  • ].*? - 文字 ] 后跟除换行符以外的任何 0+ 个字符,尽可能少,直到第一个
  • analysisProcessId= - analysisProcessId= 子串
  • (?<analysisProcessId>\d+) - 组 "analysisProcessId" 捕获 1+ 个数字
  • .*?insertionMonitorId= - 除换行符外的任何 0+ 个字符尽可能少,包括。第一个insertionMonitorId=
  • `(?\d+) - 组 "insertionMonitorId" 捕获 1+ 个数字

查看演示屏幕: