正则表达式分隔符指导:多行Kafka日志从RSYSLOG到Fluentd匹配问题
Kafka多行日志匹配:精准截止到下一个时间戳前
修正后的正则表达式
(?<date>\[.*?\]) (.*?) ((?:.|\n)(?!\[))*
核心改进说明
原正则里的((.|\n*)*)会无差别匹配所有内容,导致把下一条日志的时间戳也纳入匹配范围。改成((?:.|\n)(?!\[))*后,通过**负向先行断言(?!\[)**限制匹配边界:只有当前位置后面不是[(新日志时间戳的起始标记)时,才继续匹配任意字符(包括换行符)。
各部分匹配逻辑
(?<date>\[.*?\]):捕获日志开头的时间戳(格式为[xxx])(.*?):匹配时间戳后的短字段(比如日志级别、进程标识)((?:.|\n)(?!\[))*:匹配日志主体内容,直到下一个时间戳的[出现前停止,彻底避免跨日志匹配的问题。
内容的提问来源于stack exchange,提问作者Gautam
相关产品推荐
相关产品推荐

