본문으로 건너뛰기

중앙 제어 로그(LCC.log) 전송

선언​

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

매개변수​

  • id
    정수형으로, 범위는 1~6이며 중앙 제어 서버의 6개 로그 채널에 해당합니다.
  • ... 가변 매개변수로, 문자열, 테이블, ImageObject 또는 LCC.capture_ui_state()가 반환하는 UI 상태 객체가 될 수 있습니다. 일반 테이블의 경우 table.deep_dump를 통해 직렬화되며, 문자열 내에서는 [DATE], [LINE]와 같은 플레이스홀더를 사용할 수 있습니다.
  • log_map 테이블 형태로, 키는 로그 별명(set_log_aliases를 통해 설정해야 함)이며, 값은 문자열, 테이블, ImageObject, UI 상태 객체 또는 이러한 내용을 포함하는 배열 테이블이 될 수 있습니다.

반환 값​

  • 없음

설명​

전송하기 전에 중앙 제어 서버 주소가 설정되어 있는지 확인하며, 설정되어 있지 않을 경우 오류가 발생합니다.
네트워크 이상이 발생하면 성공할 때까지 반복적으로 재시도하며, 재시도 중에는 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에서 즉시 오류가 발생합니다. 이미지는 로그 요청과 함께 업로드되며, 기기의 수가 많거나 스크린샷 영역이 넓거나 로그 출력이 매우 밀집된 경우, 이미지 내용으로 인해 로컬 네트워크 전송, 서버 측 디코딩 및 디스크 I/O에 상당한 부담이 생겨 다른 제어 요청의 응답 속도가 느려질 수 있습니다. 따라서 중요한 단계에서만 스크린샷을 캡처하고, 관찰이 필요한 영역만 잘라내는 것이 좋습니다. 지속적인 샘플링이 필요한 경우에는 빈도를 낮추거나 직접 JPEG data URL 형태로 압축하는 것이 바람직합니다.

UI 상태 로그​

LCC.log를 통해 로그 내용 매개변수나 별명 테이블의 값에 LCC.capture_ui_state()가 반환하는 객체를 포함시킬 수 있습니다. UI 상태 객체 자체는 로그 별명 테이블이 아니므로 반드시 로그 채널을 지정해야 하며, 그렇지 않을 경우 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 요청에는 하나의 UI 상태만 포함될 수 있으며, 동일한 요청 내의 일반 이미지와 UI 상태의 디코딩 후 총 크기는 20 MiB를 초과할 수 없습니다. 객체가 소멸된 이후에는 더 이상 로그에 기록할 수 없습니다. 상태 캡처, 로컬 저장 및 리소스 해제에 관한 자세한 내용은 LCC.capture_ui_state를 참조하십시오.

로그 기록 내역에서는 이미지와 UI 상태가 첨부 파일 카드 형태로 표시됩니다. 이미지를 클릭하면 원본 이미지를 미리 보고, 미리 보기 화면에서 색상 선택기로 이동할 수 있습니다. UI 상태 카드를 클릭하면 텍스트 요소 도구로 이동하여 스크린샷과 요소 트리를 복원할 수 있습니다. 첨부 파일이 포함된 로그를 내보낼 때는 순수 텍스트만 내보내거나, 브라우징이 가능한 HTML, 원본 이미지 및 원본 .xxtuie가 포함된 zip 파일을 내보낼 수 있습니다. 첨부 파일이 누락된 경우 HTML에는 누락된 것을 나타내는 플레이스홀더가 표시되며, 나머지 로그 내용과 여전히 존재하는 첨부 파일들은 그대로 내보내집니다.