Какие способы снятия логов с мобильных устройств существуют?
Что проверяют
Умеете ли вы сами собрать доказательства для бага, а не писать «у меня упало». Следом обычно спрашивают, как снять лог краша, который случился не у вас, а у пользователя или коллеги на другом устройстве.
Как отвечать
Разделите способы на локальные и удалённые.
- Android,
adb logcat: поток системного и прикладного лога. Фильтры по приоритету (adb logcat *:E) и по процессу (--pid=$(adb shell pidof -s com.example.app)),-dвыгружает буфер и выходит,-cочищает. В Android Studio Logcat понимает запросы видаpackage:mine level:error; - Android,
adb bugreport: архив с системными логами, трассами ANR и выводомdumpsys, незаменим для зависаний и проблем с батареей. Для устройства без кабеля есть беспроводная отладка с Android 11; - iOS, консоль Xcode: только для приложения, запущенного из Xcode;
- iOS, Console.app на Mac: стрим системного лога подключённого iPhone с фильтром по процессу и subsystem. Видно то, что приложение пишет через
Loggerилиos_log, а обычныйprintтуда не попадает. На Windows и Linux похожее даётidevicesyslogиз libimobiledevice; - краш-репорты и sysdiagnose: на iPhone в разделе «Аналитика и улучшения», в Xcode через Devices and Simulators, для TestFlight и App Store в Organizer;
- удалённый сбор: Firebase Crashlytics, Sentry, AppMetrica собирают краши и нефатальные ошибки со стеком, версией сборки и последними событиями;
- сеть: Charles, Proxyman или mitmproxy. На Android 7+ приложение доверяет пользовательскому сертификату только при настройке
network_security_configв debug-сборке.
Где спотыкаются
Прикладывают весь logcat за час без фильтра и времени воспроизведения. Разработчик тонет в шуме, а буфер кольцевой: если снять лог через полчаса, нужных строк там уже нет.
Фильтруют только по своему пакету и теряют системные события. Убийство процесса по памяти или ANR пишет ActivityManager, а не приложение.
Не учитывают сборку. В релизной версии отладочные логи часто вырезаны, а динамические строки в Logger на устройстве показываются как <private>. К логу всегда нужны версия сборки, модель, версия ОС и шаги.