Maybaygiare.org

Blog Network

Logcat parancssori eszköz

a Logcat egy parancssori eszköz, amely a rendszerüzenetek naplóját dobja ki, beleértve a verem nyomait, amikor a készülék hibát és üzeneteket dob, amelyeket az alkalmazásból írt aLog osztály.

Ez az oldal a parancssori logcat eszközről szól, de a logmessages-t az Android Studio Logcat ablakából is megtekintheti. Forinformáció megtekintésére és szűrésére naplók Android Studio, lásd Write and View naplók withLogcat.

naplózási rendszer áttekintése

az Android naplózási rendszer a rendszerfolyamat által fenntartott strukturált kör alakú pufferek halmaza logd. A rendelkezésre álló pufferek halmazát a rendszer rögzíti és meghatározza. A legfontosabbak a következők: main, amely a legtöbb alkalmazásnaplót tárolja, system, amely az Android operációs rendszerről származó üzeneteket tárolja, és crash, amely az összeomlási naplókat tárolja. Minden naplóbejegyzésnek prioritása van (az egyik VERBOSEDEBUGINFOWARNINGERROR vagy FATAL), egy címke, amely azonosítja a napló eredetét és a tényleges naplóüzenetet.

a naplózási rendszer elsődleges interfésze a Megosztott könyvtár liblog és annak fejléce <android/log.h>. Minden Nyelvspecifikus naplózási lehetőség végül a __android_log_writefüggvényt hívja. Alapértelmezés szerint a __android_log_logd_logger függvényt hívja, amely a naplóbejegyzést a logd aljzatba küldi. A 30. API szinttől kezdve a naplózási funkció megváltoztatható a __android_set_log_writerhívásával. További információ az NDK dokumentációjában található.

