Logcat — Android SDK-ning tizim xabarlari va ilovalar loglarini real vaqt rejimida ko'rish vositasi bo'lib, ADB yoki Android Studio-ning o'rnatilgan konsoli orqali mavjud. Android Developers ma'lumotiga ko'ra, Logcat tizimning barcha jarayonlaridan xabarlarni to'playdi, ularni muhimlik darajalari va teglari bo'yicha filtrlaydi va dasturchiga xatolarni aniqlash, kod bajarilishini kuzatish va unumdorlikni tahlil qilish imkonini beradi. Logcat — Android ilovalarini tuzatishda asosiy ma'lumot manbai.
Asosiy ma'lumotlar
Logcat — bu Android-ning tizim buferi bo'lib, unga barcha jarayonlar (shu jumladan Linux yadrosi, system_server va ilovalar) ma'lum formatdagi xabarlarni yozadi. Android SDK tarkibiga kiruvchi logcat vositasi ushbu buferni o'qiydi va xabarlarni real vaqt rejimida ko'rsatadi. Android 4.1 (API 16) dan boshlab Logcat-ga kirish cheklangan: ilovalar faqat o'z loglarini o'qiy oladi, tizim loglari esa ADB orqali debug kirishi bilan mavjud.
Har bir Logcat xabari besh maydonni o'z ichiga oladi: sana va vaqt, PID (jarayon identifikatori), TID (ip identifikatori), loglash darajasi va teg. Format barcha Android versiyalari uchun bir xil va o'zgarmasdir. Bu IDE-ga bog'lanmagan holda CI/CD quvurlarida loglarni filtrlash uchun grep, awk va sed yordamchi dasturlaridan foydalanish imkonini beradi.
Loglar sobit o'lchamdagi aylanma buferda saqlanadi: main uchun 256 KB, system uchun 256 KB va events uchun 256 KB (Android 5+). Bufer to'lganda eski xabarlar o'chiriladi. Dasturchi bufer hajmini PROP logcat.size yoki qurilmaning dasturchi sozlamalarida o'zgartirishi mumkin.
Olti daraja loglash xabarning muhimligini belgilaydi. Android boshqa platformalarga o'xshash standart darajalardan foydalanadi, lekin Log klassida o'z doimiy nomlari bilan. To'g'ri darajani tanlash loglarni samarali filtrlashga va kritik xabarlarni ikkinchi darajali xabarlar bilan bo'g'maslikka yordam beradi.
| Daraja | Doimiy | Maqsad | Standart ko'rsatiladi |
|---|---|---|---|
| VERBOSE | Log.v | Maksimal batafsil tuzatish ma'lumotlari | Yo'q |
| DEBUG | Log.d | Dasturchi uchun tuzatish xabarlari | Yo'q |
| INFO | Log.i | Ilova ishi haqida ma'lumot xabarlari | Ha |
| WARN | Log.w | Potensial muammolar haqida ogohlantirishlar | Ha |
| ERROR | Log.e | Kritik xatolar va istisnolar | Ha |
| ASSERT | Log.wtf | Aslida yuz bermasligi kerak bo'lgan xatolar | Ha |
Teg (tag) — xabar manbasini aniqlaydigan 23 belgigacha bo'lgan qator. Teg sifatida sinf yoki modul nomidan foydalanish tavsiya etiladi: MainActivity, AuthManager, NetworkModule. Bu loglarni ilovaning ma'lum bir komponenti bo'yicha filtrlash imkonini beradi. Jamoada bir xillik uchun alohida faylda teg doimiylarini yaratish yoki sinf nomi bo'yicha avtomatik teg qo'yadigan Timber kutubxonasidan foydalanish mumkin.
Ishlov berilmagan istisnoda Android o'zi Logcat-ga sinf, metod, kod qatori va chaqiruv zanjirini ko'rsatgan holda to'liq stack trace yozadi. Crash-log istisno turini (NullPointerException, RuntimeException), xabarni va qulash nuqtasidan ilovaning kirish nuqtasigacha bo'lgan chaqiruvlar ketma-ketligini o'z ichiga oladi. Foydalanuvchi qurilmalaridan crash-loglarni tahlil qilish uchun Firebase Crashlytics ishlatiladi, u stack trace-ni obfuskatsiya xaritasi (Android uchun mapping.txt) bilan sinxronlashtiradi.
Android Studio View → Tool Windows → Logcat (Alt + 6) orqali mavjud bo'lgan grafik Logcat interfeysini taqdim etadi. Logcat oynasi real vaqt rejimida yangilanadi, ulangan qurilmaning barcha xabarlarini ko'rsatadi va umumiy oqimdan kerakli ma'lumotni ajratish uchun moslashuvchan filtrlarni sozlash imkonini beradi.
Ochiladigan ro'yxat Log Level xabarlarni minimal daraja bo'yicha filtrlaydi: faqat ogohlantirishlar va xatolarni ko'rish uchun WARN-ni tanlang, VERBOSE, DEBUG va INFO-ni yashiring. Qidirish maydoni xabar matni yoki teg bo'yicha qidirish imkonini beradi — regex-ni qo'llab-quvvatlaydi, bu naqsh bo'yicha xabarlarni qidirish uchun qulay.
Saved Filters — Android Studio-da Logcat-ning kuchli funksiyasi. Siz faqat ilovangiz tegi (tag:MyApp) va WARN+ darajasi bo'lgan xabarlarni ko'rsatadigan filtr yaratishingiz mumkin. Filtrlar sessiyalar orasida saqlanadi va ochiladigan ro'yxatdan mavjud. Bir nechta modulli loyihalar uchun har bir modul uchun alohida filtr yarating.
# Ilova loglarini filtrlash uchun namuna ifoda
tag:"MyApp" level:WARN # Faqat MyApp uchun WARN+
package:"com.mycompany" # Paketning barcha loglari
-tag:"okhttp" # OkHttp loglarini istisno qilish
Logcat loglari Save to File belgisi orqali matn fayliga eksport qilinishi mumkin. Bu Jira-dagi ticketlarga ilova qilish yoki uzoq sessiyalarni tahlil qilish uchun foydalidir. Eksport qilingan logni istalgan matn muharririda ochish va naqshlarni qidirish uchun grep qo'llash mumkin. Formatlangan ko'rinish uchun logcat-color yordamchi dasturidan foydalaning.
ADB logcat — Android Debug Bridge orqali mavjud bo'lgan Logcat-ning konsol versiyasi. Uning asosiy ustunligi CI serverlarida, avtomatlashtirish skriptlarida va Android Studiosiz qurilmalarda ishga tushirish imkoniyatidir. ADB logcat GUI bilan bir xil filtrlarning barchasini qo'llab-quvvatlaydi, lekin buyruq satri moslashuvchanligi bilan.
adb logcat buyrug'i argumentlarsiz butun buferni real vaqt rejimida ko'rsatadi. To'xtatish uchun Ctrl+C dan foydalaning. -c bayrog'i yozishni boshlashdan oldin buferni tozalaydi — bu joriy test loglarini oldingi xabarlardan ajratish kerak bo'lganda qulay. -b bayrog'i bufer turini tanlaydi: main, system, events, crash (Android 12+).
# Buferni tozala va MyApp tegi bilan log yozishni boshlash
adb logcat -c
adb logcat MyApp:D *:S
# Loglarni faylga saqlash
adb logcat -d > logcat_dump.txt
# Jarayonning PID bo'yicha filtrlash
adb logcat --pid=12345
ADB-ni unix yordamchi dasturlari bilan birlashtirish maksimal moslashuvchanlikni beradi. Masalan, "*:S TAG:D" filtri faqat TAG tegi bilan DEBUG darajasi va undan yuqori bo'lgan xabarlarni ko'rsatadi, qolganlarini yashiradi. Faqat Exception-ni ko'rish uchun grep -i exception dan foydalaning. Xato chastotasini tahlil qilish uchun teg ustunida sort | uniq -c qo'llang.
CI serverlarida Logcat UI testlarini bajarishda diagnostika to'plash uchun ishlatiladi. Odatdagi quvur: testlarni ishga tushirishdan oldin bufer tozalanadi, testlar bajarilgandan so'ng loglar dumpi qurilish artefakti sifatida saqlanadi. Agar test muvaffaqiyatsiz bo'lsa, loglarga asoslanib, muvaffaqiyatsizlik ANR, ishlov berilmagan istisno yoki tarmoq timeouti sababli bo'lganligini aniqlash mumkin.
android.util.Log sinfi — Logcat-ga xabarlar yozish uchun o'rnatilgan API. Log.v, Log.d, Log.i, Log.w, Log.e va Log.wtf teg (qator) va xabar (qator) yoki xabar + Throwable qabul qiladi. Xabarlarni formatlash uchun String.format yoki Kotlin String templates dan foydalaning — heap-da qo'shimcha obyektlar yaratadigan qator birlashtirishdan saqlaning.
Timber — o'rnatilgan Log API-ning kamchiliklarini bartaraf etadigan Jeyk Uortonning mashhur kutubxonasi. Timber loglashni chaqirgan sinf nomi bo'yicha avtomatik teg qo'yadi va har bir chaqiruvda teg uzatishni talab qilmaydi. Timber shuningdek shartli loglashni qo'llab-quvvatlaydi: Release qurilishida Timber.v va Timber.d chaqiruvlari Application.onCreate-da bir qator bilan o'chirilishi mumkin.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// O'rnatilgan Log API
Log.d("MainActivity", "onCreate called")
// Timber — sinf nomi bo'yicha avtomatik teg
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 qurilishida VERBOSE va DEBUG loglarini o'chirish tavsiya etiladi, bu Logcat buferiga yukni kamaytiradi va maxfiy ma'lumotlarning sizib chiqishini istisno qiladi. Timber bu vazifani PlantingTree orqali hal qiladi: Debug flavorida DebugTree (hamma narsani loglaydi), Release da CrashReportingTree (faqat ERROR-ni Crashlytics orqali loglaydi) ekiladi. O'rnatilgan Log API shartli loglashni qo'llab-quvvatlamaydi — dasturchi har bir chaqiruvni if (BuildConfig.DEBUG) bilan o'rashi kerak.
Ko'p beriladigan savollar
Foydalaning testni ishga tushirishdan oldin adb logcat -c buyrug'idan. Shu bilan birga Android Studio-da Logcat oynasidagi Clear Logcat tugmasini (axlat qutisi) bosing. Tozalash boshqa jarayonlarning tizim buferlariga ta'sir qilmaydi, faqat joriy ulanishga ta'sir qiladi.
Bajaring buferni 2 MB ga oshirish uchun adb logcat -G 2M buyrug'ini. Maksimal hajm qurilmaga bog'liq: Android 10+ da 16 MB gacha mavjud. O'zgartirish qurilma qayta ishga tushirilguncha saqlanadi. Doimiy sozlash uchun device tree da build.prop dan foydalaning.
Mumkin sabablar: ilova Release rejimida ishga tushirilgan (Timber.v/d loglari o'chirilgan), Logcat filtri kerakli darajani yashiradi yoki noto'g'ri qurilmaga ulangansiz. Shuningdek Android Studio-da ilova jarayoni tanlanganligini tekshiring, system_process emas.
Qatorni FATAL EXCEPTION bilan toping, uning ostida to'liq stack trace joylashgan. Birinchi qator istisno turi va xabarni o'z ichiga oladi, keyingi qatorlar fayl va kod qatorini ko'rsatadigan chaqiruv zanjiridir. Barcha loglar orasida tez qidirish uchun grep "FATAL EXCEPTION" dan foydalaning.
ANR (Application Not Responding) — asosiy ip (UI thread) 5 soniyadan ko'proq bloklangan holat. Logcat da ANR ActivityManager tegi bilan "ANR in ..." matni va barcha iplarning stack trace-i bilan birga keladi. tag:ActivityManager level:ERROR filtridan foydalaning.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.