35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""分析 v6 日志中的根因错误(非 InFailedSqlTransaction 的第一个错误)。"""
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv(Path(__file__).resolve().parents[2] / ".env")
|
|
|
|
from _env_paths import get_output_path
|
|
|
|
raw_path = get_output_path("SYSTEM_LOG_ROOT") / "2026-02-21__etl_run_raw_v6.json"
|
|
data = json.loads(raw_path.read_text(encoding="utf-8"))
|
|
|
|
error_log = data.get("error_log", "")
|
|
lines = error_log.strip().split("\n")
|
|
|
|
# 找所有 ERROR 行
|
|
print("=== 所有 ERROR 行 ===\n")
|
|
for i, line in enumerate(lines):
|
|
if "ERROR" in line:
|
|
print(f"[L{i+1}] {line}")
|
|
|
|
# 找第一个非 InFailedSqlTransaction 的错误
|
|
print("\n\n=== 非级联错误(根因)===\n")
|
|
for i, line in enumerate(lines):
|
|
if "ERROR" in line and "InFailedSqlTransaction" not in line:
|
|
# 打印上下文
|
|
start = max(0, i - 2)
|
|
end = min(len(lines), i + 20)
|
|
for j in range(start, end):
|
|
marker = ">>>" if j == i else " "
|
|
print(f"{marker} [L{j+1}] {lines[j]}")
|
|
print("---")
|