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
  • Логове при срив 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 KB за main, 256 KB за system и 256 KB за events (Android 5+). При препълване на буфера старите съобщения се изтриват. Разработчикът може да промени размера на буфера чрез PROP logcat.size или в настройките за разработчици на устройството.

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

Шест нива на логване определят важността на съобщението. Android използва стандартни нива, подобни на други платформи, но със собствени имена на константи в класа Log. Изборът на правилното ниво помага за ефективно филтриране на логовете и предотвратява удавянето на критични съобщения във второстепенни.

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

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

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

Логове при срив и stack trace на изключение

При необработено изключение Android сам записва в Logcat пълен stack trace с посочване на клас, метод, ред код и верига на извиквания. Логът при срив съдържа типа на изключението (NullPointerException, RuntimeException), съобщението и последователността на извикванията от точката на срива до входната точка на приложението. За анализ на логове при срив от устройства на потребителите се използва 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 тестове. Типичен тръбопровод: преди стартиране на тестовете буферът се изчиства, след изпълнение на тестовете dump на логовете се запазва като артефакт на компилацията. Ако тестът се провали, въз основа на логовете може да се определи дали повредата е причинена от ANR, необработено изключение или мрежов 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 — популярна библиотека на Джейк Уортън, която отстранява недостатъците на вградения Log API. Timber автоматично поставя таг според името на класа, който е извикал логването, и не изисква предаване на таг при всяко извикване. 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 MB. Максималният размер зависи от устройството: на Android 10+ е наличен до 16 MB. Промяната се запазва до рестартиране на устройството. За постоянна конфигурация използвайте build.prop в device tree.

Защо Logcat не показва логовете на приложението?

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

Как да чета логове при срив от 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
  • Логовете при срив с Exception и stack trace попадат автоматично в Logcat при всеки срив
  • Запазените филтри в Android Studio ускоряват ежедневния анализ на логове

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също