Строка System.out.println("test") в Android-приложении не появляется в привычной вкладке Run — её вывод перенаправляется в Logcat, и именно там нужно искать сообщения. Если панель Logcat пуста, чаще всего причина в неверно выбранном устройстве, фильтре по уровню логов или в том, что процесс приложения не подключён к отладчику. Ниже разберём все рабочие способы вывода в консоль и типичные причины «пропавших» сообщений.
Консоль в Android Studio устроена иначе, чем в обычных desktop-средах разработки. Здесь нет единого окна вывода: сообщения распределяются между вкладками Run, Logcat и Build. Понимание этой структуры избавляет от ситуации, когда код написан верно, а результата на экране не видно.
Где находится консоль в Android Studio
Основное окно вывода — панель Logcat в нижней части окна среды. Открыть её можно через меню View → Tool Windows → Logcat или кликом по вкладке в нижней панели. Если вкладки нет, проверьте, что проект Android загружен полностью и завершилась индексация Gradle.
Кроме Logcat есть ещё две полезные панели:
- 🖥️ Run — системные сообщения о запуске приложения, установке APK и стек-трейсы падений;
- 🔨 Build — вывод сборки, ошибки компиляции и предупреждения Gradle;
- 🐞 Debug — состояние переменных и точки останова при отладке;
- 📱 Logcat — все логи устройства и эмулятора, включая ваши сообщения.
Способ 1: класс Log — правильный вывод в Logcat
Штатный инструмент логирования в Android — класс android.util.Log. Он пишет сообщения с указанием тега и уровня важности, что позволяет потом фильтровать тысячи строк лога.
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MyApp";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Приложение запущено");
Log.e(TAG, "Пример ошибки");
}
}
У класса пять уровней важности, каждый со своим методом. В Logcat они подсвечиваются разными цветами, и по ним удобно фильтровать вывод.
| Метод | Уровень | Назначение |
|---|---|---|
Log.v() | Verbose | Максимально подробный вывод |
Log.d() | Debug | Отладочные сообщения |
Log.i() | Info | Информационные события |
Log.w() | Warning | Предупреждения |
Log.e() | Error | Ошибки и исключения |
⚠️ Внимание: вызовыLog.d()иLog.v()остаются в коде релизной сборки и могут раскрывать внутренние данные приложения. Перед публикацией удаляйте отладочные логи или отключайте их через ProGuard/R8.
Способ 2: System.out.println и printStackTrace
Стандартный Java-вывод тоже работает: System.out.println("текст") попадает в Logcat с уровнем Info и системным тегом. Это быстрый вариант для временной отладки, но у него есть минус — такие сообщения сложно отфильтровать среди системного шума, потому что тег задаётся платформой, а не вами.
При перехвате исключений полезен вывод стек-трейса:
try {
// код, который может выбросить исключение
} catch (Exception e) {
e.printStackTrace();
}
Стек-трейс появится в Logcat на уровне предупреждения. Более грамотная альтернатива — передать исключение в Log.e(TAG, "Описание", e): тогда и сообщение, и трейс будут привязаны к вашему тегу.
Настройка фильтров Logcat
Без фильтра Logcat показывает логи всего устройства — сотни строк в секунду от системных служб. Чтобы видеть только своё приложение, в выпадающем списке процессов выберите его пакет, а в поле запроса задайте условие.
В актуальных версиях Android Studio фильтр поддерживает конструкции вида tag:MyApp, level:error и их комбинации. Точный синтаксис может отличаться между версиями среды — подсказки отображаются прямо в поле ввода фильтра.
☑️ Проверка перед отладкой
Почему сообщения не появляются в консоли
Если код с логами есть, а Logcat молчит, причина обычно одна из перечисленных ниже. Проверяйте их по порядку — от простой к сложной.
- 🔌 Не выбрано устройство или эмулятор в шапке панели Logcat;
- 🎯 Фильтр уровня стоит на Error, а вы пишете через Log.d();
- 🔄 Приложение не перезапущено после изменения кода — старая версия логов писать не может;
- 📦 Процесс приложения завершился, и Logcat показывает «dead» сессию;
- 🧹 Переполнен буфер — помогает кнопка очистки лога и повторный запуск.
⚠️ Внимание: на некоторых устройствах (прежде всего с сильно изменёнными прошивками) системные настройки могут ограничивать запись логов. Если Logcat пуст даже при корректных фильтрах, проверьте вывод на эмуляторе — так вы отделите проблему кода от проблемы конкретного устройства.
Логирование в Kotlin и сторонние библиотеки
В Kotlin класс Log работает так же, но тег часто задают компактнее:
class MainActivity : AppCompatActivity() {
private val TAG = "MyApp"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG, "onCreate вызван")
}
}
Для больших проектов популярна библиотека Timber: она сама подставляет тег по имени класса и позволяет отключать отладочные логи в release-сборке одной настройкой. Это не обязательный инструмент, но он заметно упрощает поддержку логирования в коде, которого много.
Как вывести логи через ADB без Android Studio
Подключите устройство по USB с включённой отладкой и выполните в терминале команду adb logcat. Для фильтрации по тегу используйте adb logcat -s MyApp. Команды ADB требуют установленного Android SDK Platform-Tools.
⚠️ Внимание: не логируйте пароли, токены и персональные данные пользователей даже в отладочных сборках. Логи устройства могут читаться другими инструментами, и содержимое Logcat не является защищённым хранилищем.
Частые вопросы
Чем Log отличается от System.out.println в Android?
Оба вывода попадают в Logcat, но Log позволяет задать тег и уровень важности, благодаря чему сообщения легко фильтруются. System.out.println присваивает системный тег, и ваши строки теряются среди общего потока.
Почему Logcat пустой, хотя приложение запущено?
Проверьте, что в шапке панели выбрано правильное устройство и процесс приложения, фильтр уровня не отсекает ваши сообщения, а поле поиска пустое. Также убедитесь, что приложение перезапущено после добавления логов.
Как посмотреть логи падения приложения?
Установите фильтр уровня на Error или найдите строки с тегом AndroidRuntime — именно туда система пишет стек-трейс необработанного исключения. Тот же трейс обычно дублируется во вкладке Run.
Работают ли логи на реальном устройстве без эмулятора?
Да. Достаточно включить на устройстве отладку по USB в настройках разработчика, подключить его к компьютеру и выбрать в списке устройств Logcat. Точные названия пунктов меню зависят от оболочки производителя.
Как отключить логи в релизной версии приложения?
Распространённый подход — обернуть вызовы Log проверкой BuildConfig.DEBUG или настроить правила ProGuard/R8, удаляющие вызовы Log при сборке релиза. Библиотека Timber решает эту задачу через отдельное дерево логирования для debug-сборок.