aadb logcat által megjelenített naplók négy szűrési szinten mennek keresztül:

  1. fordítási idő szűrés: a fordítási beállításoktól függően egyes naplók teljesen eltávolíthatók a binárisból. Például a Proguard konfigurálható úgy, hogy eltávolítsa a Log.d hívásokat a Java kódból.
  2. Rendszertulajdonság-szűrés:liblog Rendszertulajdonságok halmazát lekérdezi alogdcímre küldendő minimális súlyossági szint meghatározásához. Ha a naplók címkéje MyApp, a következő tulajdonságok kerülnek ellenőrzésre, és várhatóan a minimális súlyosság első betűjét tartalmazzák (VDIWE, vagy S az összes napló letiltásához):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
  • alkalmazásszűrés: Ha egyik tulajdonság sincs beállítva, a liblog a __android_log_set_minimum_priorityáltal beállított minimális prioritást használja. Az alapértelmezett beállítás INFO.
  • Display filtering:adb logcat további szűrőket támogat, amelyek csökkenthetik alogdáltal megjelenített naplók mennyiségét. A részleteket lásd alább.
  • parancssori szintaxis

    a logcat adb shell-en keresztüli futtatásához az általános használat:

     logcat ... ...

    futtathatja a logcat adb parancsként vagy közvetlenül az emulátor vagy a csatlakoztatott eszköz shell parancssorában. A napló kimenet adb használatával történő megtekintéséhez keresse meg az SDK platform-tools/ könyvtárat, majd hajtsa végre:

    adb logcat

    For logcat online súgó, indítson el egy eszközt, majd hajtsa végre:

    adb logcat --help

    létrehozhat egy shell kapcsolatot egy eszközzel, és végrehajthatja:

    $ adb shell# logcat

    Options

    az alábbi táblázat a logcatparancssori beállításait ismerteti.

    opció leírás
    -b <buffer> töltsön be egy alternatív naplópuffert a megtekintéshez, például events vagy radio. Alapértelmezés szerint amainsystem éscrash pufferkészletet használjuk. Lásd: Alternatív Naplópufferek Megtekintése.
    -c, --clear törölje (öblítse le) a kiválasztott puffereket, majd lépjen ki. Az alapértelmezett pufferkészlet mainsystem és crash. Az összes puffer törléséhez használja a -b all -cparancsot.
    -e <expr>, --regex=<expr> csak olyan sorok nyomtatása, ahol a naplóüzenet egyezik <expr> ahol <expr> reguláris kifejezés.
    -m <count>, --max-count=<count> Kilépés a nyomtatás után <count> sorok száma. Ez azt jelentette, hogy párosítva --regex, de működni fog a saját.
    --print párosítva --regexés --max-count hogy a tartalom megkerülje a regex szűrőt, de még mindig a megfelelő számú találatnál álljon meg.
    -d kiírja a naplót a képernyőre, majd kilép.
    -f <filename> írja be a napló üzenet kimenetét a <filename>. Az alapértelmezett érték stdout.
    -g, --buffer-size nyomtassa ki a megadott naplópuffer méretét és lépjen ki.
    -n <count> állítsa be az elforgatott naplók maximális számát <count>. Az alapértelmezett érték 4. A -r opciót igényli.
    -r <kbytes> forgassa el a naplófájlt minden <kbytes> kimeneten. Az alapértelmezett érték 16. A -f opciót igényli.
    -s egyenértékű a '*:S' szűrőkifejezéssel, amely az összes címke prioritását némára állítja, és a tartalom hozzáadására szolgáló szűrőkifejezések listáját megelőzi. Ha többet szeretne megtudni, lépjen a naplókimenet szűréséről szóló szakaszra.
    -v <format> állítsa be a naplóüzenetek kimeneti formátumát. Az alapértelmezett threadtime formátum. A támogatott formátumok listáját a Vezérlőnapló kimeneti formátuma című részben találja.
    -D, --dividers nyomtasson osztókat az egyes naplópufferek között.
    -c öblítse le (törölje) a teljes naplót és lépjen ki.
    -t <count> csak a legutóbbi sorszámot nyomtassa ki. Ez az opció tartalmazza a -d funkciókat.
    -t '<time>' nyomtassa ki a legutóbbi sorokat a megadott idő óta. Ez az opció tartalmazza a -d funkciókat. A beágyazott terek paramétereinek idézésével kapcsolatos információkért lásd a-P opciót.

    adb logcat -t '01-26 20:52:41.820'
    -T <count> nyomtassa ki a megadott idő óta a legutóbbi sorszámot. Ez az opció nem tartalmazza a -d funkcionalitás
    -T '<time>' a megadott idő óta a legutóbbi sorok nyomtatása. Ez az opció nem tartalmazza az include -d funkciókat. A beágyazott terek paramétereinek idézésével kapcsolatos információkért lásd a-P opciót.

    adb logcat -t '01-26 20:52:41.820'
    -L, -last Dump a naplókat az utolsó újraindítás előtt.
    -B, --binary adja ki a naplót binárisan.
    -S, --statistics statisztikákat is tartalmazzon a kimeneten, hogy segítsen azonosítani és megcélozni a log spammereket.
    -G <size> állítsa be a naplógyűrű-puffer méretét. Hozzáadhat Kvagy M a végén kilobájt vagy megabájt jelzésére.
    -p, --prune nyomtassa ki (olvassa) az aktuális engedélyezést (white) és tagadja (black) felsorolja és nem vesz argumentumokat, az alábbiak szerint:

    adb logcat -p
    -P '<list> ...'
    --prune '<list> ...' -P '<white_and_black_list>'
    írja be (Állítsa be) az Allow (white) és deny (black) listákat a tartalom naplózása meghatározott célra. Az engedélyezett (<white>) és elutasított (~<black>) Listabejegyzések vegyes tartalmát adja meg, ahol a <white> vagy <black> lehet UID, UID/PID vagy /PID. A logcat statisztikák útmutatásával (logcat -S) az allow (white) és a deny (black) listák kiigazításait figyelembe lehet venni olyan célokra, mint például:

    • a legmagasabb élettartamot biztosítja az adott naplózási tartalomnak az UID-beállításokon keresztül.
    • megakadályozza, hogy valaki (UID) vagy valami (PID) felhasználja ezeket az erőforrásokat a logspan növelése érdekében, hogy jobban láthassa a diagnosztizált problémákat.

    alapértelmezés szerint a naplózási rendszer automatikusan megakadályozza, hogy a naplóstatisztikában a legrosszabb elkövető dinamikusan helyet biztosítson az új naplóüzeneteknek. Miután kimerítette a heurisztikát, a rendszer szilva a legrégebbi bejegyzéseket, hogy helyet biztosítson az új üzeneteknek.

    allowlist hozzáadása (whitelist) megvédi az Android azonosító számát (AID), amely a folyamatok támogatásává és GID-jévé válik attól, hogy elkövetőnek nyilvánítsák, és egy denylist hozzáadása segít felszabadítani a helyet, mielőtt a legrosszabb elkövetőket figyelembe veszik. Kiválaszthatja, hogy mennyire aktív a metszés, és kikapcsolhatja a metszést, így csak az egyes naplópufferek legrégebbi bejegyzéseiből távolítja el a tartalmat.

    Idézetek

    adb logcat nem őrzi meg az idézőjeleket, így az allow (white) és deny (black) listák megadásának szintaxisa a következő:

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

    a következő példa egy allow (white) listát ad meg a 32676 és a 675 pid azonosítóval, valamint egy deny (black) listát a 32677 és a 897 uid azonosítóval. A denylist 32677 PID-jét súlyozzák a gyorsabb metszés érdekében.

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

    Egyéb allow (white) és deny (black) lista parancs variációk használhatja a következők:

    ~! worst uid blacklist~1000/! worst pid in system (1000)
    --pid=<pid> ... csak a naplókat nyomtatja ki a megadott PID-ből.
    --wrap aludjon 2 órán át, vagy amikor a puffer hamarosan lezárja azt, amelyik előbb bekövetkezik. Javítja a közvélemény-kutatás hatékonyságát azáltal, hogy körülbelül-to-wrap ébresztés.

    Naplókimenet szűrése

    • a naplóüzenet címkéje egy rövid karakterlánc, amely jelzi azt a rendszerösszetevőt, amelyből az üzenet származik (például a nézetrendszer” nézete”).
    • a prioritás a következő karakterértékek egyike, a legalacsonyabbtól a legmagasabb prioritásig rendezve:
      • V: bőbeszédű (legalacsonyabb prioritás)
      • D: Debug
      • I: info
      • W: Figyelem
      • E: Error
      • F: végzetes
      • S: Csendes (legmagasabb prioritású, amelyre soha semmit nem nyomtatnak)

    a logcat futtatásával és az egyes üzenetek első két oszlopának megfigyelésével megszerezheti a rendszerben használt címkék listáját, amelyek <priority>/<tag>.

    a következő példa a logcat -v brief output paranccsal kapott rövid logcat kimenetre. Ez azt mutatja, hogy az üzenet az “I” prioritási szintre vonatkozik, és az “ActivityManager”címkével rendelkezik:

    I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}

    a naplókimenet kezelhető szintre csökkentéséhez szűrőkifejezésekkel korlátozhatja a naplókimenetet. A szűrő kifejezések lehetővé teszik, hogy jelezze a rendszer számára az Önt érdeklő címkéket-prioritási kombinációkat — a rendszer elnyomja a megadott címkék egyéb üzeneteit.

    a szűrőkifejezés ezt a formátumot követi tag:priority ..., ahol tagjelzi az érdeklődő címkét, és priority jelzi a címke jelentésének minimális prioritási szintjét. Az adott címkéhez tartozó, a megadott prioritáson vagy annál magasabb üzenetek a naplóba kerülnek. Tetszőleges számú tag:priority specifikációt adhat meg egyetlen szűrő kifejezésben. A specifikációk sorozata szóközökkel van elválasztva.

    íme egy példa egy szűrőkifejezésre, amely elnyomja az összes naplóbejegyzést, kivéve azokat, amelyek “ActivityManager” címkével rendelkeznek, az “Info” vagy annál magasabb prioritással, valamint az összes “MyApp” címkével ellátott naplóbejegyzést, a “Debug” vagy annál magasabb prioritással:

    adb logcat ActivityManager:I MyApp:D *:S

    a fenti kifejezés utolsó eleme, *:S, az összes címke prioritási szintjét “csendes” értékre állítja, így biztosítva, hogy csak az “ActivityManager” és a “MyApp” naplóüzenetek jelenjenek meg. A *:S használata kiváló módja annak, hogy a naplókimenet a kifejezetten megadott szűrőkre korlátozódjon — lehetővé teszi, hogy a szűrők a naplókimenet allowlist-ként szolgáljanak.

    a következő szűrőkifejezés az összes címkén megjeleníti az összes “figyelmeztetés” vagy annál magasabb prioritású naplóüzenetet:

    adb logcat *:W

    Ha a logcat-ot a fejlesztő számítógépéről futtatja (szemben a távoli adb shell-en történő futtatással), akkor alapértelmezett szűrő kifejezést is beállíthat a környezeti változó értékének exportálásával ANDROID_LOG_TAGS:

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

    vegye figyelembe, hogy

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

    ANDROID_LOG_TAGSa szűrőt nem exportálja az emulátor/eszközpéldányba, ha a logcat-ot távoli héjból futtatja, vagy a adb shell logcat használatával.

    Vezérlőnapló kimeneti formátum

    a naplóüzenetek számos metaadat mezőt tartalmaznak a címke és a prioritás mellett. Módosíthatja az üzenetek kimeneti formátumát úgy, hogy azok egy adott metaadat mezőt jelenítsenek meg. Ehhez használja a -v opciót, és adja meg az alább felsorolt támogatott kimeneti formátumok egyikét.

    • brief: az üzenetet kibocsátó folyamat prioritásának, címkéjének és PID-jének megjelenítése.
    • long: minden metaadat mező és különálló üzenet megjelenítése üres sorokkal.
    • process: Csak a PID megjelenítése.
    • raw: A nyers naplóüzenet megjelenítése más metaadatmezők nélkül.
    • tag: csak a prioritás és a címke megjelenítése.
    • thread: egy örökölt formátum, amely megmutatja az üzenetet kibocsátó szál prioritását, PID-jét és TID-jét.
    • threadtime (alapértelmezett): az üzenetet kibocsátó szál dátumának, meghívási idejének, prioritásának, címkéjének, PID-jének és TID-jének megjelenítése.
    • time: az üzenetet kibocsátó folyamat dátumának, meghívási idejének, prioritásának, címkéjének és PID-jének megjelenítése.

    a logcat indításakor megadhatja a kívánt kimeneti formátumot a -v opció:

     logcat 

    íme egy példa, amely megmutatja, hogyan lehet üzeneteket generálni thread kimeneti formátum:

    adb logcat -v thread

    vegye figyelembe, hogy csak egy kimeneti formátumot adhat meg a -v opcióval, de megadhat annyi módosítót, amelynek van értelme. A Logcat figyelmen kívül hagyja azokat a módosítókat, amelyeknek nincs értelme.

    Formátummódosítók

    a Formátummódosítók a logcat kimenetét az alábbi módosítók közül egy vagy több kombinációjával módosítják. A formátummódosító megadásához használja a -v opciót, az alábbiak szerint:

    adb logcat -b all -v color -d

    minden Android naplóüzenethez tartozik egy címke és egy prioritás. Bármilyen formátummódosítót kombinálhat a következő formátumbeállítások bármelyikével: 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. Ez a módosító csak az Eseménynapló-pufferüzeneteket érinti, a többi nem bináris pufferre nincs hatással. Az eseményleírások az Eseménynapló-címkék adatbázisból származnak.
    • epoch: megjelenítési idő másodpercben kezdve Jan 1, 1970.
    • monotonic: megjelenítési idő CPU másodpercben Az utolsó indítástól kezdve.
    • printable: győződjön meg arról, hogy minden bináris naplózási tartalom kikerült.
    • uid: ha a hozzáférési vezérlők megengedik, jelenítse meg a naplózott folyamat UID vagy Android azonosítóját.
    • usec: az idő pontos megjelenítése mikroszekundumig.
    • UTC: az idő megjelenítése UTC-ként.
    • year: adja hozzá az évet a megjelenített időhöz.
    • zone: adja hozzá a helyi időzónát a megjelenített időhöz.

    alternatív naplózási pufferek megtekintése

    az Android naplózási rendszere több kör alakú puffert tart fenn a naplóüzenetekhez, és nem minden naplóüzenet kerül az alapértelmezett kör alakú pufferbe. További naplóüzenetek megtekintéséhez futtathatja a logcat parancsot a -b opcióval, hogy alternatív körpuffer megtekintését kérje. Ezen alternatív pufferek bármelyikét megtekintheti:

    • radio: A rádió – /telefonáláshoz kapcsolódó üzeneteket tartalmazó puffer megtekintése.
    • events: az értelmezett bináris rendszeresemény-puffer üzenetek megtekintése.
    • main: A fő naplópuffer megtekintése (alapértelmezett) nem tartalmaz rendszer-és összeomlásnapló üzeneteket.
    • system: Tekintse meg a rendszernapló puffert (alapértelmezett).
    • crash: az ütközési napló pufferének megtekintése (alapértelmezett).
    • all: az összes puffer megtekintése.
    • default: jelentések mainsystem, és crash pufferek.

    a -b opció használata:

     logcat 

    íme egy példa a rádió-és telefonos üzeneteket tartalmazó naplópuffer megtekintésére:

    adb logcat -b radio

    több -b jelzőt is megadhat az összes nyomtatni kívánt pufferhez, az alábbiak szerint:

    logcat -b main -b radio -b events

    megadhat egyetlen -b zászlót egy a pufferek vesszővel elválasztott listája, például:

    logcat -b main,radio,events

    naplózás a kódból

    a Log osztály lehetővé teszi, hogy naplóbejegyzéseket hozzon létre a kódban, amelyek a logcat eszközben jelennek meg. A gyakori naplózási módszerek a következők:

    • 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

    Vélemény, hozzászólás?

    Az e-mail-címet nem tesszük közzé.