You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:11