跳至主要內容

發送中控日誌 (LCC.log)

聲明​

LCC.log(id, ...)
LCC.log(log_map)

參數​

  • id
    整數型,範圍 1~6,對應中控的 6 條日誌通道
  • ... 可變參數,字串、表、ImageObject 或 LCC.capture_ui_state() 傳回的介面狀態物件;一般表格會透過 table.deep_dump 序列化,字串中可使用 [DATE]、[LINE] 預留位置標記
  • log_map 表格型,鍵為日誌別名(需透過 set_log_aliases 設定),值可以是字串、表、ImageObject、介面狀態物件,或包含這些內容的陣列形式表格

回傳值​

  • 無

說明​

傳送前會驗證是否已設定中控地址,未設定時會拋出錯誤。
遇到網路異常會循環重試直到成功,重試期間會透過 sys.toast 提示。
使用別名表時,只發送匹配到別名的鍵,並按別名對應的列號寫入。
如果別名表沒有任何匹配鍵,本次呼叫不會發送請求。

範例​

LCC.log(1, "[DATE] 開始同步", { count = 128 })

LCC.log({
["狀態"] = "同步完成",
["錯誤"] = "0"
})

影像日誌​

LCC.log 支援文字、普通表和圖片混排。傳入 ImageObject 時會預設按 PNG 寫入日誌;傳入 data:image/png;base64,... 或 data:image/jpeg;base64,... 形式的字串時,也會自動識別為圖片。

LCC.log(1, "開始", screen.image(100, 100, 200, 200), "結束")

如果需要減小傳輸體積,可以自行把圖片壓縮成 JPEG data URL 後傳入:

local img = screen.image(100, 100, 200, 200)
local jpg = "data:image/jpeg;base64," .. img:jpeg_data(0.7):base64_encode()
LCC.log(1, "壓縮截圖", jpg)
img:destroy()

別名表形式也支援影像日誌。普通表如果不包含圖片,仍按 table.deep_dump 輸出;陣列形式表格中包含圖片時,會按陣列順序渲染圖文內容。

LCC.set_log_aliases({ "狀態", "錯誤" })

LCC.log({
["狀態"] = { "你好", screen.image(243, 247, 336, 345), "世界" },
["錯誤"] = "0"
})

圖片日誌更適合用於診斷問題或記錄關鍵現場,不建議作為一般進度日誌的一部分。單張圖片最大 20 MiB,單則日誌的圖片合計最大 20 MiB,單張圖片最大 1200 萬像素,每則日誌最多 8 張圖片;超過限制或圖片格式不支援時,LCC.log 會直接報錯。圖片會隨日誌請求一起上傳;裝置較多、截圖區域較大或日誌輸出很密集時,圖片內容會明顯增加區域網路傳輸、伺服器端解碼和寫入磁碟的負擔,可能拖慢其他控制請求的回應。建議只在關鍵步驟記錄截圖,盡量裁剪到需要觀察的區域;如果需要持續取樣,請優先降低頻率或自行壓縮成 JPEG data URL。

介面狀態日誌​

LCC.log 可以在日誌內容參數或別名表的值中接收 LCC.capture_ui_state() 傳回的物件。介面狀態物件本身不是日誌別名表,必須指定日誌通道;LCC.log(state) 會拋出參數錯誤。LCC.capture_ui_state() 需要裝置端 ui_element 0.6.0 或更高版本;模組不可用或版本過低時,請更新 XXTouch 後再使用 capture_ui_state。日誌會上傳該物件快取的原始 .xxtuie 位元組,替代文字固定為 [界面状态];別名表和圖文陣列寫法同樣支援。

local state = LCC.capture_ui_state()
LCC.log(1, "提交失敗", state)
state:destroy()

一次 HTTP 請求最多包含一份介面狀態;同一請求中的一般圖片和介面狀態解碼後合計不能超過 20 MiB。物件銷毀後不能再寫入日誌。有關擷取狀態、本機儲存和資源釋放,請參閱 LCC.capture_ui_state。

日誌歷史會把圖片和介面狀態顯示為附件卡片。按一下圖片可預覽原圖並從預覽進入取色器;按一下介面狀態卡會進入文字元素工具,還原截圖和元素樹。匯出含附件的日誌時,可以選擇僅匯出純文字,或匯出包含可瀏覽 HTML、原圖及原始 .xxtuie 的 zip 檔案;如果附件檔案已經缺失,HTML 中會顯示缺漏標記,其他日誌內容和仍存在的附件會繼續匯出。