標準日誌行與結構化日誌

logging_instance 輸出固定的管線分隔人類字串,沒有 JSON 選項也沒有 trace/span 欄位,但 OTel 的 log-trace 關聯需要每筆記錄都帶 trace_id / span_id。本功能加入 Stripe 風格的標準日誌行(每次執行 輸出一個寬欄位包)以及一個攜帶 trace 脈絡的 JSON logging.Formatter

純標準函式庫(json / logging);不匯入 PySide6。計時器時鐘可注入,因此時長在 CI 中具決定性。

無頭 API

from je_auto_control import (
    CanonicalLogLine, bind_trace_context, JSONLogFormatter,
    new_root_context,
)

line = CanonicalLogLine({"event": "run_suite"})
bind_trace_context(line, new_root_context())
with line.timer("execute"):
    run()
line.add("ok", True).emit(logger.info)         # 每次執行一行寬事件

# 帶 trace 關聯的結構化日誌:
handler.setFormatter(JSONLogFormatter())

CanonicalLogLine 累積請求範圍的欄位(add / update),透過 timer``(可注入時鐘)把一段區塊 計入 ``{name}_ms,並以 render / emit 將寬事件行輸出為 JSON。bind_trace_context 附上 SpanContexttrace_id / span_idJSONLogFormatter 是一個 logging.Formatter,每筆記錄 輸出一個 JSON 物件,包含 trace_id / span_id 與任何 extra= 欄位 —— 與 trace_context 對應的 log-trace 關聯。

執行器命令

AC_canonical_logfields 物件建立標準日誌行,回傳 {line, json}。它以 MCP 工具 ac_canonical_log 以及 Script Builder 中 Report 分類下的命令提供。