Logcat — ce este, niveluri de logare și lucrul cu logurile

Autor: IT Sectr Publicat: 2026-05-06 Timp de citire: 8 min

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 — fereastra consolă în Android Studio pentru vizualizarea logurilor sistemice Android în timp real
  • Niveluri de loguri — VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT — determină importanța mesajului și pragul de filtrare
  • Filtrarea după taguri, niveluri și cuvinte cheie permite extragerea logurilor unei aplicații specifice din fluxul general
  • ADB logcat — comandă terminal pentru acces la loguri fără Android Studio, prin USB sau Wi-Fi
  • Loguri de crash Exception cu stack trace ajung automat în Logcat și conțin diagnostica completă a căderii

Ce este Logcat în Android

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.

Niveluri de loguri și taguri: structura mesajului Logcat

Ș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.

NivelConstantaDestinațieAfișat implicit
VERBOSELog.vInformații de depanare maxim detaliateNu
DEBUGLog.dMesaje de depanare pentru dezvoltatorNu
INFOLog.iMesaje informaționale despre funcționarea aplicațieiDa
WARNLog.wAvertismente despre probleme potențialeDa
ERRORLog.eErori critice și excepțiiDa
ASSERTLog.wtfErori care nu ar trebui să apară în principiuDa

Taguri: organizarea mesajelor pe module

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.

Loguri de crash și stack trace al excepției

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).

Logcat în Android Studio: interfață, filtre și căutare

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.

Filtrare după nivel și tag

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.

Filtre salvate

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.

text
# 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

Export și analiză

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: comenzi terminal pentru lucru avansat

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ă.

Comenzi de bază

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+).

bash
# Ș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

Filtrare cu grep și awk

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.

Logcat în CI/CD

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.

Logarea în cod: Log.d, Log.e și Timber

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.

Biblioteca Timber

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.

kotlin
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")
        }
    }
}

Logare condiționată pentru Release

Î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

Cum să șterg bufferul Logcat înainte de a rula un test?

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ă.

Cum să măresc dimensiunea bufferului Logcat?

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.

De ce Logcat nu afișează logurile aplicației?

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.

Cum să citesc logurile de crash din Logcat?

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.

Ce este ANR și cum îl detectez în Logcat?

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

  • Logcat — buffer sistemic Android, accesibil prin ADB și fereastra integrată Android Studio
  • Șase niveluri de logare (VERBOSE — ASSERT) determină importanța și pragul de filtrare a mesajelor
  • Tagurile permit gruparea mesajelor pe module ale aplicației pentru filtrare rapidă
  • ADB logcat cu grep/awk este mai flexibil decât interfața GUI și potrivit pentru pipeline-uri CI/CD
  • Timber simplifică logarea, plasează automat taguri și dezactivează nivelurile Debug în Release
  • Logurile de crash cu Exception și stack trace ajung automat în Logcat la fiecare cădere
  • Filtrele salvate în Android Studio accelerează analiza zilnică a logurilor

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.

Discutați proiectul

Citiți și