Раздел: 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 / VPN | LogSource |
// entries | Список разобранных записей | LogsScreen:193 |
| Фильтр по категории | Чипы категорий со счётчиками | LogCategoryCount |
| Фильтр по уровню | ERROR / WARNING / INFO | LogLevel |
| Поиск | По тексту записи | setQuery |
| Кнопка сброса фильтров | resetFilters | — |
| Живой режим | Автообновление списка | setLive |
| Копирование | Копировать запись или весь отфильтрованный список | — |
4. Возможности подробно
Источники
| Источник | Что это | Файл на устройстве |
|---|---|---|
APP | Основной лог приложения | filesDir/log.txt |
VPN | Лог процесса :vpn | filesDir/log-vpn.txt |
Разделение сделано намеренно: ранее два процесса писали в один файл, теперь у каждого свой.
Разбор записей
Сырые строки превращаются в LogEntry(time, timestamp, category, level, message, raw). Категории выводятся по маркерам в тексте:
| Категория | Что означает |
|---|---|
Codex | События Codex-чата (codex:) |
Codex WS | WebSocket-транспорт Codex |
Backend | Backend-роуты и запросы |
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 |
| Лог VPN | filesDir/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 |
| Источников | 2 | LogSource |
| Категорий | 10 | LogCategory |
| Уровней | 3 | LogLevel |
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— команды моста для чтения логов.