Logcat — Android SDK-nın sistem mesajlarına və tətbiq loglarına real vaxt rejimində baxmaq üçün alətidir, ADB və ya Android Studio-nun daxili konsolu vasitəsilə əlçatandır. Android Developers məlumatına görə, Logcat sistemin bütün proseslərindən mesajları toplayır, onları vaciblik səviyyələrinə və teqlərə görə filtrləyir və tərtibatçıya səhvləri diaqnoz etməyə, kodun icrasını izləməyə və performansı təhlil etməyə imkan verir. Logcat — Android tətbiqlərinin debug edilməsi zamanı əsas məlumat mənbəyidir.
Əsas məqamlar
Logcat — Android-in sistem buferidir, ona bütün proseslər (Linux nüvəsi, system_server və tətbiqlər daxil olmaqla) müəyyən formatda mesajlar yazır. Android SDK-nın tərkibinə daxil olan logcat aləti bu buferi oxuyur və mesajları real vaxt rejimində göstərir. Android 4.1-dən (API 16) başlayaraq Logcat-a giriş məhdudlaşdırılıb: tətbiqlər yalnız öz loglarını oxuya bilər, sistem logları isə ADB vasitəsilə debug girişi ilə əlçatandır.
Hər bir Logcat mesajı beş sahə ehtiva edir: tarix və vaxt, PID (proses identifikatoru), TID (thread identifikatoru), loglama səviyyəsi və teq. Format sabitdir və Android-in bütün versiyaları üçün eynidir. Bu, IDE-yə bağlanmadan CI/CD pipeline-larında logları filtrləmək üçün grep, awk və sed utilitlərindən istifadə etməyə imkan verir.
Loglar sabit ölçülü dairəvi buferdə saxlanılır: main üçün 256 KB, system üçün 256 KB və events üçün 256 KB (Android 5+). Bufer dolduqda köhnə mesajlar silinir. Tərtibatçı bufer ölçüsünü PROP logcat.size və ya cihazın tərtibatçı parametrlərində dəyişə bilər.
Altı səviyyə loglama mesajın vacibliyini müəyyən edir. Android digər platformalara bənzər standart səviyyələrdən istifadə edir, lakin Log sinifində öz sabit adları ilə. Düzgün səviyyə seçimi logları effektiv filtrləməyə və kritik mesajların ikinci dərəcəli mesajlarla boğulmamasına kömək edir.
| Səviyyə | Sabit | Təyinat | Defolt göstərilir |
|---|---|---|---|
| VERBOSE | Log.v | Maksimum detallı debug məlumatı | Xeyr |
| DEBUG | Log.d | Tərtibatçı üçün debug mesajları | Xeyr |
| INFO | Log.i | Tətbiqin işi haqqında məlumat mesajları | Bəli |
| WARN | Log.w | Potensial problemlər barədə xəbərdarlıqlar | Bəli |
| ERROR | Log.e | Kritik səhvlər və istisnalar | Bəli |
| ASSERT | Log.wtf | Prinsipcə baş verməməli olan səhvlər | Bəli |
Teq (tag) — mesaj mənbəyini identifikasiya edən 23 simvola qədər sətir. Teq olaraq sinif və ya modul adından istifadə etmək tövsiyə olunur: MainActivity, AuthManager, NetworkModule. Bu, logları tətbiqin konkret komponenti üzrə filtrləməyə imkan verir. Komandada vahidlik üçün ayrıca faylda teq sabitləri yaratmaq və ya sinif adına görə avtomatik teq qoyan Timber kitabxanasından istifadə etmək olar.
İşlənməmiş istisna zamanı Android özü Logcat-a sinif, metod, kod sətri və çağırış zəncirini göstərən tam stack trace yazır. Crash-log istisna tipini (NullPointerException, RuntimeException), mesajı və çökmə nöqtəsindən tətbiqin giriş nöqtəsinə qədər çağırış ardıcıllığını ehtiva edir. İstifadəçi cihazlarından crash-logları təhlil etmək üçün Firebase Crashlytics istifadə olunur, o, stack trace-i obfuskasiya xəritəsi (Android üçün mapping.txt) ilə sinxronizasiya edir.
Android Studio View → Tool Windows → Logcat (Alt + 6) vasitəsilə əlçatan olan qrafik Logcat interfeysini təmin edir. Logcat pəncərəsi real vaxt rejimində yenilənir, qoşulmuş cihazın bütün mesajlarını göstərir və ümumi axından lazımi məlumatı ayırmaq üçün çevik filtrlər konfiqurasiya etməyə imkan verir.
Açılan siyahı Log Level mesajları minimum səviyyəyə görə filtrləyir: yalnız xəbərdarlıqları və səhvləri görmək üçün WARN seçin, VERBOSE, DEBUG və INFO-nu gizlədin. Axtarış sahəsi mesaj mətni və ya teq üzrə axtarışa imkan verir — regex dəstəklənir, bu da nümunə üzrə mesaj axtarmaq üçün əlverişlidir.
Saved Filters — Android Studio-da Logcat-ın güclü funksiyası. Yalnız tətbiqinizin teqi (tag:MyApp) və WARN+ səviyyəsi olan mesajları göstərən filtrlər yarada bilərsiniz. Filtrlər sessiyalar arasında saxlanılır və açılan siyahıdan əlçatandır. Bir neçə modullu layihələr üçün hər modul üçün ayrıca filtr yaradın.
# Tətbiq loglarını filtrləmək üçün nümunə ifadə
tag:"MyApp" level:WARN # Yalnız MyApp üçün WARN+
package:"com.mycompany" # Paketin bütün loqları
-tag:"okhttp" # OkHttp loqlarını istisna et
Logcat logları Save to File ikonası vasitəsilə mətn faylına ixrac edilə bilər. Bu, Jira-da tapşırıqlara əlavə etmək və ya uzun sessiyaları təhlil etmək üçün faydalıdır. İxrac edilmiş log istənilən mətn redaktorunda açıla bilər və nümunələri axtarmaq üçün grep tətbiq oluna bilər. Formatlaşdırılmış baxış üçün logcat-color utilitindən istifadə edin.
ADB logcat — Android Debug Bridge vasitəsilə əlçatan olan Logcat-ın konsol versiyası. Onun əsas üstünlüyü CI serverlərində, avtomatlaşdırma skriptlərində və Android Studio olmayan cihazlarda işə salma imkanıdır. ADB logcat GUI ilə eyni filtrlərin hamısını dəstəkləyir, lakin əmr sətri çevikliyi ilə.
adb logcat əmri arqumentsiz bütün buferi real vaxt rejimində göstərir. Dayandırmaq üçün Ctrl+C istifadə edin. -c bayrağı yazmağa başlamazdan əvvəl buferi təmizləyir — bu, cari testin loglarını əvvəlki mesajlardan təcrid etmək lazım olduqda əlverişlidir. -b bayrağı bufer tipini seçir: main, system, events, crash (Android 12+).
# Buferi təmizlə və MyApp teqi ilə log yazmağa başla
adb logcat -c
adb logcat MyApp:D *:S
# Logları fayla yadda saxla
adb logcat -d > logcat_dump.txt
# Prosesin PID-ə görə filtrləmə
adb logcat --pid=12345
ADB-nin unix utilitləri ilə birləşməsi maksimum çeviklik verir. Məsələn, "*:S TAG:D" filtri yalnız TAG teqi ilə DEBUG səviyyəsi və yuxarı olan mesajları göstərir, qalanlarını gizlədir. Yalnız Exception-u görmək üçün grep -i exception istifadə edin. Səhv tezliyini təhlil etmək üçün teq sütununda sort | uniq -c tətbiq edin.
CI serverlərində Logcat UI testlərinin icrası zamanı diaqnostika toplamaq üçün istifadə olunur. Tipik pipeline: testlər başlamazdan əvvəl bufer təmizlənir, testlər yerinə yetirildikdən sonra logların dump-ı tikinti artifaktı kimi saxlanılır. Test uğursuz olarsa, loglara əsasən nasazlığın ANR, işlənməmiş istisna və ya şəbəkə timeout-u səbəbindən baş verdiyini müəyyən etmək olar.
android.util.Log sinifi — Logcat-a mesaj yazmaq üçün daxili API. Log.v, Log.d, Log.i, Log.w, Log.e və Log.wtf teq (sətir) və mesaj (sətir) və ya mesaj + Throwable qəbul edir. Mesajları formatlaşdırmaq üçün String.format və ya Kotlin String templates istifadə edin — heap-də əlavə obyektlər yaradan sətir birləşməsindən çəkinin.
Timber — daxili Log API-nin çatışmazlıqlarını aradan qaldıran Jake Wharton-un məşhur kitabxanası. Timber loglamanı çağıran sinifin adına görə avtomatik teq qoyur və hər çağırışda teq ötürülməsini tələb etmir. Timber həmçinin şərti loglamanı dəstəkləyir: Release quruluşunda Timber.v və Timber.d çağırışlarını Application.onCreate-də bir sətirlə söndürmək olar.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Daxili Log API
Log.d("MainActivity", "onCreate called")
// Timber — sinif adına görə avtomatik teq
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 quruluşunda VERBOSE və DEBUG loglarını söndürmək tövsiyə olunur ki, Logcat buferinə yük azalsın və həssas məlumatların sızması istisna edilsin. Timber bu tapşırığı PlantingTree vasitəsilə həll edir: Debug flavorunda DebugTree (hər şeyi loglayır), Release-də isə CrashReportingTree (yalnız ERROR-u Crashlytics vasitəsilə loglayır) əkilir. Daxili Log API şərti loglamanı dəstəkləmir — tərtibatçı hər çağırışı if (BuildConfig.DEBUG) ilə əhatə etməlidir.
Tez-tez verilən suallar
İstifadə edin testi işə salmazdan əvvəl adb logcat -c əmrini. Alternativ olaraq Android Studio-da Logcat pəncərəsində Clear Logcat düyməsini (zibil qutusu) basın. Təmizləmə digər proseslərin sistem buferlərinə təsir etmir, yalnız cari bağlantıya təsir edir.
Yerinə yetirin buferi 2 MB-a qədər artırmaq üçün adb logcat -G 2M əmrini. Maksimum ölçü cihazdan asılıdır: Android 10+-da 16 MB-a qədər mövcuddur. Dəyişiklik cihaz yenidən başladılana qədər saxlanılır. Daimi konfiqurasiya üçün device tree-də build.prop istifadə edin.
Mümkün səbəblər: tətbiq Release rejimində işə salınıb (Timber.v/d logları söndürülüb), Logcat filtri lazımi səviyyəni gizlədir və ya yanlış cihaza qoşulmusunuz. Həmçinin Android Studio-da tətbiq prosesinin seçildiyini yoxlayın, system_process yox.
Sətri FATAL EXCEPTION ilə tapın, onun altında tam stack trace yerləşir. Birinci sətir istisna tipini və mesajı ehtiva edir, sonrakı sətirlər fayl və kod sətirini göstərən çağırış zənciridir. Bütün loglar arasında sürətli axtarış üçün grep "FATAL EXCEPTION" istifadə edin.
ANR (Application Not Responding) — əsas thread-in (UI thread) 5 saniyədən çox bloklandığı vəziyyətdir. Logcat-da ANR ActivityManager teqi ilə "ANR in ..." mətni və bütün thread-lərin stack trace-i əlavə olunmuş mesaj kimi görünür. tag:ActivityManager level:ERROR filtrindən istifadə edin.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun