如何编写正则表达式匹配日志中endpoint及指定任务名称字段
完整正则表达式
^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])* (?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d),\d{3} {1,2}(?<loglevel>[DEBUG\ INFO\ ERROR\ WARN][A-Z]*)\s\[(?<endpoint>[^\]]+)\]\s-\s\[(?<task_name>[^\]]+)\]
补充逻辑说明
我们在你原有正则的基础上,追加了两个命名捕获组来提取目标字段:
\[(?<endpoint>[^\]]+)\]:匹配第一个方括号包裹的endpoint字段,[^\]]+规则匹配除右方括号外的所有连续字符,可精准提取方括号内的路径内容\s-\s:匹配两个方括号字段中间的固定分隔符「空格-空格」\[(?<task_name>[^\]]+)\]:匹配第二个方括号包裹的任务名字段
结果说明
正则匹配成功后,可直接通过命名组取出你需要的所有字段:
loglevel:日志级别(INFO/DEBUG/ERROR/WARN)endpoint:方括号包裹的路径字段,即你示例中的wso2/gateway/src/gateway/utilstask_name:第二个方括号包裹的任务名字段,即你示例中的BlockingConditionRetrievalTask
如果你的日志中存在方括号内为空的特殊场景,把规则中的+替换为*即可适配。
内容的提问来源于stack exchange,提问作者DMUN
相关产品推荐
相关产品推荐

