Logcat не показывает логи приложения чаще всего по одной из трёх причин: не выбрано устройство в выпадающем списке панели, приложение уже аварийно завершилось и буфер очистился, либо фильтр настроен так, что отсекает нужные сообщения. Проверка этих трёх пунктов занимает меньше минуты и решает большинство типичных проблем с «пустым» окном логов в Android Studio.
Инструмент Logcat — это встроенный просмотрщик системного журнала Android, который собирает сообщения от всех процессов устройства: от вашего приложения до системных сервисов. Умение читать и фильтровать этот поток — базовый навык отладки, без которого поиск причин падений, зависаний и неожиданного поведения превращается в гадание.
Что такое Logcat и зачем он нужен
Logcat (сокращение от log catalog) выводит текстовый поток сообщений, которые приложения и система записывают через класс android.util.Log и аналогичные механизмы. Каждая строка содержит дату и время, идентификатор процесса и потока, уровень важности, тег и сам текст сообщения.
Разработчик использует этот журнал, чтобы отследить порядок выполнения кода, увидеть стектрейс исключения, проверить значения переменных в ключевых точках и понять, что происходило с приложением непосредственно перед сбоем. Без логов диагностика crash на реальном устройстве практически невозможна.
Стоит понимать: буфер логов на устройстве ограничен и перезаписывается циклически. На активно используемом устройстве старые записи исчезают быстро, поэтому воспроизводить ошибку нужно «на живую», пока нужные строки ещё в буфере.
Как открыть Logcat в Android Studio
Панель Logcat доступна в нижней части окна IDE. Если она скрыта, откройте её через меню View → Tool Windows → Logcat или нажмите на вкладку Logcat в нижней панели инструментов.
После открытия проверьте три элемента управления в верхней части панели:
- 📱 Выбор устройства — выпадающий список с подключёнными эмуляторами и физическими устройствами;
- 📦 Выбор процесса — фильтр по конкретному приложению (пакету);
- 🔍 Поле поиска и фильтры — строка запроса с поддержкой ключей
tag:,package:,level:.
Если устройство не отображается в списке, убедитесь, что на нём включена отладка по USB в параметрах разработчика, а компьютер авторизован (на экране устройства должен быть подтверждён запрос на RSA-ключ). Для эмулятора достаточно просто его запустить.
Уровни логирования: от Verbose до Assert
Каждое сообщение в Logcat имеет уровень важности. Понимание иерархии уровней помогает быстро отсекать шум и концентрироваться на значимых событиях.
| Уровень | Метод в Java/Kotlin | Назначение |
|---|---|---|
| Verbose (V) | Log.v() | Максимально подробный вывод, мелкие детали работы |
| Debug (D) | Log.d() | Отладочная информация на этапе разработки |
| Info (I) | Log.i() | Информационные сообщения о штатных событиях |
| Warn (W) | Log.w() | Подозрительные ситуации, не приведшие к сбою |
| Error (E) | Log.e() | Ошибки, исключения, сбои в работе |
Выпадающий фильтр уровня в панели Logcat показывает выбранный уровень и всё, что выше него. Например, при выборе Warn вы увидите предупреждения и ошибки, но не отладочные сообщения.
⚠️ Внимание: не оставляйте вызовы
Log.v()иLog.d()с чувствительными данными (токены, пароли, персональная информация) в релизных сборках. Логи на устройстве потенциально доступны другим инструментам диагностики, а в старых версиях Android — и приложениям с соответствующим разрешением.
Фильтрация и поиск по логам
Нефильтрованный поток Logcat на реальном устройстве содержит сотни строк в секунду — системные сервисы пишут постоянно. Без фильтров найти в этом потоке сообщения своего приложения нереально.
Самый надёжный способ — выбрать процесс вашего приложения в выпадающем списке панели. Тогда отображаются только строки, относящиеся к вашему пакету. Дополнительно можно сузить вывод через строку запроса:
package:mine level:ERROR
Такой запрос покажет только ошибки вашего приложения. Для поиска по тегу используйте ключ tag:, например tag:NetworkClient. Теги принято задавать константой в начале класса — это делает фильтрацию предсказуемой.
☑️ Настройка фильтра Logcat
Отдельно полезна функция поиска по тексту внутри уже выведенного буфера — она находит совпадения подстроки в видимых строках, что удобно для поиска конкретного значения или имени метода.
Чтение стектрейса при падении приложения
Когда приложение падает с неперехваченным исключением, Logcat выводит строки уровня Error с пометкой FATAL EXCEPTION и полным стектрейсом. Именно здесь находится ответ на вопрос «почему упало».
Читайте стектрейс сверху вниз: первая строка называет тип исключения и сообщение (например, NullPointerException или IndexOutOfBoundsException), а ниже идёт цепочка вызовов. Ищите первую строку, где упоминается ваш пакет и ваш класс — это и есть точка сбоя в вашем коде. Строки из фреймворка и библиотек обычно лишь показывают, откуда был инициирован вызов.
В Android Studio классы и номера строк в стектрейсе кликабельны — клик переносит вас прямо к нужной строке исходного кода. Это самый быстрый путь от ошибки к её источнику.
Logcat через командную строку: adb logcat
Тот же поток логов доступен вне IDE — через утилиту adb из состава Android SDK Platform-Tools. Это полезно, когда нужно сохранить лог в файл, собрать данные с устройства без запущенной студии или автоматизировать сбор.
adb logcat -v threadtime > log.txt
Команда выше записывает лог с метками времени в файл log.txt. Для фильтрации по тегу и уровню используется синтаксис вида adb logcat MyTag:D *:S — показывать сообщения тега MyTag от уровня Debug, всё остальное заглушить (silent).
Полезные опции, которые стоит знать:
- 🧹
adb logcat -c— очистить буфер логов перед воспроизведением ошибки; - ⏱
-v threadtime— формат вывода с датой, временем и идентификаторами потоков; - 💾
-d— вывести текущее содержимое буфера и завершить работу, не ожидая новых строк.
⚠️ Внимание: очистка буфера через
adb logcat -cнеобратимо удаляет накопленные записи. Перед очисткой убедитесь, что нужные данные уже сохранены в файл, иначе историю событий восстановить не получится.
Почему логи пропадают после перезапуска приложения
В Android Studio по умолчанию при новом запуске приложения панель Logcat может переключаться на свежий сеанс, а старый буфер устройства продолжает циклически перезаписываться. Чтобы не потерять логи падения, сразу после воспроизведения ошибки скопируйте нужные строки или сохраните вывод в файл через adb logcat -d. Также проверьте, что в панели не включён режим показа только текущего процесса — после перезапуска у приложения будет новый PID.
Типичные проблемы и их решения
Разберём ситуации, с которыми разработчики сталкиваются чаще всего. Первая — пустое окно Logcat при работающем устройстве. Начните с простого: переключите устройство в списке панели на другое и обратно, затем проверьте, не сброшен ли фильтр уровня на Assert или Error, при котором обычные сообщения не видны.
Вторая частая жалоба — «логи есть, но моего приложения среди них нет». Возможная причина: приложение падает на старте раньше, чем успевает выполниться ваш код, либо процесс выбран неправильно. Попробуйте сбросить фильтр процесса на No Filters и поискать сообщения по имени пакета вручную.
Третья ситуация — устройство вообще не определяется. Проверьте вывод команды adb devices в терминале: если устройство отображается со статусом unauthorized, подтвердите запрос на отладку на экране смартфона; если список пуст, проверьте кабель, драйверы (актуально для Windows) и включённую отладку по USB. Точные шаги включения режима разработчика зависят от оболочки производителя — сверьтесь с документацией вашей модели устройства.
Практические рекомендации по логированию
Хорошая культура логирования экономит часы отладки. Используйте осмысленные теги — имя класса или короткое название компонента, — чтобы фильтрация работала предсказуемо. Сообщение должно содержать контекст: какие данные обрабатывались и на каком этапе произошло событие.
Для перехвата исключений используйте перегрузку Log.e(TAG, "описание", throwable) — третий аргумент выводит полный стектрейс автоматически. Это заметно информативнее, чем просто текстовое сообщение об ошибке.
В релизных сборках отладочные логи принято отключать — например, через проверку BuildConfig.DEBUG или с помощью правил обфускации, удаляющих вызовы Log. Конкретная настройка зависит от вашей системы сборки и используемых библиотек.
Часто задаваемые вопросы
Почему Logcat пустой, хотя приложение запущено?
Чаще всего не выбрано устройство или процесс в выпадающих списках панели, либо фильтр уровня отсекает сообщения. Проверьте также, что отладка по USB включена и компьютер авторизован на устройстве.
Как посмотреть логи только своего приложения?
Выберите процесс вашего приложения во втором выпадающем списке панели Logcat. Альтернатива — запрос вида package:mine в строке фильтра.
Чем отличается Log.d от Log.e?
Это разные уровни важности: Log.d() — отладочные сообщения, Log.e() — ошибки. Фильтр уровня в панели показывает выбранный уровень и все более серьёзные, поэтому при фильтре Error отладочные строки скрыты.
Можно ли сохранить логи в файл?
Да, через команду adb logcat -d > log.txt в терминале. Ключ -d выводит текущий буфер и завершает работу, без него запись идёт непрерывно до остановки команды.
Почему старые логи исчезают?
Буфер логов на устройстве имеет ограниченный размер и перезаписывается циклически. На активном устройстве старые записи быстро вытесняются новыми, поэтому важные логи следует сразу сохранять в файл.