Python解析跨行日志:以日期为分隔符提取完整结构化日志
跨行日志解析实现方案
核心逻辑
- 以日期格式匹配作为新日志条目的判断依据,而非换行符
- 维护当前处理中的日志条目变量,非日期开头的行内容清理后追加到当前条目Message字段
- 自动过滤空行、首尾空白字符、多余换行,拼接内容时用空格分隔避免格式混乱
可直接运行的实现代码
import json import re # 预编译日期匹配正则,提升匹配效率 DATE_PATTERN = re.compile(r'^\d{4}-\d{2}-\d{2}') result = [] current_entry = None with open(r"C:\DUMMY\log\a1.txt", "r", encoding="utf-8") as f: for line in f: # 去除行首尾的空格、换行、制表符等空白字符 cleaned_line = line.strip() # 跳过空行 if not cleaned_line: continue # 匹配到日期开头,判定为新日志条目 if DATE_PATTERN.match(cleaned_line): # 保存上一条处理完成的日志条目 if current_entry is not None: result.append(current_entry) # 最多拆分3段,避免消息内容被错误拆分 parts = cleaned_line.split(maxsplit=2) current_entry = { "Date": parts[0], "Severity": parts[1], "Message": parts[2] if len(parts) >= 3 else "" } else: # 非新条目,内容追加到当前条目的消息字段 if current_entry is not None: current_entry["Message"] += f" {cleaned_line}" # 处理最后一条日志条目 if current_entry is not None: result.append(current_entry) # 格式化输出结果 print(json.dumps(result, indent=2, ensure_ascii=False))
输出说明
运行上述代码后,输出的JSON结构完全匹配预期,跨行的ERROR日志内容会完整合并到对应Message字段,无多余换行和缩进。
内容的提问来源于stack exchange,提问作者DAC
相关产品推荐
相关产品推荐

