Logcat — что это, уровни логирования и работа с логами

Автор: IT Sectr Опубликовано: 2026-05-06 Время чтения: 8 мин

Logcat — это инструмент Android SDK для просмотра системных сообщений и логов приложений в реальном времени, доступный через ADB или встроенную консоль Android Studio. По данным Android Developers, Logcat собирает сообщения от всех процессов системы, фильтрует их по уровням важности и тегам и позволяет разработчику диагностировать ошибки, отслеживать выполнение кода и анализировать производительность. Logcat — основной источник информации при отладке Android-приложений.

Главное

  • Logcat — консольное окно в Android Studio для просмотра системных логов Android в реальном времени
  • Уровни логов — VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT — определяют важность сообщения и порог фильтрации
  • Фильтрация по тегам, уровням и ключевым словам позволяет выделить логи конкретного приложения из общего потока
  • ADB logcat — команда терминала для доступа к логам без Android Studio, через USB или Wi-Fi
  • Crash-логи Exception с stack trace попадают в 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 или в настройках разработчика устройства.

Уровни логов и теги: структура сообщения Logcat

Шесть уровней логирования определяют важность сообщения. Android использует стандартные уровни, аналогичные другим платформам, но с собственными названиями констант в классе Log. Выбор правильного уровня помогает эффективно фильтровать логи и не заглушать критичные сообщения второстепенными.

УровеньКонстантаНазначениеОтображается по умолчанию
VERBOSELog.vМаксимально подробная отладочная информацияНет
DEBUGLog.dОтладочные сообщения для разработчикаНет
INFOLog.iИнформационные сообщения о работе приложенияДа
WARNLog.wПредупреждения о потенциальных проблемахДа
ERRORLog.eКритические ошибки и исключенияДа
ASSERTLog.wtfОшибки, которые не должны происходить в принципеДа

Теги: организация сообщений по модулям

Тег (tag) — строка до 23 символов, идентифицирующая источник сообщения. Рекомендуется использовать имя класса или модуля в качестве тега: MainActivity, AuthManager, NetworkModule. Это позволяет фильтровать логи по конкретному компоненту приложения. Для единообразия в команде можно создать константы тегов в отдельном файле или использовать библиотеку Timber, которая автоматически подставляет тег по имени класса.

Crash-логи и Exception stack trace

При необработанном исключении Android сам записывает в Logcat полный stack trace с указанием класса, метода, строки кода и цепочки вызовов. Crash-лог содержит тип исключения (NullPointerException, RuntimeException), сообщение и последовательность вызовов от точки падения до entry point приложения. Для анализа краш-логов с устройств пользователей используется Firebase Crashlytics, который синхронизирует stack trace с картой обфускации (mapping.txt для Android).

Logcat в Android Studio: интерфейс, фильтры и поиск

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+. Фильтры сохраняются между сессиями и доступны из выпадающего списка. Для проектов с несколькими модулями создайте отдельный фильтр на каждый модуль.

text
# Пример выражения для фильтрации логов приложения
tag:"MyApp" level:WARN # Только WARN+ для MyApp
package:"com.mycompany" # Все логи пакета
-tag:"okhttp" # Исключить логи OkHttp

Экспорт и анализ

Логи Logcat можно экспортировать в текстовый файл через иконку Save to File. Это полезно для прикрепления к тикетам в Jira или анализа длительных сессий. Экспортированный лог можно открыть в любом текстовом редакторе и применить grep для поиска паттернов. Для форматированного просмотра используйте утилиту logcat-color.

ADB logcat: команды терминала для продвинутой работы

ADB logcat — консольная версия Logcat, доступная через Android Debug Bridge. Её главное преимущество — возможность запуска на CI-серверах, в скриптах автоматизации и на устройствах без Android Studio. ADB logcat поддерживает все те же фильтры, что и GUI, но с гибкостью командной строки.

Базовые команды

Команда adb logcat без аргументов выводит весь буфер в реальном времени. Для остановки используйте Ctrl+C. Флаг -c очищает буфер перед началом записи — это удобно, когда нужно изолировать логи текущего теста от предыдущих сообщений. Флаг -b выбирает тип буфера: main, system, events, crash (Android 12+).

