Som Android-udvikler ved I alle, at loganalyse er en fase af udviklingen, og vi støder på den fra tid til anden.
Men loganalyse er den vigtigste udfordrende ting for kodevedligeholder eller supportingeniør.
Når et Android-produkt lanceres på markedet, og kunderne begynder at bruge det. Så begynder rigtige scenariefejl/problemer at komme, og det er den vigtigste opgave for supportingeniør/projektvedligeholdelsesingeniør at analysere fejlen/problemet med det leverede sæt logfiler.
Først starter vi med den type log, der er tilgængelig på Android Eco-system:-
- Applikationslog
- System Log
- Event Log
- Radio Log
Android logningssystem består af:
- en kerne-driver og kernebuffere til lagring af logmeddelelser
- C-, C++- og Java-klasser til at lave logposter og få adgang til logmeddelelserne.
- Logcat (et selvstændigt program til visning af logmeddelelser )
- DDMS (mulighed for at se og filtrere logmeddelelser fra værtsmaskinen)
Android Logbuffer/container
- main – hovedprogramloggen
- events – til oplysninger om systemhændelser
- radio – til radio- og telefon-relaterede oplysninger
- system – en log for systemmeddelelser på lavt niveau og fejlfinding
Hvad indeholder logmeddelelsen:-
Hver meddelelse i loggen består af
- Et tag, der angiver den del af systemet eller programmet, som meddelelsen kom fra
- Et tidsstempel (på hvilket tidspunkt denne meddelelse kom)
- Den logniveauet for meddelelsen (eller prioriteringen af den hændelse, som meddelelsen repræsenterer) og
- selve logmeddelelsen (detaljeret beskrivelse af fejl eller undtagelse eller oplysninger osv.)
Hvad hver logtype indeholder:-
1. Programlog
- use android.util.Log-klassemetoder til at skrive meddelelser af forskellig prioritet i loggen
- Java-klasser erklærer deres tag statisk som en streng, som de videregiver til logmetoden
- Den anvendte logmetode angiver meddelelsens “sværhedsgrad” (eller logniveau)
- Meddelelser kan filtreres efter tag eller prioritet, når loggene behandles af hentningsværktøjer (logcat)
2. System log
- Brug android.util.Slog-klassen til at skrive en meddelelse med forskellig prioritet med tilhørende meddelelser
- Mange Android-rammeklasser bruger systemloggen til at holde deres meddelelser adskilt fra (muligvis støjende) programlogmeddelelser
- En formateret meddelelse leveres via C/C++-biblioteket ned til kernedriveren, som gemmer meddelelsen i den relevante buffer(systembuffer)
3. Hændelseslog
- Hændelseslogmeddelelser oprettes ved hjælp af android.util.EventLog-klassen, som opretter binært formaterede logmeddelelser.
- Logposter består af binære tagkoder efterfulgt af binære parametre.
- Meddelelsens tagkoder gemmes på systemet på: /system/etc/event-log-tags.
- Hver meddelelse har strengen for logmeddelelsen samt koder, der angiver de værdier, der er knyttet til (gemt med) den pågældende post.
4. Radiolog
- Bruges til radio- og telefon(modem)-relaterede oplysninger
- Logposter består af binære tags kode og besked til netværksinfo
- Logføringssystemet dirigerer automatisk meddelelser med bestemte tags ind i radiobufferen
Logformat på Android
Nedenfor er almindeligt logformat i android
tv_sec tv_nsec priority pid tid tag messageLen Message
tag: log tag
tv_sec & tv_nsec: tidsstempel for logmeddelelser
pid: proces-id for hvor logmeddelelser kommer fra
tid: tråd-id
Prioritetsværdien er en af følgende karakterværdier, ordnet fra laveste til højeste prioritet:
V – Verbose (laveste prioritet)*
D – Debug*
D – Debug*
I – Info*
W – Warning*
E – Error*
F – Fatal*
S – Silent (højeste prioritet, hvor der aldrig udskrives noget)
Log-filplaceringer
Der er flere mapper, hvor logfiler (herunder dem fra nedbrud) lagres, og de er ikke standardiserede(i.dvs. nogle kan være ROM-specifikke). Jeg sætter nogle almindelige her.
- /data/anr : Dalvik skriver stack traces her på ANR, dvs. “Application Not Responding” aka “Force-Close”
- /data/dontpanic : indeholder nogle nedbrudslogs, herunder spor
- /data/kernelpanics :- Gemmer “kernel panic”-relaterede logs
- /data/tombstones :- kan indeholde flere tombstone_nn filer (nn er et tal fra 0 til 10 og efter 10 gentages det igen)
‘Log’ kommandolinjeværktøj
For at opsamle logs fra android enheder/emulator Nedenfor er der et kommandolinjeværktøj. I virkelige projekter er der logoptagelsesprogrammer/værktøjer, der bruges til at opfange logfilerne på brugerens enhed og dele dem tilbage til udvikleren/vedligeholderen med henblik på analyse.
- adb logcat (viser alle type logs for det aktuelle android-system
- adb logcat -v threadtime (det vil indeholde dato og klokkeslæt)
- adb logcat -v threadtime > logfile.txt (Gem logs i logfile.txt)
Nyttige filtermønstre
Du kan bruge nedenstående filter i din adb-kommando til at filtrere logs. Du kan også bruge dette filter til at søge i din logfil(logs leveret af brugerens enhed).
- adb logcat -f <output_file> Gem alle logs i en fil
- adb logcat “*:E” Få alle fejl og fatals
- adb logcat | grep -i “foo.example.” #henter alle logs relateret til “foo.example.*” tagname
- adb logcat “application_or_tag_name:*” “*:S” Få alle logs efter programnavn
- adb logcat -b events “gsm_service_state_change” “*:S” Få alle GSM-statsændringer
- adb logcat -b radio Få alle radio-begivenheder
Loganalyse
Igennem nu får vi alle de grundlæggende eksponeringer af Android Logging System. Nu er det tid til at analysere de logfiler, der kommer fra dit program eller slutbrugeren. Her kan vi opdele loganalyse i to dele
- Debug Log:- logfil, der kommer i udviklings- og testfasen
- Production Log:- Logfil, der kommer direkte fra slutbrugeren.
Så gæt hvilken en er svær Production one Right? Så hvad er den bedste tilgang til at debugge og få den ønskede info fra de opfangede logfiler? Som jeg diskuterede ovenfor, Vi kan gøre det ved at bruge
- “Nyttige filtermønstre” og
- Ved hjælp af nogle værktøj (eksempel LogRabit, GoogleLogTool og SonyLogTool)
Så i sidste Android loganalyse er kontinuerlig læring og udnyttelse af din erfaringsproces. Personligt analyserede jeg logs via relevant filter og værktøj med min tidligere erfaring.
Men én ting er godt Hver android analyse (slutbruger problem / bug log) giver dig ny læring og erfaring. Så bliv ved med at gøre det og nyd dit liv som koder og vedligeholder af android system😎😎😎😎