Logcat — este instrumentul Android SDK pentru vizualizarea mesajelor sistemice și a logurilor aplicațiilor în timp real, disponibil prin ADB sau consola integrată Android Studio. Conform Android Developers, Logcat colectează mesaje de la toate procesele sistemului, le filtrează după nivelurile de importanță și taguri și permite dezvoltatorului să diagnosticheze erori, să urmărească execuția codului și să analizeze performanța. Logcat — sursa principală de informații la depanarea aplicațiilor Android.
Principalele
Logcat — este un buffer sistemic Android în care toate procesele (inclusiv nucleul Linux, system_server și aplicațiile) scriu mesaje într-un format specific. Instrumentul logcat, care face parte din Android SDK, citește acest buffer și afișează mesajele în timp real. Începând cu Android 4.1 (API 16), accesul la Logcat este restricționat: aplicațiile pot citi doar propriile loguri, iar logurile sistemice sunt disponibile prin ADB cu acces debug.
Fiecare mesaj Logcat conține cinci câmpuri: data și ora, PID (identificatorul procesului), TID (identificatorul firului de execuție), nivelul de logare și tagul. Formatul este fix și același pentru toate versiunile Android. Aceasta permite utilizarea utilitarelor grep, awk și sed pentru filtrarea logurilor în pipeline-uri CI/CD fără dependență de IDE.
Logurile sunt stocate într-un buffer circular de dimensiune fixă: 256 KB pentru main, 256 KB pentru system și 256 KB pentru events (Android 5+). La umplerea bufferului, mesajele vechi sunt șterse. Dezvoltatorul poate modifica dimensiunea bufferului prin PROP logcat.size sau în setările dezvoltatorului dispozitivului.
Șase niveluri de logare determină importanța mesajului. Android folosește niveluri standard similare altor platforme, dar cu propriile nume de constante în clasa Log. Alegerea nivelului corect ajută la filtrarea eficientă a logurilor și la evitarea înecarea mesajelor critice în cele secundare.
| Nivel | Constanta | Destinație | Afișat implicit |
|---|---|---|---|
| VERBOSE | Log.v | Informații de depanare maxim detaliate | Nu |
| DEBUG | Log.d | Mesaje de depanare pentru dezvoltator | Nu |
| INFO | Log.i | Mesaje informaționale despre funcționarea aplicației | Da |
| WARN | Log.w | Avertismente despre probleme potențiale | Da |
| ERROR | Log.e | Erori critice și excepții | Da |
| ASSERT | Log.wtf | Erori care nu ar trebui să apară în principiu | Da |
Tagul — un șir de până la 23 de caractere care identifică sursa mesajului. Se recomandă utilizarea numelui clasei sau modulului ca tag: MainActivity, AuthManager, NetworkModule. Aceasta permite filtrarea logurilor după o componentă specifică a aplicației. Pentru uniformitate în echipă, se pot crea constante de taguri într-un fișier separat sau se poate folosi biblioteca Timber care plasează automat tagul după numele clasei.
La o excepție negestionată, Android scrie automat în Logcat un stack trace complet cu indicarea clasei, metodei, liniei de cod și a lanțului de apeluri. Logul de crash conține tipul excepției (NullPointerException, RuntimeException), mesajul și succesiunea apelurilor de la punctul de cădere până la punctul de intrare al aplicației. Pentru analiza logurilor de crash de pe dispozitivele utilizatorilor se folosește Firebase Crashlytics, care sincronizează stack trace cu harta de ofuscare (mapping.txt pentru Android).
Android Studio oferă o interfață grafică Logcat, accesibilă prin View → Tool Windows → Logcat (Alt + 6). Fereastra Logcat se actualizează în timp real, afișează toate mesajele dispozitivului conectat și permite configurarea de filtre flexibile pentru extragerea informațiilor necesare din fluxul general.
Lista derulantă Log Level filtrează mesajele după nivelul minim: selectați WARN pentru a vedea doar avertismente și erori, ascunzând VERBOSE, DEBUG și INFO. Câmpul Search permite căutarea după textul mesajului sau tag — suportă regex, ceea ce este convenabil pentru căutarea mesajelor după un model.
Saved Filters — o funcție puternică a Logcat în Android Studio. Puteți crea un filtru care arată doar mesajele cu tagul aplicației dvs. (tag:MyApp) și nivelul WARN+. Filtrele se salvează între sesiuni și sunt disponibile din lista derulantă. Pentru proiecte cu mai multe module, creați un filtru separat pentru fiecare modul.
# Exemplu de expresie pentru filtrarea logurilor aplicației
tag:"MyApp" level:WARN # Doar WARN+ pentru MyApp
package:"com.mycompany" # Toate logurile pachetului
-tag:"okhttp" # Exclude logurile OkHttp
Logurile Logcat pot fi exportate într-un fișier text prin pictograma Save to File. Acest lucru este util pentru atașarea la tichete în Jira sau analiza sesiunilor lungi. Logul exportat poate fi deschis în orice editor de text și se poate aplica grep pentru căutarea modelelor. Pentru vizualizare formatată, utilizați utilitarul logcat-color.
ADB logcat — versiunea consolă a Logcat, disponibilă prin Android Debug Bridge. Principalul său avantaj este posibilitatea de a rula pe servere CI, în scripturi de automatizare și pe dispozitive fără Android Studio. ADB logcat suportă toate aceleași filtre ca și GUI, dar cu flexibilitatea liniei de comandă.
Comanda adb logcat fără argumente afișează întregul buffer în timp real. Pentru oprire, utilizați Ctrl+C. Flag-ul -c șterge bufferul înainte de începerea înregistrării — este convenabil când trebuie să izolați logurile testului curent de mesajele anterioare. Flag-ul -b selectează tipul de buffer: main, system, events, crash (Android 12+).
# Șterge bufferul și începe înregistrarea logurilor cu tagul MyApp
adb logcat -c
adb logcat MyApp:D *:S
# Salvează logurile în fișier
adb logcat -d > logcat_dump.txt
# Filtrare după PID-ul procesului
adb logcat --pid=12345
Combinarea ADB cu utilitarele unix oferă o flexibilitate maximă. De exemplu, filtrul "*:S TAG:D" arată doar mesajele cu tagul TAG de nivel DEBUG și superior, ascunzând toate celelalte. Pentru vizualizarea doar a Exception, utilizați grep -i exception. Pentru analiza frecvenței erorilor, aplicați sort | uniq -c pe coloana tagului.
Pe servere CI, Logcat este utilizat pentru colectarea diagnosticelor la rularea testelor UI. Un pipeline tipic: înainte de rularea testelor, bufferul este șters; după executarea testelor, dump-ul logurilor este salvat ca artefact al build-ului. Dacă testul eșuează, pe baza logurilor se poate determina dacă eșecul a fost cauzat de ANR, o excepție negestionată sau un timeout de rețea.
Clasa android.util.Log — API-ul integrat pentru scrierea mesajelor în Logcat. Log.v, Log.d, Log.i, Log.w, Log.e și Log.wtf primesc un tag (șir) și un mesaj (șir) sau mesaj + Throwable. Pentru formatarea mesajelor, utilizați String.format sau Kotlin String templates — evitați concatenarea șirurilor care creează obiecte suplimentare în heap.
Timber — o bibliotecă populară a lui Jake Wharton care elimină deficiențele API-ului Log integrat. Timber plasează automat tagul după numele clasei care a apelat logarea și nu necesită transmiterea tagului în fiecare apel. Timber suportă, de asemenea, logarea condiționată: în build-ul Release, apelurile Timber.v și Timber.d pot fi dezactivate cu o singură linie în Application.onCreate.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// API Log integrat
Log.d("MainActivity", "onCreate called")
// Timber — tag automat după numele clasei
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")
}
}
}
În build-ul Release se recomandă dezactivarea logurilor VERBOSE și DEBUG pentru a reduce încărcarea bufferului Logcat și a exclude scurgerea de informații sensibile. Timber rezolvă această sarcină prin PlantingTree: în flavor-ul Debug se plantează DebugTree (loghează tot), în Release — CrashReportingTree (loghează doar ERROR prin Crashlytics). API-ul Log integrat nu suportă logarea condiționată — dezvoltatorul trebuie să învelească fiecare apel în if (BuildConfig.DEBUG).
Întrebări frecvente
Utilizați comanda adb logcat -c înainte de a rula testul. Alternativ, în Android Studio apăsați butonul Clear Logcat (coșul de gunoi) în fereastra Logcat. Ștergerea nu afectează bufferele sistemice ale altor procese, doar conexiunea curentă.
Executați adb logcat -G 2M pentru a mări bufferul la 2 MB. Dimensiunea maximă depinde de dispozitiv: pe Android 10+ este disponibil până la 16 MB. Modificarea se păstrează până la repornirea dispozitivului. Pentru configurarea permanentă, utilizați build.prop în device tree.
Cauze posibile: aplicația rulează în modul Release (logurile Timber.v/d sunt dezactivate), filtrul Logcat ascunde nivelul necesar sau sunteți conectat la dispozitivul greșit. De asemenea, verificați că în Android Studio este selectat procesul aplicației, nu system_process.
Găsiți linia cu FATAL EXCEPTION, sub care se află stack trace-ul complet. Prima linie conține tipul excepției și mesajul, liniile următoare — lanțul de apeluri cu indicarea fișierului și liniei de cod. Utilizați grep "FATAL EXCEPTION" pentru căutare rapidă printre toate logurile.
ANR (Application Not Responding) — situația în care firul principal (UI thread) este blocat mai mult de 5 secunde. În Logcat, ANR apare ca un mesaj cu tagul ActivityManager și textul "ANR in ..." cu stack trace-ul tuturor firelor atașat. Utilizați filtrul tag:ActivityManager level:ERROR.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și