Maybaygiare.org

Blog Network

Logcat nástroj příkazového řádku

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 (VERBOSEDEBUGINFOWARNINGERROR 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í:

  1. 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.
  2. 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 na logd. Pokud vaše záznamy mají značku MyApp, následující vlastnosti jsou kontrolovány, a očekává se, že obsahují první písmeno minimální závažnosti (VDIWE nebo S zakázat všechny protokoly):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
  • Použití filtrování: Pokud není nastavena žádná z vlastností, liblog použije minimální prioritu nastavenou __android_log_set_minimum_priority. Výchozí nastavení je INFO.
  • Zobrazení filtrování: 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 mainsystem 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 mainsystemcrash. 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> ...'
    --prune '<list> ...' -P '<white_and_black_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:

    • Dát nejvyšší dlouhověkost na konkrétní protokolování obsahu prostřednictvím UID výběry.
    • Zabránit, aby někdo (UID) nebo něco (PID) od konzumace těchto zdrojů pomoci zvýšit logspan, takže můžete mít více viditelnost do problémů, diagnostika.

    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 (whitelist) chrání váš Android Identifikační číslo (PODPORY), která se stává procesů PODPORY a GID před prohlásil pachatele, a přidání denylist pomáhá uvolnit prostor před nejhorší pachatelé jsou považovány za. Můžete si vybrat, jak aktivní je prořezávání, a můžete vypnout prořezávání, takže odstraní pouze obsah z nejstarších záznamů v každé vyrovnávací paměti protokolu.

    Citace

    adb logcat nezachová citace, takže syntaxe pro specifikaci umožňují (white) a deny (black), seznamy, je následující:

    $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>'

    následující příklad určuje umožňují (white) seznam s PID 32676 a UID 675, a popřít (black) seznam s PID 32677 a UID 897. PID 32677 na denylistu je vážen pro rychlejší prořezávání.

    adb logcat -P '"/32676 675 ~/32677 897"'

    Další umožní (white) a deny (black) příkaz seznam změn můžete použít, jsou následující:

    ~! 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: brieflongprocessrawtagthreadthreadtime, 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ávy mainsystemcrash 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

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna.