Logcat — je nástroj Android SDK pro prohlížení systémových zpráv a logů aplikací v reálném čase, dostupný přes ADB nebo vestavěnou konzoli Android Studio. Podle Android Developers Logcat shromažďuje zprávy ze všech procesů systému, filtruje je podle úrovní důležitosti a tagů a umožňuje vývojáři diagnostikovat chyby, sledovat provádění kódu a analyzovat výkon. Logcat — hlavní zdroj informací při ladění aplikací pro Android.
Hlavní body
Logcat — je systémový buffer Androidu, do kterého všechny procesy (včetně jádra Linux, system_server a aplikací) zapisují zprávy určitého formátu. Nástroj logcat, který je součástí Android SDK, tento buffer čte a zobrazuje zprávy v reálném čase. Od Androidu 4.1 (API 16) je přístup k Logcatu omezen: aplikace mohou číst pouze své vlastní logy a systémové logy jsou dostupné přes ADB s debug přístupem.
Každá zpráva Logcatu obsahuje pět polí: datum a čas, PID (identifikátor procesu), TID (identifikátor vlákna), úroveň logování a tag. Formát je pevný a stejný pro všechny verze Androidu. To umožňuje používat nástroje grep, awk a sed pro filtrování logů v CI/CD pipeline bez závislosti na IDE.
Logy jsou ukládány v kruhovém bufferu pevné velikosti: 256 KB pro main, 256 KB pro system a 256 KB pro events (Android 5+). Při přetečení bufferu jsou staré zprávy smazány. Vývojář může změnit velikost bufferu pomocí PROP logcat.size nebo v nastavení pro vývojáře zařízení.
Šest úrovní logování určuje důležitost zprávy. Android používá standardní úrovně podobné jiným platformám, ale s vlastními názvy konstant ve třídě Log. Výběr správné úrovně pomáhá efektivně filtrovat logy a nezahlcovat kritické zprávy vedlejšími.
| Úroveň | Konstanta | Účel | Zobrazeno ve výchozím stavu |
|---|---|---|---|
| VERBOSE | Log.v | Maximálně podrobné informace pro ladění | Ne |
| DEBUG | Log.d | Ladicí zprávy pro vývojáře | Ne |
| INFO | Log.i | Informační zprávy o činnosti aplikace | Ano |
| WARN | Log.w | Varování o potenciálních problémech | Ano |
| ERROR | Log.e | Kritické chyby a výjimky | Ano |
| ASSERT | Log.wtf | Chyby, které by v zásadě neměly nastat | Ano |
Tag — řetězec až 23 znaků identifikující zdroj zprávy. Doporučuje se používat název třídy nebo modulu jako tag: MainActivity, AuthManager, NetworkModule. To umožňuje filtrovat logy podle konkrétní komponenty aplikace. Pro jednotnost v týmu lze vytvořit konstanty tagů v samostatném souboru nebo použít knihovnu Timber, která automaticky nastaví tag podle názvu třídy.
Při neošetřené výjimce Android sám zapíše do Logcatu úplný stack trace s uvedením třídy, metody, řádku kódu a řetězce volání. Log pádu obsahuje typ výjimky (NullPointerException, RuntimeException), zprávu a posloupnost volání od bodu pádu ke vstupnímu bodu aplikace. Pro analýzu logů pádů ze zařízení uživatelů se používá Firebase Crashlytics, který synchronizuje stack trace s mapou obfuskace (mapping.txt pro Android).
Android Studio poskytuje grafické rozhraní Logcatu, přístupné přes View → Tool Windows → Logcat (Alt + 6). Okno Logcatu se aktualizuje v reálném čase, zobrazuje všechny zprávy připojeného zařízení a umožňuje konfigurovat flexibilní filtry pro oddělení potřebných informací z celkového toku.
Rozbalovací seznam Log Level filtruje zprávy podle minimální úrovně: vyberte WARN pro zobrazení pouze varování a chyb, skrytím VERBOSE, DEBUG a INFO. Pole Search umožňuje vyhledávání podle textu zprávy nebo tagu — podporuje regex, což je vhodné pro vyhledávání zpráv podle vzoru.
Saved Filters — výkonná funkce Logcatu v Android Studio. Můžete vytvořit filtr, který zobrazuje pouze zprávy s tagem vaší aplikace (tag:MyApp) a úrovní WARN+. Filtry se ukládají mezi relacemi a jsou k dispozici z rozbalovacího seznamu. Pro projekty s více moduly vytvořte samostatný filtr pro každý modul.
# Příklad výrazu pro filtrování logů aplikace
tag:"MyApp" level:WARN # Pouze WARN+ pro MyApp
package:"com.mycompany" # Všechny logy balíčku
-tag:"okhttp" # Vyloučit logy OkHttp
Logy Logcatu lze exportovat do textového souboru přes ikonu Save to File. To je užitečné pro přiložení k ticketům v Jira nebo analýzu dlouhých relací. Exportovaný log lze otevřít v libovolném textovém editoru a použít grep pro vyhledávání vzorů. Pro formátované zobrazení použijte nástroj logcat-color.
ADB logcat — konzolová verze Logcatu, dostupná přes Android Debug Bridge. Její hlavní výhodou je možnost spuštění na CI serverech, v automatizačních skriptech a na zařízeních bez Android Studio. ADB logcat podporuje všechny stejné filtry jako GUI, ale s flexibilitou příkazového řádku.
Příkaz adb logcat bez argumentů zobrazuje celý buffer v reálném čase. Pro zastavení použijte Ctrl+C. Přepínač -c čistí buffer před zahájením záznamu — to je vhodné, když je třeba izolovat logy aktuálního testu od předchozích zpráv. Přepínač -b vybírá typ bufferu: main, system, events, crash (Android 12+).
# Vyčistit buffer a zahájit záznam logů s tagem MyApp
adb logcat -c
adb logcat MyApp:D *:S
# Uložit logy do souboru
adb logcat -d > logcat_dump.txt
# Filtrování podle PID procesu
adb logcat --pid=12345
Kombinace ADB s unixovými nástroji poskytuje maximální flexibilitu. Například filtr "*:S TAG:D" zobrazuje pouze zprávy s tagem TAG úrovně DEBUG a vyšší, skrývá všechny ostatní. Pro zobrazení pouze Exception použijte grep -i exception. Pro analýzu četnosti chyb aplikujte sort | uniq -c na sloupec tagu.
Na CI serverech se Logcat používá pro sběr diagnostiky při spouštění UI testů. Typická pipeline: před spuštěním testů se buffer vyčistí, po provedení testů se dump logů uloží jako artefakt sestavení. Pokud test selže, podle logů lze určit, zda bylo selhání způsobeno ANR, neošetřenou výjimkou nebo síťovým timeoutem.
Třída android.util.Log — vestavěné API pro zápis zpráv do Logcatu. Log.v, Log.d, Log.i, Log.w, Log.e a Log.wtf přijímají tag (řetězec) a zprávu (řetězec) nebo zprávu + Throwable. Pro formátování zpráv používejte String.format nebo Kotlin String templates — vyhněte se konkatenaci řetězců, která vytváří další objekty v haldě.
Timber — populární knihovna Jakea Whartona, která odstraňuje nedostatky vestavěného Log API. Timber automaticky nastaví tag podle názvu třídy, která logování zavolala, a nevyžaduje předávání tagu při každém volání. Timber také podporuje podmíněné logování: v Release sestavení lze volání Timber.v a Timber.d vypnout jedním řádkem v Application.onCreate.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Vestavěné Log API
Log.d("MainActivity", "onCreate called")
// Timber — automatický tag podle názvu třídy
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")
}
}
}
V Release sestavení se doporučuje vypnout VERBOSE a DEBUG logy, aby se snížilo zatížení bufferu Logcatu a vyloučil únik citlivých informací. Timber řeší tento úkol pomocí PlantingTree: v Debug flavoru se zasadí DebugTree (loguje vše), v Release — CrashReportingTree (loguje pouze ERROR přes Crashlytics). Vestavěné Log API nepodporuje podmíněné logování — vývojář musí každé volání obalit do if (BuildConfig.DEBUG).
Často kladené otázky
Použijte příkaz adb logcat -c před spuštěním testu. Alternativně v Android Studio stiskněte tlačítko Clear Logcat (koš) v okně Logcatu. Čištění neovlivňuje systémové buffery jiných procesů, pouze aktuální připojení.
Proveďte adb logcat -G 2M pro zvýšení bufferu na 2 MB. Maximální velikost závisí na zařízení: na Android 10+ je k dispozici až 16 MB. Změna je zachována do restartu zařízení. Pro trvalé nastavení použijte build.prop v device tree.
Možné příčiny: aplikace běží v Release režimu (logy Timber.v/d jsou vypnuty), filtr Logcatu skrývá potřebnou úroveň nebo jste připojeni k nesprávnému zařízení. Také zkontrolujte, že v Android Studio je vybrán proces aplikace, nikoli system_process.
Najděte řádek s FATAL EXCEPTION, pod kterým je úplný stack trace. První řádek obsahuje typ výjimky a zprávu, následující řádky jsou řetězec volání s uvedením souboru a řádku kódu. Použijte grep "FATAL EXCEPTION" pro rychlé vyhledávání mezi všemi logy.
ANR (Application Not Responding) — situace, kdy je hlavní vlákno (UI thread) zablokováno déle než 5 sekund. V Logcatu se ANR zobrazí jako zpráva s tagem ActivityManager a textem "ANR in ..." s přiloženým stack trace všech vláken. Použijte filtr tag:ActivityManager level:ERROR.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také