y83 code / инструмент

Логи

Просмотр логов приложения прямо в приложении: два источника (основной лог и лог VPN), разбор на категории и уровни, фильтры, поиск и живое обновление.

раздел реестра
Система
код
1 191 строк в 4 файлах
документ
29-logs.md
Раздел: System
Идентификатор: logs · Экран: ui/logs/ (4 файла)
Снимок: 2026-10-11

1. Зачем и что это

Логи читаются с backend, а не из файлов приложения: backend держит и основной лог, и лог процесса VPN, и умеет отдавать хвост.

2. Как попасть

Хаб инструментов → секция System → карточка «Логи» (hub_logs_title, подпись «Логи приложения, сервисов и диагностики», тайл — «Логи»).

Откуда ещёПуть
Мостapp_navigate с screen: "logs"

Маршрут: Screen.kt → MainRouter (LogsScreen). Шапка — y83@logs :~$.

3. Экран: элементы и действия

ЭлементЧто делаетГде в коде
Переключатель источникаAPP / VPNLogSource
// entriesСписок разобранных записейLogsScreen:193
Фильтр по категорииЧипы категорий со счётчикамиLogCategoryCount
Фильтр по уровнюERROR / WARNING / INFOLogLevel
ПоискПо тексту записиsetQuery
Кнопка сброса фильтровresetFilters—
Живой режимАвтообновление спискаsetLive
КопированиеКопировать запись или весь отфильтрованный список—

4. Возможности подробно

Источники

ИсточникЧто этоФайл на устройстве
APPОсновной лог приложенияfilesDir/log.txt
VPNЛог процесса :vpnfilesDir/log-vpn.txt

Разделение сделано намеренно: ранее два процесса писали в один файл, теперь у каждого свой.

Разбор записей

Сырые строки превращаются в LogEntry(time, timestamp, category, level, message, raw). Категории выводятся по маркерам в тексте:

КатегорияЧто означает
CodexСобытия Codex-чата (codex:)
Codex WSWebSocket-транспорт Codex
BackendBackend-роуты и запросы
WebAIВеб-ИИ аккаунты и запросы
VPNСобытия VPN-сервиса
UpdateОбновления и сборки
NetworkСеть и туннели
FilesРабота с файлами
ChatЧаты opencode
OtherВсё, что не распознано

Уровни: ERROR, WARNING, INFO.

Фильтры

Фильтры комбинируются: источник + категория + уровень + поисковый текст. Рядом с каждой категорией показывается счётчик записей — видно, где сосредоточено проблем. Кнопка сброса возвращает все фильтры к состоянию «всё».

Живой режим

Включённый live-режим опрашивает лог каждые LIVE_POLL_MS = 2_000L миллисекунд. Поллинг останавливается на паузе экрана (onScreenPause) и возобновляется при возврате (onScreenResume) — фоновое чтение не тратит батарею.

Глубина чтения

За раз читается хвост LOGS_TAIL_LINES = 500 строк. Более ранние записи подгружаются только через MCP-инструмент dev_log с lines/skip.

5. Данные: БД, файлы, настройки

ЧтоГде лежитКак меняетсяКто читает
Лог приложенияfilesDir/log.txt (зеркало в /sdcard/Download/y83ws/)util/FileLog.ktЭкран, dev_log
Лог VPNfilesDir/log-vpn.txtПроцесс :vpnЭкран, dev_log {file:"vpn"}

Фильтры и выбранный источник живут только в состоянии экрана.

6. Backend: REST/роуты

Метод и путьНазначениеОбработчик
GET /api/v1/log?lines=&q=хвост логаbr.LogGet
POST /api/v1/logзаписать строку в логbr.LogPost

Роуты: backend/internal/api/v1/routes.go:301–302.

7. Мост и MCP

ИнструментЧто делает
dev_log {source, lines, q, skip, file}Чтение логов без экрана: gate, backend, backend_err, swap, setup, deploy, app
app_log {lines, q}Основной лог приложения
app_log {file: "vpn"}Лог VPN-процесса
log_tail {lines, q}Алиас

MCP-инструмент dev_log умеет больше, чем экран: чтение логов ворот, swap, установки и публикации — их на устройстве как файлов просто нет.

8. Настройки, конфиг, квоты и лимиты

ПараметрЗначениеГде задаётся
Глубина чтения500 строкLOGS_TAIL_LINES
Интервал live-режима2 секундыLIVE_POLL_MS
Источников2LogSource
Категорий10LogCategory
Уровней3LogLevel

9. Ловушки и ограничения

  • Экран показывает только два файла. Логи ворот, установки и swap читаются только через dev_log.
  • 500 строк — это хвост. Давняя ошибка в экране не появится; для глубокого чтения нужен dev_log с lines и skip.
  • Живой режим опрашивает каждые 2 секунды и держит сеть активной, пока включён.
  • Категория определяется по маркеру в тексте. Если маркер изменён, запись попадёт в Other.
  • Уровень логируется приложением, а не системой: если код не вызвал FileLog.log с уровнем, в логе будет INFO по умолчанию.
  • raw сохраняется вместе с разобранным текстом — при ошибке разбора видно оригинал.
  • Экран не локализован.

10. Источники правды

  • app/src/main/java/com/y83/ws/ui/logs/LogsScreen.kt — экран, фильтры, список.
  • app/src/main/java/com/y83/ws/ui/logs/LogsViewModel.kt — загрузка, live-режим, фильтрация.
  • app/src/main/java/com/y83/ws/ui/logs/LogsFormat.kt — модели, разбор, константы.
  • app/src/main/java/com/y83/ws/util/FileLog.kt — запись в лог приложения.
  • app/src/main/java/com/y83/ws/vpn/ — лог процесса :vpn.
  • backend/internal/api/v1/routes.go:301–302 — роуты логов.
  • skills/y83-bridge/SKILL.md — команды моста для чтения логов.

Источник: docs/project/hub/29-logs.md · Система · 1 191 строк в 4 файлах. Страница собирается из документации проекта при сборке сайта.