Перейти к основному содержимому

Отправка логов в центральную консоль (LCC.log)

Сигнатура​

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

Параметры​

  • id
    Целое число от 1 до 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, одно изображение — до 12 миллионов пикселей, в одном логе — не более 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.

История логов показывает изображения и состояния интерфейса как карточки вложений. Нажмите изображение, чтобы просмотреть оригинал и открыть пипетку; нажатие карточки состояния интерфейса открывает инструмент текстовых элементов и восстанавливает снимок и дерево элементов. При экспорте логов с вложениями можно экспортировать только текст или ZIP с просматриваемым HTML, оригиналами и исходными .xxtuie; если вложение отсутствует, в HTML показывается заглушка, а остальные данные и доступные вложения экспортируются.