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 VERBOSE
DEBUG
INFO
WARNING
ERROR
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_write
fü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_writer
hí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:
- 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. - Rendszertulajdonság-szűrés:
liblog
Rendszertulajdonságok halmazát lekérdezi alogd
címre küldendő minimális súlyossági szint meghatározásához. Ha a naplók címkéjeMyApp
, 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 (V
D
I
W
E
, vagyS
az összes napló letiltásához):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
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
.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 logcat
parancssori 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 amain system é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 main system és crash . Az összes puffer törléséhez használja a -b all -c parancsot. |
-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 K vagy 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> ...' |
í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:
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 ( Idézetek $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>' a következő példa egy allow ( adb logcat -P '"/32676 675 ~/32677 897"' Egyéb allow ( ~! 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 tag
jelzi 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_TAGS
a 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: 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. 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ésekmain
system
, éscrash
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