Logcat este un instrument de linie de comandă care aruncă un jurnal de mesaje de sistem, inclusiv urme de stivă atunci când dispozitivul aruncă o eroare și mesajele pe care le-ați scris din aplicația dvs. cuLog
clasă.
această pagină este despre instrumentul logcat din linia de comandă, dar puteți vizualiza și logmessages din fereastra Logcat din Android Studio. Pentru informații despre vizualizarea și filtrarea jurnalelor din Android Studio, consultați scrierea și Vizualizarea jurnalelor cu logcat.
Prezentare generală a sistemului de logare
sistemul de logare Android este un set de tampoane circulare structurate întreținute de procesul de sistemlogd
. Setul de tampoane disponibile este fixat și definit de sistem. Cele mai relevante sunt: main
, care stochează majoritatea jurnalelor de aplicații, system
, care stochează mesaje provenite din Sistemul de operare Android și crash
, care stochează jurnalele de avarie. Fiecare intrare jurnal are o prioritate (una dintre VERBOSE
DEBUG
INFO
WARNING
ERROR
sau FATAL
), o etichetă care identifică originea jurnalului și mesajul jurnal real.
interfața principală a sistemului de logare este biblioteca partajată liblog
și antetul său <android/log.h>
. Toate facilitățile de logare specifice limbii apelează în cele din urmă funcția __android_log_write
. În mod implicit, apelează funcția __android_log_logd_logger
, care trimite intrarea în jurnal la logd
folosind o priză. Începând cu nivelul API 30, funcția de înregistrare poate fi modificată apelând __android_set_log_writer
. Mai multe informații sunt disponibile în documentația NDK.
jurnalele afișate deadb logcat
suferă patru niveluri de filtrare:
- filtrare în timp de compilare: în funcție de setările de compilare, unele jurnale pot fi complet eliminate din binar. De exemplu, Proguard poate fi configurat pentru a elimina apelurile către
Log.d
din codul Java. - sistem de filtrare proprietate:
liblog
interogări un set de proprietăți de sistem pentru a determina nivelul minim de severitate care urmează să fie trimise lalogd
. Dacă jurnalele dvs. au etichetaMyApp
, sunt bifate următoarele proprietăți și se așteaptă să conțină prima literă a severității minime (V
D
I
W
E
, sauS
pentru a dezactiva toate jurnalele):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
liblog
folosește prioritatea minimă setată de __android_log_set_minimum_priority
. Setarea implicită este INFO
.adb logcat
acceptă filtre suplimentare care pot reduce cantitatea de jurnale afișate dinlogd
. A se vedea mai jos pentru detalii.sintaxa liniei de comandă
pentru a rula logcat prin shell-ul adb, utilizarea generală este:
logcat ... ...
puteți rulalogcat
ca comandă adb sau direct într-un prompt shell al emulatorului sau al dispozitivului conectat. Pentru a vizualiza ieșire jurnal folosind adb, navigați la SDK-ul platform-tools/
director și executa:
adb logcat
pentru logcat
ajutor online, porniți un dispozitiv și apoi executa:
adb logcat --help
puteți crea o conexiune shell la un dispozitiv și executa:
$ adb shell# logcat
Opțiuni
următorul tabel descrie opțiunile liniei de comandă alelogcat
.
opțiune | descriere |
---|---|
-b <buffer> |
încărcați un tampon de jurnal alternativ pentru vizualizare, cum ar fi events sau radio . Setul tampon main system șicrash este utilizat în mod implicit. Consultați Vizualizarea Tampoanelor De Jurnal Alternative. |
-c, --clear |
ștergeți (spălați) tampoanele selectate și ieșiți. Setul tampon implicit este main system șicrash . Pentru a șterge toate tampoanele, utilizați -b all -c . |
-e <expr>, --regex=<expr> |
numai linii de imprimare în cazul în care mesajul jurnal se potrivește<expr> unde<expr> este o expresie regulată. |
-m <count>, --max-count=<count> |
ieșiți după imprimare<count> numărul de linii. Acest lucru este menit să fie asociat cu --regex , dar va funcționa pe cont propriu. |
--print |
asociat cu--regex și--max-count pentru a lăsa conținutul să ocolească filtrul regex, dar totuși să se oprească la numărul corect de potriviri. |
-d |
aruncați jurnalul pe ecran și ieșiți. |
-f <filename> |
scrieți ieșirea mesajului jurnal la<filename> . Valoarea implicită este stdout . |
-g, --buffer-size |
imprimați dimensiunea bufferului de jurnal specificat și ieșirile. |
-n <count> |
Setați numărul maxim de jurnale rotite la<count> . Valoarea implicită este 4. Necesită opțiunea -r . |
-r <kbytes> |
rotiți fișierul jurnal la fiecare<kbytes> de ieșire. Valoarea implicită este 16. Necesită opțiunea -f . |
-s |
echivalent cu expresia filtrului'*:S' , care stabilește prioritatea pentru toate etichetele la silențios și este utilizată pentru a precede o listă de expresii de filtrare care adaugă conținut. Pentru a afla mai multe, accesați secțiunea despre filtrarea ieșirii jurnalului. |
-v <format> |
Setați formatul de ieșire pentru mesajele jurnal. Valoarea implicită este threadtime format. Pentru o listă de formate acceptate, accesați secțiunea Despre formatul de ieșire jurnal de Control. |
-D, --dividers |
divizoare de imprimare între fiecare tampon jurnal. |
-c |
spălați (ștergeți) întregul jurnal și ieșiți. |
-t <count> |
imprimați numai cel mai recent număr de linii. Această opțiune include-d funcționalitate. |
-t '<time>' |
imprimați cele mai recente linii de la ora specificată. Această opțiune include-d funcționalitate. Consultați opțiunea-P pentru informații despre citarea parametrilor cu spații încorporate.
adb logcat -t '01-26 20:52:41.820' |
-T <count> |
imprimați cel mai recent număr de linii de la ora specificată. Această opțiune nu include-d funcționalitate |
-T '<time>' |
imprimați cele mai recente linii de la ora specificată. Această opțiune nu include include -d funcționalitate. Consultați opțiunea-P pentru informații despre citarea parametrilor cu spații încorporate.
adb logcat -t '01-26 20:52:41.820' |
-L, -last |
aruncați jurnalele înainte de ultima repornire. |
-B, --binary |
ieșire jurnal în binar. |
-S, --statistics |
includeți statistici în ieșire pentru a vă ajuta să identificați și să vizați spammerii de jurnal. |
-G <size> |
Setați dimensiunea tamponului inelului jurnal. Poate adăuga K sau M la sfârșit pentru a indica kilobytes sau megabytes. |
-p, --prune |
Tipărește (citește) curentul permite (white ) și neagă (black ) listează și nu ia argumente, după cum urmează:
adb logcat -p |
-P '<list> ...' |
scrie (Set) permite (white ) și deny (black ) liste pentru a ajusta înregistrarea conținutului pentru un anumit scop. Furnizați un conținut mixt de intrări de listă permise (<white> ) și refuzate (~<black> ), unde <white> sau <black> poate fi un UID, UID/PID sau /PID. Cu îndrumări din Statisticile logcat (logcat -S ), se pot lua în considerare ajustări ale listelor allow (white ) și deny (black ) în scopuri precum:
în mod implicit sistemul de logare previne automat cel mai rău infractor în Statisticile jurnal dinamic pentru a face spațiu pentru noi mesaje jurnal. Odată ce a epuizat euristica, sistemul prune cele mai vechi intrări pentru a face spațiu pentru noile mesaje. adăugarea unui allowlist ( Citate
$ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>' următorul exemplu specifică o listă allow ( adb logcat -P '"/32676 675 ~/32677 897"' altele permit ( ~! worst uid blacklist~1000/! worst pid in system (1000) |
--pid=<pid> ... |
imprimați numai jurnalele de la PID-ul dat. |
--wrap |
dormiți 2 ore sau când tamponul este pe cale să se înfășoare, oricare dintre acestea survine mai întâi. Îmbunătățește eficiența de votare prin furnizarea de o despre-La-wrap wakeup. |
ieșire jurnal de filtrare
- eticheta unui mesaj jurnal este un șir scurt care indică componenta de sistem din care provine mesajul (de exemplu, „vizualizare” pentru sistemul de vizualizare).
- prioritatea este una dintre următoarele valori de caractere, ordonate de la cea mai mică la cea mai mare prioritate:
-
-
V
: Verbose (cea mai mică prioritate) -
D
: depanare -
I
: info -
W
: Avertisment -
E
: eroare -
F
: Fatal -
S
: Silent (cea mai mare prioritate, pe care nimic nu este imprimat vreodată)
-
tu poate obține o listă de etichete utilizate în sistem, cu priorități, rulând logcat și observând primele două coloane ale fiecărui mesaj, date ca <priority>/<tag>
.
Următorul este un exemplu de ieșire logcat scurtă obținută cu comandalogcat -v brief output
. Acesta arată că mesajul se referă la nivelul de prioritate ” I ” și tag-ul „ActivityManager”:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
pentru a reduce ieșirea jurnalului la un nivel gestionabil, puteți restricționa ieșirea jurnalului folosind expresii de filtrare. Expresiile de filtrare vă permit să indicați sistemului etichetele – combinații prioritare care vă interesează — sistemul suprimă alte mesaje pentru etichetele specificate.
o expresie de filtru urmează acest formattag:priority ...
, undetag
indică eticheta de interes șipriority
indică nivelul minim de prioritate de raportat pentru acea etichetă. Mesajele pentru acea etichetă la sau deasupra priorității specificate sunt scrise în jurnal. Puteți furniza orice număr de tag:priority
specificații într-o singură expresie filtru. Seria de specificații este delimitată de spații albe.
Iată un exemplu de Expresie filtru care suprimă toate mesajele jurnal, cu excepția celor cu tag-ul „ActivityManager”, la prioritate „Info” sau mai sus, și toate mesajele jurnal cu tag-ul „MyApp”, cu prioritate „Debug” sau mai sus:
adb logcat ActivityManager:I MyApp:D *:S
elementul final din expresia de mai sus,*:S
, setează nivelul de prioritate pentru toate etichetele la „silent”, asigurându-se astfel că sunt afișate doar mesajele de jurnal cu „ActivityManager” și „MyApp”. Utilizarea *:S
este o modalitate excelentă de a vă asigura că ieșirea jurnalului este limitată la filtrele pe care le — ați specificat în mod explicit-permite filtrelor dvs. să servească drept listă de permise pentru ieșirea jurnalului.
următoarea expresie filtru afișează toate mesajele jurnal cu nivel de prioritate „avertisment” și mai mare, pe toate etichetele:
adb logcat *:W
dacă rulați logcat de pe computerul dvs. de dezvoltare (față de rularea acestuia pe un shell adb la distanță), puteți seta, de asemenea, o expresie de filtru implicită exportând o valoare pentru variabila de mediu ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
rețineți că ANDROID_LOG_TAGS
filtrul nu este exportat în instanța emulatorului/dispozitivului, dacă rulați logcat dintr-un shell la distanță sau utilizați adb shell logcat
.
format de ieșire jurnal de Control
mesajele jurnal conțin un număr de câmpuri de metadate, în plus față de etichetă și prioritate. Puteți modifica formatul de ieșire pentru mesaje, astfel încât acestea să afișeze un anumit câmp de metadate. Pentru a face acest lucru, utilizați opțiunea -v
și specificați unul dintre formatele de ieșire acceptate enumerate mai jos.
-
brief
: afișați prioritatea, eticheta și PID-ul procesului care emite mesajul. -
long
: Afișează toate câmpurile de metadate și mesajele separate cu linii goale. -
process
: Afișează numai PID. -
raw
: afișează mesajul jurnal brut fără alte câmpuri de metadate. -
tag
: afișați numai prioritatea și eticheta. -
thread:
un format vechi care afișează prioritatea, PID-ul și TID-ul firului care emite mesajul. -
threadtime
(implicit): afișează data, ora invocării, prioritatea, eticheta, PID-ul și TID-ul firului care emite mesajul. -
time
: afișează data, ora invocării, prioritatea, eticheta și PID-ul procesului care emite mesajul.
când porniți logcat, puteți specifica formatul de ieșire dorit utilizând opțiunea-v
:
logcat
Iată un exemplu care arată cum se generează mesaje înthread
format de ieșire:
adb logcat -v thread
rețineți că puteți specifica un singur format de ieșire cu opțiunea-v
, dar puteți specifica cât mai mulți modificatori care au sens. Logcat ignoră modificatorii care nu au sens.modificatorii de Format
modificatorii de Format
modifică ieșirea logcat în ceea ce privește orice combinație a unuia sau mai multor dintre următorii modificatori. Pentru a specifica un modificator de format, utilizați opțiunea -v
, după cum urmează:
adb logcat -b all -v color -d
fiecare mesaj de jurnal Android are o etichetă și o prioritate asociată cu acesta. Puteți combina orice modificator de format cu oricare dintre următoarele opțiuni de format: 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. Acest modificator afectează numai mesajele tampon jurnal de evenimente și nu are niciun efect asupra celorlalte tampoane non-binare. Descrierile evenimentelor provin din Baza de date event-log-tags. -
epoch
: timp de afișare în secunde începând de la 1 ianuarie 1970. -
monotonic
: timpul de afișare în secunde CPU începând de la ultima pornire. -
printable
: asigurați-vă că orice conținut binar de logare este scăpat. -
uid
: dacă este permis de controalele de acces, afișați ID-ul UID sau Android al procesului înregistrat. -
usec
: Afișează timpul cu precizie până la microsecunde. -
UTC
: Afișează timpul ca UTC. -
year
: adăugați anul la ora afișată. -
zone
: adăugați fusul orar local la ora afișată.
vizualizarea tampoanelor alternative de jurnal
sistemul de Înregistrare Android păstrează mai multe tampoane circulare pentru mesajele de jurnal și nu toate mesajele de jurnal sunt trimise la tamponul circular implicit. Pentru a vedea mesaje de jurnal suplimentare, puteți rula logcat
comanda cu -b
opțiune, pentru a solicita vizualizarea unui tampon circular alternativ. Puteți vizualiza oricare dintre aceste tampoane alternative:
-
radio
: Vizualizați tamponul care conține mesaje legate de radio / telefonie. -
events
: vizualizați mesajele tampon de evenimente ale sistemului binar interpretat. -
main
: Vizualizați tamponul principal de jurnal (implicit) nu conține mesaje de jurnal de sistem și accident. -
system
: Vizualizați tamponul jurnal de sistem (implicit). -
crash
: Vizualizați tamponul jurnalului de avarie (implicit). -
all
: Vizualizați toate tampoanele. -
default
: rapoartemain
system
șicrash
tampoane.
utilizarea-b
opțiunea este:
logcat
Iată un exemplu de modul de a vizualiza un tampon jurnal care conține mesaje radio și telefonie:
adb logcat -b radio
de asemenea, puteți specifica mai multe-b
steaguri pentru toate tampoanele pe care doriți să le imprimați, după cum urmează:
logcat -b main -b radio -b events
puteți specifica un singur-b
steag cu virgulă-listă separată de tampoane, de exemplu:
logcat -b main,radio,events
logare din cod
Log
clasa vă permite să creați intrări de jurnal în codul dvs. care se afișează în instrumentul logcat. Metodele comune de logare includ:
-
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