bash
# Очистить буфер и запустить запись логов с тегом MyApp
adb logcat -c
adb logcat MyApp:D *:S

# Сохранить логи в файл
adb logcat -d > logcat_dump.txt

# Фильтрация по PID процесса
adb logcat --pid=12345

Фильтрация по grep и awk

Комбинация ADB с unix-утилитами даёт максимальную гибкость. Например, фильтр "*:S TAG:D" показывает только сообщения с тегом TAG уровня DEBUG и выше, скрывая все остальные. Для просмотра только Exception используйте grep -i exception. Для анализа частоты ошибок примените sort | uniq -c на столбце тега.

Logcat в CI/CD

На CI-серверах Logcat используется для сбора диагностики при прогоне UI-тестов. Типовой pipeline: перед запуском тестов очищается буфер, после выполнения тестов — дамп логов сохраняется как артефакт сборки. Если тест упал, по логам можно определить, было ли падение вызвано ANR, unhandled exception или network timeout.

Логирование в коде: Log.d, Log.e и Timber

Класс 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

Timber — популярная библиотека Jake Wharton, которая устраняет недостатки встроенного Log API. Timber автоматически подставляет тег по имени класса, который вызвал логирование, и не требует передачи tag в каждый вызов. Timber также поддерживает условное логирование: в Release-сборке вызовы Timber.v и Timber.d можно отключить одной строкой в Application.onCreate.

kotlin
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

В Release-сборке рекомендуется отключать VERBOSE и DEBUG логи, чтобы снизить нагрузку на буфер Logcat и исключить утечку чувствительной информации. Timber решает эту задачу через PlantingTree: в Debug-флаворе сажается DebugTree (логирует всё), в Release — CrashReportingTree (логирует только ERROR через Crashlytics). Встроенный Log API не поддерживает условное логирование — разработчику нужно оборачивать каждый вызов if (BuildConfig.DEBUG).

Часто задаваемые вопросы

Как очистить буфер Logcat перед запуском теста?

Используйте команду adb logcat -c перед запуском теста. Альтернативно в Android Studio нажмите кнопку Clear Logcat (мусорная корзина) в окне Logcat. Очистка не влияет на системные буферы других процессов, только на текущее соединение.

Как увеличить размер буфера Logcat?

Выполните adb logcat -G 2M для увеличения буфера до 2 МБ. Максимальный размер зависит от устройства: на Android 10+ доступно до 16 МБ. Изменение сохраняется до перезагрузки устройства. Для постоянной настройки используйте build.prop in device tree.

Почему Logcat не показывает логи приложения?

Возможные причины: приложение запущено в Release-режиме (логи Timber.v/d отключены), фильтр Logcat скрывает нужный уровень, или вы подключены к неправильному устройству. Также проверьте, что в Android Studio выбран процесс приложения, а не system_process.

Как читать crash-логи из Logcat?

Найдите строку с FATAL EXCEPTION, под которой идёт full stack trace. Первая строка содержит тип исключения и сообщение, последующие строки — цепочку вызовов с указанием файла и строки кода. Используйте grep "FATAL EXCEPTION" для быстрого поиска среди всех логов.

Что такое ANR и как его обнаружить в Logcat?

ANR (Application Not Responding) — ситуация, когда главный поток (UI thread) заблокирован более 5 секунд. В Logcat ANR выглядит как сообщение с тегом ActivityManager и текстом "ANR in ..." с приложенным stack trace всех потоков. Используйте фильтр tag:ActivityManager level:ERROR.

Итоги

  • Logcat — системный буфер Android, доступный через ADB и встроенное окно Android Studio
  • Шесть уровней логирования (VERBOSE — ASSERT) определяют важность и порог фильтрации сообщений
  • Теги позволяют группировать сообщения по модулям приложения для быстрой фильтрации
  • ADB logcat с grep/awk гибче GUI-интерфейса и подходит для CI/CD-пайплайнов
  • Timber упрощает логирование, автоматически подставляет теги и отключает Debug-уровни в Release
  • Crash-логи с Exception и stack trace попадают в Logcat автоматически при каждом падении
  • Сохранённые фильтры в Android Studio ускоряют ежедневный анализ логов

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также