Logcat je nástroj příkazového řádku, který vypíše protokol systém zpráv, včetně trasování zásobníku, když thedevice hází chyby a zprávy, které jste napsali z vaší aplikace sLog
třídy.
Tato stránka je o nástroji logcat příkazového řádku, ale můžete také zobrazit logmessages z okna Logcat v Android Studio. Forinformace o prohlížení a filtrování protokolů z Android Studio, viz zápis a zobrazení protokolů withLogcat.
Protokolování přehled systému
Android protokolování systém je soubor strukturovaných kruhové vyrovnávací paměti udržován systém proces logd
. Sada dostupných vyrovnávacích pamětí je stanovena a definována systémem. Nejdůležitější z nich jsou: main
, která obsahuje většinu aplikační protokoly, system
, který ukládá zprávy pocházející z Android OS, a crash
, který ukládá crash logy. Každý záznam má prioritu (VERBOSE
DEBUG
INFO
WARNING
ERROR
nebo FATAL
) tag, který identifikuje původ protokolu, a aktuální zpráva záznamu.
primární rozhraní pro protokolování systému je sdílená knihovna liblog
a jeho hlavička <android/log.h>
. Všechna logovací zařízení specifická pro jazyk nakonec volají funkci __android_log_write
. Ve výchozím nastavení volá funkci __android_log_logd_logger
, která odešle záznam protokolu do logd
pomocí soketu. Počínaje úrovní API 30 lze funkci protokolování změnit voláním __android_set_log_writer
. Více informací je k dispozici v dokumentaci NDK.
Protokoly zobrazí adb logcat
projít čtyři úrovně filtrování:
- Compile-time filtrování: v závislosti na nastavení kompilace, některé špalky mohou být zcela odstraněny z binární. Například Proguard může být nakonfigurován tak, aby odstranil volání do
Log.d
z kódu Java. - filtrování vlastností systému:
liblog
dotazuje sadu vlastností systému k určení minimální úrovně závažnosti, která má být odeslána nalogd
. Pokud vaše záznamy mají značkuMyApp
, následující vlastnosti jsou kontrolovány, a očekává se, že obsahují první písmeno minimální závažnosti (V
D
I
W
E
neboS
zakázat všechny protokoly):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
liblog
použije minimální prioritu nastavenou __android_log_set_minimum_priority
. Výchozí nastavení je INFO
.adb logcat
podporuje další filtry, které mohou snížit množství protokolů je uvedeno od logd
. Podrobnosti viz níže.syntaxe příkazového řádku
Chcete-li spustit logcat přes ADB shell, obecné použití je:
logcat ... ...
můžete spustit logcat
jako adb příkaz, nebo přímo v shellu vašeho emulátoru nebo připojeného zařízení. K zobrazení log výstup pomocí adb, přejděte do SDK platform-tools/
adresáře a spustit:
adb logcat
Na logcat
on-line nápovědy, spuštění zařízení a pak spustit:
adb logcat --help
můžete vytvořit shell připojení k zařízení a provedení:
$ adb shell# logcat
Volby
následující tabulka popisuje možnosti příkazového řádku logcat
.
Popis | |
---|---|
-b <buffer> |
Načíst alternativní protokolu vyrovnávací paměti pro prohlížení, například events nebo radio . Ve výchozím nastavení se používá nastavení vyrovnávací paměti main system a crash . Viz Zobrazení Alternativních Vyrovnávacích Pamětí Protokolu. |
-c, --clear |
vymažte (propláchněte) vybrané vyrovnávací paměti a ukončete. Výchozí nastavení vyrovnávací paměti je main system crash . Chcete-li vymazat všechny vyrovnávací paměti, použijte -b all -c . |
-e <expr>, --regex=<expr> |
tisknout Pouze řádky, kde je zpráva protokolu odpovídá <expr> <expr> je regulární výraz. |
-m <count>, --max-count=<count> |
ukončete po tisku <count> počet řádků. To má být spárováno s --regex , ale bude fungovat samo o sobě. |
--print |
Spárované s --regex --max-count nechat obsahu obejít regex filtr, ale ještě zastavit ve správný počet zápasů. |
-d |
vypíše protokol na obrazovku a ukončí. |
-f <filename> |
napište výstup zprávy protokolu na <filename> . Výchozí hodnota je stdout . |
-g, --buffer-size |
vytiskne velikost zadané vyrovnávací paměti protokolu a ukončí. |
-n <count> |
Nastavte maximální počet otáčí záznamy do <count> . Výchozí hodnota je 4. Vyžaduje volbu -r . |
-r <kbytes> |
otočte soubor protokolu každý <kbytes> výstupu. Výchozí hodnota je 16. Vyžaduje volbu -f . |
-s |
Ekvivalentní výraz filtru '*:S' , který nastavuje prioritu pro všechny kategorie, aby mlčel, a je používán předcházet seznam filtrovat výrazy, které přidat obsah. Chcete-li se dozvědět více, přejděte do části o filtrování výstupu protokolu. |
-v <format> |
Nastavte výstupní formát pro zprávy protokolu. Výchozí hodnota je threadtime formát. Seznam podporovaných formátů naleznete v části o výstupním formátu řídicího protokolu. |
-D, --dividers |
tisk děliče mezi každou vyrovnávací pamětí protokolu. |
-c |
propláchněte (vymažte) celý protokol a ukončete. |
-t <count> |
Tisk pouze poslední počet řádků. Tato volba zahrnuje -d funkčnost. |
-t '<time>' |
vytiskne poslední řádky od zadaného času. Tato volba zahrnuje -d funkčnost. Informace o parametrech uvozovek s vloženými mezerami najdete v možnosti-P.
adb logcat -t '01-26 20:52:41.820' |
-T <count> |
Tisk poslední počet řádků od zadaného času. Tato možnost nezahrnuje -d funkce |
-T '<time>' |
Tisk poslední řádky od zadaného času. Tato volba nezahrnuje funkci include -d . Informace o parametrech uvozovek s vloženými mezerami najdete v možnosti-P.
adb logcat -t '01-26 20:52:41.820' |
-L, -last |
Vypsat protokoly před posledním restartu. |
-B, --binary |
výstup protokolu v binárním formátu. |
-S, --statistics |
zahrňte do výstupu statistiky, které vám pomohou identifikovat a zacílit spammery protokolu. |
-G <size> |
Nastavte velikost vyrovnávací paměti log ring. Může přidat K nebo M na konci pro označení kilobajtů nebo megabajtů. |
-p, --prune |
Print (čtení) aktuální povolení (white ) a deny (black ), seznamy a trvá žádné argumenty, takto:
adb logcat -p |
-P '<list> ...' |
Write (nastavení) allow (white ) a deny (black ), seznamy, nastavit protokolování obsahu pro určitý účel. Ty poskytují smíšený obsah povolených (<white> ) a popřel (~<black> ) položek seznamu, kde <white> nebo <black> může být UID UID/PID nebo /PID. S pokyny z logcat statistiky (logcat -S ), lze považovat úpravy umožňují (white ) a deny (black ), seznamy pro účely jako jsou:
ve výchozím nastavení logovací systém automaticky zabraňuje nejhoršímu pachateli ve statistikách protokolu dynamicky, aby vytvořil prostor pro nové zprávy protokolu. Jakmile vyčerpá heuristiku, systém prořezá nejstarší záznamy, aby vytvořil prostor pro nové zprávy. Přidání allowlist ( Citace $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>' následující příklad určuje umožňují ( adb logcat -P '"/32676 675 ~/32677 897"' Další umožní ( ~! worst uid blacklist~1000/! worst pid in system (1000) |
--pid=<pid> ... |
tisknout Pouze protokoly z daných PID. |
--wrap |
spánek po dobu 2 hodin nebo když se vyrovnávací paměť chystá zabalit podle toho, co nastane dříve. Zvyšuje účinnost dotazování tím, že poskytuje probuzení o zábalu. |
Filtrování protokolu výstup
- tag zprávy log je krátký řetězec označující součást systému, ze kterého zpráva pochází (například „View“ pro zobrazení systému).
- prioritou je jedním z následujících hodnot znaků seřazených od nejnižší k nejvyšší prioritou:
-
-
V
: Verbose (nejnižší priorita) -
D
: Debug -
I
: Info -
W
: Varování -
E
: Chyba -
F
: Fatal -
S
: Tichá (nejvyšší priorita, na které se nikdy nic tisknout)
-
můžete získat seznam značek použitých v systému, s prioritami, které běží logcat a pozorování první dva sloupce z každé zprávy, vzhledem k tomu, jak <priority>/<tag>
.
následuje příklad krátkého výstupu logcat získaného příkazem logcat -v brief output
. Ukazuje, že zpráva se týká úrovně priority “ I „a značky „ActivityManager“:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
Chcete-li snížit výstup protokolu na zvládnutelnou úroveň, můžete omezit výstup protokolu pomocí výrazů filtru. Filtrování výrazů umožňuje systému označit značky – prioritní kombinace — které Vás zajímají-systém potlačuje další zprávy pro zadané značky.
filtr vyjádření vyplývá, tento formát tag:priority ...
, kde tag
označuje tag zájmu a priority
označuje nejnižší úroveň priority zprávy pro tuto značku. Zprávy pro tuto značku na nebo nad zadanou prioritou jsou zapsány do protokolu. Můžete zadat libovolný počettag:priority
specifikací v jediném výrazu filtru. Řada specifikací je oddělena mezerami.
Tady je příklad výraz filtru, který potlačuje všechny zprávy protokolu s výjimkou těch s tagem „ActivityManager“, na prioritu „Info“ nebo vyšší, a všechny zprávy záznamu s tagem „MyApp“, s prioritou „Ladění“ nebo vyšší:
adb logcat ActivityManager:I MyApp:D *:S
poslední prvek ve výše uvedeném výrazu, *:S
, nastaví prioritu pro všechny kategorie, na „silent“, čímž se zajistí pouze zprávy protokolu s „ActivityManager“ a „Aplikace“ se zobrazí. Pomocí *:S
je vynikající způsob, jak zajistit, že log výstup je omezen na filtry, které jste výslovně uvedeno — to umožňuje vaše filtry sloužit jako allowlist pro log výstup.
následující výraz filtru zobrazuje všechny zprávy protokolu s úrovní priority „varování“ a vyšší na všech značkách:
adb logcat *:W
Pokud používáte logcat z vašeho vývojového počítače (oproti běží to na remote adb shell), můžete také nastavit výchozí filtr výraz exportu hodnotu pro proměnnou prostředí ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Všimněte si, že ANDROID_LOG_TAGS
filtr není exportován do emulátoru/zařízení například, pokud používáte logcat ze vzdáleného shellu nebo pomocí adb shell logcat
.
výstupní formát řídicího protokolu
zprávy protokolu obsahují kromě značky a priority řadu polí metadat. Výstupní formát zpráv můžete upravit tak, aby zobrazovaly konkrétní pole metadat. Chcete-li tak učinit, použijte volbu -v
a zadejte jeden z podporovaných výstupních formátů uvedených níže.
-
brief
: zobrazí prioritu, značku a PID procesu vydávajícího zprávu. -
long
: zobrazení všech polí metadat a samostatných zpráv prázdnými řádky. -
process
: Zobrazit pouze PID. -
raw
: zobrazí zprávu surového protokolu bez dalších polí metadat. -
tag
: zobrazí pouze prioritu a značku. -
thread:
starší formát, který zobrazuje prioritu, PID a TID vlákna vydávajícího zprávu. -
threadtime
(výchozí): zobrazí datum, čas vyvolání, prioritu, značku, PID a TID vlákna vydávajícího zprávu. -
time
: zobrazí datum, čas vyvolání, prioritu, značku a PID procesu vydávajícího zprávu.
Při spuštění logcat, můžete zadat výstupní formát, který chcete pomocí -v
možnosti:
logcat
Tady je příklad, který ukazuje, jak generovat zprávy v thread
výstupní formát:
adb logcat -v thread
Všimněte si, že můžete zadat pouze jeden výstupní formát -v
možnost, ale můžete určit, jak mnoho modifikátory, které dávají smysl. Logcat ignoruje modifikátory, které nedávají smysl.
modifikátory formátu
modifikátory formátu mění výstup logcat z hlediska libovolné kombinace jednoho nebo více z následujících modifikátorů. Chcete-li určit modifikátor formátu, použijte volbu -v
takto:
adb logcat -b all -v color -d
každá zpráva protokolu Android má značku a prioritu s ní spojenou. Můžete kombinovat libovolný modifikátor formátu s některou z následujících možností formátu: brief
long
process
raw
tag
thread
threadtime
, and time
.
You can get the format modifier details by typing logcat -v --help
at the command line.
-
color
: Show each priority level with a different color. -
descriptive
: Show log buffer event descriptions. Tento modifikátor ovlivňuje pouze zprávy vyrovnávací paměti protokolu událostí a nemá žádný vliv na ostatní nebinární vyrovnávací paměti. Popisy událostí pocházejí z databáze Event-log-tags. -
epoch
: zobrazení času v sekundách od 1. ledna 1970. -
monotonic
: zobrazení času v sekundách procesoru od posledního spuštění. -
printable
: ujistěte se, že unikl jakýkoli obsah binárního protokolování. -
uid
: Pokud je povoleno řízení přístupu, zobrazí UID nebo Android ID přihlášení proces. -
usec
: zobrazení času s přesností na mikrosekundy. -
UTC
: zobrazení času jako UTC. -
year
: přidejte rok do zobrazeného času. -
zone
: přidejte místní Časové pásmo k zobrazenému času.
Prohlížení alternativou protokolu vyrovnávací paměti
Android protokolování systém, udržuje více kruhové vyrovnávací paměti pro zprávy záznamu, a ne všechny zprávy protokolu jsou zaslány na výchozí kruhové vyrovnávací paměti. Chcete-li zobrazit další zprávy záznamu, můžete spustit logcat
příkaz -b
možnost, aby žádost prohlížení alternativní kruhové vyrovnávací paměti. Můžete zobrazit kteroukoli z těchto alternativních vyrovnávacích pamětí:
-
radio
: zobrazení vyrovnávací paměti, která obsahuje zprávy související s rádiem / telefonií. -
events
: zobrazení interpretovaných zpráv vyrovnávací paměti událostí binárního systému. -
main
: zobrazení hlavní vyrovnávací paměti protokolu (výchozí) neobsahuje zprávy protokolu systému a selhání. -
system
: Zobrazit vyrovnávací paměť systémového protokolu (výchozí). -
crash
: zobrazení vyrovnávací paměti protokolu selhání (výchozí). -
all
: Zobrazit všechny vyrovnávací paměti. -
default
: Zprávymain
system
crash
vyrovnávací paměť.
použití -b
možnosti:
logcat
Zde je příklad, jak zobrazit log buffer obsahující rádio a telefonní zprávy:
adb logcat -b radio
můžete také zadat více -b
vlajky pro všechny nárazníky, které chcete tisknout, a to následovně:
logcat -b main -b radio -b events
můžete určit pouze jeden -b
vlajka s čárkou oddělený seznam nárazníky, například:
logcat -b main,radio,events
Přihlášení z kódu
Log
třída umožňuje vytvořit položky protokolu v kódu, které se zobrazí v logcat nástroj. Mezi běžné metody protokolování patří:
-
Log.v(String, String)
(verbose) -
Log.d(String, String)
(debug) -
Log.i(String, String)
(information) -
Log.w(String, String)
(warning) -
Log.e(String, String)
(error)
For example, using the following call:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
The logcat outputs something like:
I/MyActivity( 1557): MyClass.getView() — get item number 1