Logcat — это инструмент Android SDK для просмотра системных сообщений и логов приложений в реальном времени, доступный через ADB или встроенную консоль Android Studio. По данным Android Developers, Logcat собирает сообщения от всех процессов системы, фильтрует их по уровням важности и тегам и позволяет разработчику диагностировать ошибки, отслеживать выполнение кода и анализировать производительность. Logcat — основной источник информации при отладке Android-приложений.
Главное
Logcat — это системный буфер Android, в который все процессы (включая ядро Linux, system_server и приложения) пишут сообщения определённого формата. Инструмент logcat, входящий в состав Android SDK, читает этот буфер и выводит сообщения в реальном времени. Начиная с Android 4.1 (API 16), доступ к Logcat ограничен: приложения могут читать только свои логи, а системные логи доступны через ADB с debug-доступом.
Каждое сообщение Logcat содержит пять полей: дата и время, PID (идентификатор процесса), TID (идентификатор потока), уровень логирования и тег. Формат фиксирован и одинаков для всех версий Android. Это позволяет использовать утилиты grep, awk и sed для фильтрации логов в CI/CD-пайплайнах без привязки к IDE.
Логи хранятся в кольцевом буфере фиксированного размера: 256 КБ для main, 256 КБ для system и 256 КБ для events (Android 5+). При переполнении буфера старые сообщения удаляются. Разработчик может изменить размер буфера через PROP logcat.size или в настройках разработчика устройства.
Шесть уровней логирования определяют важность сообщения. Android использует стандартные уровни, аналогичные другим платформам, но с собственными названиями констант в классе Log. Выбор правильного уровня помогает эффективно фильтровать логи и не заглушать критичные сообщения второстепенными.
| Уровень | Константа | Назначение | Отображается по умолчанию |
|---|---|---|---|
| VERBOSE | Log.v | Максимально подробная отладочная информация | Нет |
| DEBUG | Log.d | Отладочные сообщения для разработчика | Нет |
| INFO | Log.i | Информационные сообщения о работе приложения | Да |
| WARN | Log.w | Предупреждения о потенциальных проблемах | Да |
| ERROR | Log.e | Критические ошибки и исключения | Да |
| ASSERT | Log.wtf | Ошибки, которые не должны происходить в принципе | Да |
Тег (tag) — строка до 23 символов, идентифицирующая источник сообщения. Рекомендуется использовать имя класса или модуля в качестве тега: MainActivity, AuthManager, NetworkModule. Это позволяет фильтровать логи по конкретному компоненту приложения. Для единообразия в команде можно создать константы тегов в отдельном файле или использовать библиотеку Timber, которая автоматически подставляет тег по имени класса.
При необработанном исключении Android сам записывает в Logcat полный stack trace с указанием класса, метода, строки кода и цепочки вызовов. Crash-лог содержит тип исключения (NullPointerException, RuntimeException), сообщение и последовательность вызовов от точки падения до entry point приложения. Для анализа краш-логов с устройств пользователей используется Firebase Crashlytics, который синхронизирует stack trace с картой обфускации (mapping.txt для Android).
Android Studio предоставляет графический интерфейс Logcat, доступный через View → Tool Windows → Logcat (Alt + 6). Окно Logcat обновляется в реальном времени, показывает все сообщения подключённого устройства и позволяет настраивать гибкие фильтры для выделения нужной информации из общего потока.
Выпадающий список Log Level фильтрует сообщения по минимальному уровню: выберите WARN, чтобы видеть только предупреждения и ошибки, скрыв VERBOSE, DEBUG и INFO. Поле Search позволяет искать по тексту сообщения или тегу — поддерживаются regex, что удобно для поиска сообщений по паттерну.
Saved Filters — мощная функция Logcat в Android Studio. Вы можете создать фильтр, который показывает только сообщения с тегом вашего приложения (tag:MyApp) и уровнем WARN+. Фильтры сохраняются между сессиями и доступны из выпадающего списка. Для проектов с несколькими модулями создайте отдельный фильтр на каждый модуль.
# Пример выражения для фильтрации логов приложения
tag:"MyApp" level:WARN # Только WARN+ для MyApp
package:"com.mycompany" # Все логи пакета
-tag:"okhttp" # Исключить логи OkHttp
Логи Logcat можно экспортировать в текстовый файл через иконку Save to File. Это полезно для прикрепления к тикетам в Jira или анализа длительных сессий. Экспортированный лог можно открыть в любом текстовом редакторе и применить grep для поиска паттернов. Для форматированного просмотра используйте утилиту logcat-color.
ADB logcat — консольная версия Logcat, доступная через Android Debug Bridge. Её главное преимущество — возможность запуска на CI-серверах, в скриптах автоматизации и на устройствах без Android Studio. ADB logcat поддерживает все те же фильтры, что и GUI, но с гибкостью командной строки.
Команда adb logcat без аргументов выводит весь буфер в реальном времени. Для остановки используйте Ctrl+C. Флаг -c очищает буфер перед началом записи — это удобно, когда нужно изолировать логи текущего теста от предыдущих сообщений. Флаг -b выбирает тип буфера: main, system, events, crash (Android 12+).
# Очистить буфер и запустить запись логов с тегом MyApp
adb logcat -c
adb logcat MyApp:D *:S
# Сохранить логи в файл
adb logcat -d > logcat_dump.txt
# Фильтрация по PID процесса
adb logcat --pid=12345
Комбинация ADB с unix-утилитами даёт максимальную гибкость. Например, фильтр "*:S TAG:D" показывает только сообщения с тегом TAG уровня DEBUG и выше, скрывая все остальные. Для просмотра только Exception используйте grep -i exception. Для анализа частоты ошибок примените sort | uniq -c на столбце тега.
На CI-серверах Logcat используется для сбора диагностики при прогоне UI-тестов. Типовой pipeline: перед запуском тестов очищается буфер, после выполнения тестов — дамп логов сохраняется как артефакт сборки. Если тест упал, по логам можно определить, было ли падение вызвано ANR, unhandled exception или network timeout.
Класс android.util.Log — встроенный API для записи сообщений в Logcat. Log.v, Log.d, Log.i, Log.w, Log.e и Log.wtf принимают тег (строку) и сообщение (строку) или сообщение + Throwable. Для форматирования сообщений используйте String.format или Kotlin String templates — избегайте конкатенации строк, которая создаёт лишние объекты в heap.
Timber — популярная библиотека Jake Wharton, которая устраняет недостатки встроенного Log API. Timber автоматически подставляет тег по имени класса, который вызвал логирование, и не требует передачи tag в каждый вызов. Timber также поддерживает условное логирование: в Release-сборке вызовы Timber.v и Timber.d можно отключить одной строкой в Application.onCreate.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Встроенный Log API
Log.d("MainActivity", "onCreate called")
// Timber — автоматический тег по имени класса
Timber.d("onCreate called")
}
private fun loadData() {
try {
val result = fetchFromNetwork()
Timber.i("Data loaded: $result")
} catch (e: IOException) {
Timber.e(e, "Failed to load data")
}
}
}
В Release-сборке рекомендуется отключать VERBOSE и DEBUG логи, чтобы снизить нагрузку на буфер Logcat и исключить утечку чувствительной информации. Timber решает эту задачу через PlantingTree: в Debug-флаворе сажается DebugTree (логирует всё), в Release — CrashReportingTree (логирует только ERROR через Crashlytics). Встроенный Log API не поддерживает условное логирование — разработчику нужно оборачивать каждый вызов if (BuildConfig.DEBUG).
Часто задаваемые вопросы
Используйте команду adb logcat -c перед запуском теста. Альтернативно в Android Studio нажмите кнопку Clear Logcat (мусорная корзина) в окне Logcat. Очистка не влияет на системные буферы других процессов, только на текущее соединение.
Выполните adb logcat -G 2M для увеличения буфера до 2 МБ. Максимальный размер зависит от устройства: на Android 10+ доступно до 16 МБ. Изменение сохраняется до перезагрузки устройства. Для постоянной настройки используйте build.prop in device tree.
Возможные причины: приложение запущено в Release-режиме (логи Timber.v/d отключены), фильтр Logcat скрывает нужный уровень, или вы подключены к неправильному устройству. Также проверьте, что в Android Studio выбран процесс приложения, а не system_process.
Найдите строку с FATAL EXCEPTION, под которой идёт full stack trace. Первая строка содержит тип исключения и сообщение, последующие строки — цепочку вызовов с указанием файла и строки кода. Используйте grep "FATAL EXCEPTION" для быстрого поиска среди всех логов.
ANR (Application Not Responding) — ситуация, когда главный поток (UI thread) заблокирован более 5 секунд. В Logcat ANR выглядит как сообщение с тегом ActivityManager и текстом "ANR in ..." с приложенным stack trace всех потоков. Используйте фильтр tag:ActivityManager level:ERROR.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также