Введение / Зачем это нужно
logcat — это главный инструмент Android для просмотра системных и прикладных логов. При разработке или диагностике проблем вы сталкиваетесь с огромным потоком данных, где нужная ошибка тонет в шуме. Фильтрация logcat позволяет быстро изолировать логи вашего приложения, конкретного компонента или уровня важности, экономя часы на поиск. После этого гайда вы сможете находить критические ошибки за секунды.
Требования / Подготовка
Перед началом убедитесь, что:
- Установлен Android SDK Platform-Tools (содержит ADB).
- На устройстве или эмуляторе включён USB-дебаггинг (Настройки → Для разработчиков → USB-дебаггинг).
- Устройство подключено к компьютеру и разрешён доступ ADB (на запрос на устройстве нужно нажать «Разрешить»).
- (Опционально) Установлен Android Studio для использования встроенного Logcat.
Проверьте работоспособность командой:
adb version
adb devices
В списке устройств должен отобразиться ваш телефон или эмулятор.
Пошаговая инструкция
Шаг 1: Базовые команды и понимание формата лога
Логи logcat имеют структуру: дата время PID TID уровень тег : сообщение. Основные уровни (от младшего к старшему): VERBOSE → DEBUG → INFO → WARN → ERROR → FATAL → SILENT.
Самая простая фильтрация — по уровню. Чтобы видеть только ошибки и выше:
adb logcat *:E
Это скроет все VERBOSE, DEBUG и INFO сообщения. Для отладки приложения часто достаточно *:W (warnings and errors).
Шаг 2: Фильтрация по тегу (Tag)
В коде Android вы логируете через Log.d("MyTag", "message"). Тег MyTag — ваш ключ для фильтрации.
Чтобы видеть только логи с тегом MyTag:
adb logcat -s "MyTag"
Можно комбинировать несколько тегов:
adb logcat -s "MyTag" -s "AnotherTag"
Важно: теги чувствительны к регистру. Если не уверены в имени тега, сначала смотрите полный лог, затем фильтруйте.
Шаг 3: Фильтрация по имени пакета (PID)
Иногда теги не уникальны. Тогда можно фильтровать по ID процесса (PID) вашего приложения.
- Найдите PID:
adb shell ps | grep your.package.name
Пример вывода: u0_a123 12345 567 1234567 123456 /system/bin/app_process ...
- Фильтруйте логи по PID:
adb logcat --pid=12345
Это покажет только логи из процесса с указанным PID. Отлично подходит, когда в логах много системных сообщений от других приложений.
Шаг 4: Создание сложных фильтров с регулярными выражениями
logcat поддерживает простые регулярные выражения для тегов. Например, чтобы увидеть логи всех тегов, начинающихся с MyApp:
adb logcat -s "MyApp.*"
Или исключить конкретный тег (например, шумный OpenGLRenderer):
adb logcat | grep -v "OpenGLRenderer"
Минус: grep работает уже после вывода logcat, поэтому может быть медленнее на больших объёмах.
Шаг 5: Использование фильтров в Android Studio
Android Studio предоставляет мощный GUI для logcat:
- Откройте View → Tool Windows → Logcat.
- Вверху окна выберите своё устройство и процесс (приложение) из выпадающих списков.
- Используйте поле Search для поиска по тексту, тегу или PID.
- Создайте собственный фильтр (иконка
+): задайте имя пакета, тег или уровень. Сохраните для повторного использования. - Для сохранения логов в файл нажмите Save Logcat... (иконка дискеты).
Шаг 6: Сохранение логов в файл для анализа
Часто нужно отправить логи разработчику или проанализировать офлайн. Два основных способа:
Способ A: Через ADB (все логи)
adb logcat -d > full_logs.txt
Флаг -d дампует текущий буфер и завершает работу. Без него команда будет ждать новых логов.
Способ B: Только отфильтрованные логи
adb logcat -s "MyTag" -d > filtered_logs.txt
Добавьте -v time для человекочитаемых временных меток:
adb logcat -v time -s "MyTag" -d > logs_with_time.txt
Проверка результата
- Для командного способа: после выполнения команды
adb logcat -s "MyTag"в терминале должны отображаться только строки с указанным тегом. - Для Android Studio: в окне Logcat должны отображаться строки, соответствующие выбранному фильтру (по пакету, тегу или уровню). Проверьте, что в правом верхнем углу не стоит фильтр «No Filters».
- Для сохранения в файл: откройте полученный
.txtфайл в любом редакторе и убедитесь, что он содержит только нужные записи.
Возможные проблемы
Проблема: adb devices не показывает устройство
Причина: Драйверы не установлены (Windows), USB-дебаггинг не включён или не подтверждён RSA-ключ. Решение:
- Включите USB-дебаггинг в настройках разработчика.
- При подключении телефона подтвердите запрос «Разрешить USB-отладку?».
- Установите OEM-драйверы (для Windows) или используйте
adb kill-server && adb start-server.
Проблема: Фильтр по тегу не работает, логи не отображаются
Причина: Тег в коде отличается от указанного в команде (регистр, опечатка) или уровень логирования для этого тега установлен выше (например, INFO), а вы ищете DEBUG.
Решение:
- Проверьте тег в исходном коде:
Log.d("MyTag", ...). - Убедитесь, что уровень логирования не фильтруется глобально. Попробуйте
adb logcat *:V(verbose) для начала. - Используйте
adb logcat | grep "часть_тега"для поиска подстроки.
Проблема: Логи обрываются или не хватает предыдущих записей
Причина: Буфер logcat имеет ограниченный размер (по умолчанию ~256 КБ на циклический буфер). Старые записи перезаписываются. Решение:
- Используйте
adb logcat -cдля очистки буфера перед началом отладки, затем сразу запускайте нужное действие и собирайте логи. - Для долгих сессий сохраняйте логи в файл сразу:
adb logcat -f my_logs.txt.