Диагностика, журналы и отчеты об ошибках
Каждое приложение Tracelet записывает, что SDK делает на устройстве — разрешения,
состояние отслеживания, доступность датчиков и скользящий журнал.
Пакет tracelet_doctor превращает все это в
экран диагностики одним касанием и отчет об ошибке, который можно копировать и вставлять, поэтому при
что-то выглядит не так, вы (или ваши пользователи) можете точно зафиксировать, что произошло.
Новое в версии 3.3.0: кнопка Доктора Копировать теперь объединяет все
(здоровье + конфигурация + логи + телематика) в один отчет Markdown и
новая кнопка Поделиться позволяет загрузить его или отправить по электронной почте в виде файла .md. Также есть
Кнопка Копировать журналы в средстве просмотра журналов.
30-секундная версия
Добавьте tracelet_doctor в качестве зависимости для разработчиков** (не обычной) — это отладка.
инструмент, а Flutter исключает пакеты, зависящие от разработки, из сборок выпуска:
flutter pub add dev:tracelet_doctorЗатем защитите использование kDebugMode, чтобы оно было удалено из сборок выпуска:
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:tracelet_doctor/tracelet_doctor.dart';
// Open the diagnostic screen from a debug menu, button, or shake gesture:
if (kDebugMode) {
TraceletDoctor.show(context);
}Откроется лист с:
- Предупреждения — все, что может помешать отслеживанию (отказано в доступе, режим энергосбережения). режим, агрессивный OEM, отсутствие датчика значительного движения, имитация локаций…).
- Разрешения, состояние отслеживания, батарея и OEM, конфигурация, датчики, база данных.
- Кнопка Просмотр журналов (последние 500 строк журнала).
- Кнопки Копировать отчет об ошибке и Поделиться отчетом об ошибке в правом верхнем углу.
Отправка отчета об ошибке (для ваших пользователей)
Когда пользователь сообщает о проблеме, самый быстрый способ помочь ему — получить Tracelet. отчет об ошибке. Скажите им:
- Откройте экран Tracelet Doctor (где бы вы его ни разместили в приложении).
- Нажмите значок Поделиться (↗) или Копировать (⧉) — в правом верхнем углу.
- Вставьте/прикрепите его в свой канал поддержки или в выпуск GitHub, вместе с любым из ваших собственных журналов приложений.
Отчет представляет собой простой Markdown и выглядит следующим образом:
# Tracelet Bug Report
_Generated by Tracelet Doctor at 2026-06-14T10:22:31Z (UTC)._
## Health check
| Field | Value |
|---|---|
| Platform | android |
| OS version | 14 |
| Manufacturer | Xiaomi |
| Aggressive OEM | true (rating 5/5) |
| Location permission | always |
| Power save mode | true |
...
**Warnings (2):**
- ⚠️ Power Save mode is ON — may throttle background tracking
- ⚠️ Device manufacturer may kill background apps
## Active configuration
```json
{ "geo": { "distanceFilter": 10.0, ... },
"http": { "url": "«отредактировано»», «headers»: ««отредактировано»», ... } }
```
## Telematics events (most recent)
| Type | Severity | Lat | Lng | Time | Synced |
...
## Logs (last 500)
2026-06-14T10:21:55Z [INFO] Tracking started (mode: location)
2026-06-14T10:22:03Z [WARN] Location accuracy degraded
...Секреты удаляются автоматически. Перед добавлением конфигурации в
отчет, любое значение, ключ которого выглядит как URL-адрес, заголовок, параметр, ключ, токен или
сертификат заменяется на «redacted». Ваш URL-адрес синхронизации, ключи API и аутентификация
заголовки никогда не попадают во вставленный отчет. (Все остальное — фильтры расстояний,
точность, переключение функций — сохраняется, потому что это помогает отладке.)
Работа с логами напрямую
Доктор читает те же журналы, к которым вы можете получить доступ через API. Это удобно, если вы хотите создать собственный экран диагностики или отправить журналы на серверную часть.
// Read the most recent log entries.
final logs = await Tracelet.getLogs(500);
for (final entry in logs) {
print('${entry.timestamp} [${entry.level}] ${entry.message}');
}
// Wipe stored logs (e.g. after the user files a report).
await Tracelet.clearLogs();Каждый LogEntry имеет id, level (DEBUG/INFO/WARN/ERROR), message,
и ISO-8601 timestamp. Журналы хранятся в базе данных SQLite на устройстве, поэтому
они выдерживают перезапуск приложения и фиксируют фоновую активность — именно
события, которые иначе невозможно увидеть в отладчике.
Объем протоколируемых данных контролируется вашим LoggerConfig (уровень журнала). Ниже
уровень производства, позволяющий сохранять базу данных небольшой; поднимите его до debug, пока
воспроизводя проблему.
Создание собственного отчета
Если вы предпочитаете создать отчет самостоятельно (например, прикрепить его к своему собственному сбою reporter или добавьте свою версию приложения), позвоните сборщику напрямую:
import 'package:tracelet_doctor/tracelet_doctor.dart';
final report = await TraceletBugReport.build(
appName: 'My App',
appVersion: '2.4.1', // e.g. from package_info_plus
logLimit: 500,
telematicsLimit: 100,
);
// Now copy, share, upload, or attach `report` however you like.Вы также можете повторно использовать только помощник secret-redaction на любой карте конфигурации — удобно. если вы регистрируете свою собственную конфигурацию:
final safe = TraceletBugReport.redactConfig(Tracelet.activeConfig.toMap());Что в отчете (шпаргалка)
| Раздел | Источник | Почему это помогает |
|---|---|---|
| Проверка здоровья | НОТРАНС0ЛАТЕ | Разрешения, OEM/аккумулятор, датчики, устройство — обычные подозреваемые |
| Предупреждения | вычисленный | Вероятная причина «отслеживания остановок в фоновом режиме» |
| Активная конфигурация | Tracelet.activeConfig (отредактировано) | Подтверждает действительно действующие настройки, включая любые примененные удаленные настройки (3.6.10+) |
| Телематические мероприятия | НОТРАНС0ЛАТЕ | Недавние события вождения/удара (3.3.0) |
| Журналы | НОТРАНС0ЛАТЕ | Хронология того, что делал SDK, в том числе в фоновом режиме |
Приятно знать
- Конфиденциальность прежде всего — отчет создается полностью на устройстве. Ничего загружается, если только вы его не отправите. Секреты редактируются перед включением.
- Работает без инициализации — если Tracelet еще не запущен, Доктор показывает дружелюбный «не инициализированный» экран вместо сбоя, и каждый отчет раздел изящно деградирует.
- Добавляйте его в отладочных сборках — многие команды подключают
TraceletDoctor.show(context)к жест встряхивания или скрытое меню отладки, чтобы отдел контроля качества и служба поддержки могли получить отчет в секунды.