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 застосунку. Для аналізу crash-логів з пристроїв користувачів використовується 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, під яким іде повний 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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