使用带多个分号的 RegEx 对日志消息进行分组

问题描述 投票:0回答:1

我的正则表达式无法匹配日志消息。我们正在使用 log4net,我想按 timestamplevelloggermessage 分组。问题是我们使用分号来分隔组,有时消息也包含分号。

日志文件中的示例条目:

  1. 2023-02-24 10:06:41,903;WARN;Request.Apply.Locked;business.Validator;Waiting X to continue
    (工作)
  2. 2023-02-24 10:06:41,903;WARN;Request.Apply.Locked;business.Validator;Framework;<METADATA&gtWaiting X to continue</METADATA&gt
    (不工作)

正则表达式链接:

  1. https://regex101.com/r/E97VkI/1(工作)
  2. https://regex101.com/r/n6Um82/1(不工作)

如您所见,第二个链接将“/METADATA>”分组为消息。

问题是我不知道message中有多少个分号。但是,我知道在logger中它可以是1-3个分号。是否可以编写 RegEx 来匹配/忽略最多 3 个分号?

正如您在下面的示例中看到的,logger 将以这样的分号开始和结束:

;Request.Apply.Locked;business.Validator;Framework;Test;

我们有 5 个分号,但其中 3 个应该属于 logger 组。

日志可以这么长:

2023-02-24 10:06:41,903;WARN;Request.Apply.Locked;business.Validator;Framework;Test;<METADATA&gtWaiting X to continue</METADATA&gt

这是我当前的正则表达式:

(?<timestamp>[\d-]+ [\d:,]+);(?<level>[A-Z]+)\s?;?\s?\s?(?<logger>[\s\S]*);(?<message>[\s\S]*)

总结一下:我想要一个正则表达式来对timestamplevelloggermessage进行分组,它应该适用于示例1和示例2。

提前致谢。

javascript regex grouping log4net
1个回答
0
投票

尝试使用

m
正则表达式修饰符分别匹配行首和行尾的
^
$
。然后让最后一次捕获寻找任何东西 except 一个分号。

 ^(?<timestamp>[\d-]+ [\d:,]+);(?<level>[A-Z]+)\s?;?\s?\s?(?<logger>[\s\S]*);(?<message>[^;]+)$

适用于上面的示例 1. 和 2.

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.