Где искать и как сохранить логи Android (logcat, ANR, дампы)

Короткий ответ: без рута используйте ADB — adb logcat и adb bugreport (или adb logcat > файл) для сохранения логов; с root можно копировать /data, /data/anr, /sys/fs/pstore и /proc/kmsg. Ниже — пошаговые команды и советы для быстрой диагностики.

Быстрый способ: извлечь логи без root (через ADB)

  1. Подготовка:
    • Включите "Для разработчиков" и "Отладку по USB".
    • Установите platform-tools (ADB) на ПК.
  2. Проверка подключения:
    • adb devices
  3. Сохранение текущих логов в файл:
    • adb logcat -d -v time > logs.txt (флаг -d снимает буфер и завершает запись)
  4. Сохранение потоковых логов:
    • adb logcat -v time > live_logs.txt Остановите Ctrl+C.
  5. Фильтрация по уровню/тегу/приложению:
    • Все ошибки: adb logcat *:E -v time > errors.txt
    • По тегу: adb logcat MyTag:V *:S > tag_logs.txt
    • По PID (на Linux/macOS): adb logcat --pid=$(adb shell pidof com.example.app) > app.txt
    • На ПК можно дополнительно использовать grep: adb logcat | grep "com.example.app" > app.txt
  6. Полный отчёт (bugreport):
    • adb bugreport bugreport.zip В архиве будут логи, dumpsys, tracestate — удобно отправить разработчику.

Если нужно только снимок буфера — используйте adb logcat -d; для длительной съёмки — поток (не забывайте контролировать размер).

Извлечение логов на рутованном устройстве

Root даёт доступ к файлам, которые недоступны через обычный ADB:

  • Краш-дампы и ANR: /data/anr/, /data/tombstones/
  • Системные дампы: /sys/fs/pstore/, /proc/kmsg, /d/ (зависит от прошивки) Команды:
  • adb root
  • adb pull /data/anr/traces.txt ./traces.txt
  • adb pull /sys/fs/pstore/ ./pstore_dump Мобильные приложения для удобства: MatLog, CatLog (F‑Droid) — с root работают быстрее и могут экспортировать ZIP/TXT.

Копирование системных файлов и изменение SELinux-политик опасно. Не меняйте права и контент в /system и /data без понимания последствий.

Сохранение, фильтрация и базовый анализ логов

  • Форматирование: используйте -v time для точных временных меток.
  • Удаление старых логов: adb logcat -c
  • Автоматизация (Linux/macOS):
    • adb logcat -c; adb logcat -d > $(date +%Y%m%d)_logs.txt
  • Поиск в файле: ищите "FATAL EXCEPTION", "ANR", "Exception", PID вашего приложения.
  • Инструменты: откройте логи в VS Code/Notepad++ — включите подсветку строк и фильтры.
  • Перед отправкой разработчику: оставьте только нужные фрагменты и удалите личные данные (телефоны, токены).

Для долгосрочной диагностики добавьте в сбор логи stacktrace, bugreport и файл конфигурации приложения (если нужны дополнительные контексты).

Частые ошибки

  • Устройство не в списке adb devices — включите отладку по USB и подтвердите ключ RSA на телефоне.
  • Логи слишком объёмны — применяйте фильтры по тегу/уровню/пиду и ротируйте файлы.
  • Нужные файлы (например /data/anr) недоступны — без root получить их нельзя; запросите bugreport у пользователя.
  • Logcat быстро перезаписывает старые записи — перед длительным тестом очистите буфер и начните запись в файл.

FAQ

  • Как получить логи с телефона без ПК?
    На нерутованном устройстве можно установить приложение-перехватчик logcat (некоторые требуют разрешений или root). Надёжнее — подключиться по ADB через телефон с OTG+клавой/ПК.
  • Что важнее: logcat или bugreport?
    Logcat — быстрый поток ошибок; bugreport — комплексный архив с доп. данными (dumpsys, трассировки). Для серьезных багов требуйте bugreport.
  • Можно ли фильтровать по времени?
    В logcat нет прямого фильтра по времени, поэтому сохраняйте файл с метками времени (-v time) и используйте поиск по временным меткам в редакторе.

Если нужно, подготовлю набор команд под Windows или скрипт для автоматического сбора логов и их загрузки в архив.