Android Log Analysis

Android logs caption

Als Android-Entwickler wissen Sie alle, dass die Log-Analyse eine Phase der Entwicklung ist und wir ihr von Zeit zu Zeit begegnen.
Aber die Log-Analyse ist die größte Herausforderung für Code-Maintainer oder Support-Ingenieure.

Wenn ein Android-Produkt auf den Markt kommt und die Kunden es benutzen. Dann kommen in einem realen Szenario Bugs/Probleme auf, und es ist die Hauptaufgabe des Support-Ingenieurs/Projektwartungsingenieurs, den Bug/das Problem mit den zur Verfügung gestellten Protokollen zu analysieren.

Zunächst beginnen wir mit der Art der Logs, die im Android-Ökosystem verfügbar sind:-

  • Anwendungs-Log
  • System-Log
  • Event-Log
  • Radio-Log

Das Android-Logging-System besteht aus:

  • einem Kernel-Treiber und Kernel-Puffern zur Speicherung von Log-Meldungen
  • C-, C++- und Java-Klassen zur Erstellung von Log-Einträgen und zum Zugriff auf die Log-Meldungen.
  • Logcat (ein eigenständiges Programm zum Anzeigen von Protokollnachrichten)
  • DDMS (Möglichkeit zum Anzeigen und Filtern der Protokollnachrichten vom Hostrechner)

Android Log Buffer/Container

  • main – das Hauptanwendungsprotokoll
  • events – für Systemereignisinformationen
  • radio – für Radio- und Telefon-.Informationen
  • System – ein Protokoll für Low-Level-Systemmeldungen und Debugging

Was die Protokollmeldung enthält:-

Jede Meldung im Protokoll besteht aus

  • einem Tag, der den Teil des Systems oder der Anwendung angibt, von dem die Meldung stammt
  • einem Zeitstempel (zu welcher Zeit diese Meldung kam)
  • der Nachrichtenprotokollebene (oder Priorität des durch die Nachricht dargestellten Ereignisses) und
  • die Protokollnachricht selbst (detaillierte Beschreibung des Fehlers oder der Ausnahme oder der Information usw.)

Was jeder Protokolltyp enthält:-

1. Anwendungsprotokoll

  • Verwendung der android.util.Log-Klassenmethoden, um Nachrichten unterschiedlicher Priorität in das Protokoll zu schreiben
  • Java-Klassen deklarieren ihr Tag statisch als String, den sie an die Log-Methode übergeben
  • Die verwendete Log-Methode gibt den „Schweregrad“ der Nachricht an (oder den Log-Level)
  • Die Nachrichten können nach Tag oder Priorität gefiltert werden, wenn die Protokolle von Abfragetools (logcat) verarbeitet werden)

2. Systemprotokoll

  • Verwenden Sie die android.util.Slog-Klasse, um eine Nachricht mit unterschiedlicher Priorität mit den zugehörigen Nachrichten zu schreiben
  • Viele Android-Framework-Klassen nutzen das Systemprotokoll, um ihre Nachrichten von (möglicherweise verrauschten) Anwendungsprotokollnachrichten getrennt zu halten
  • Eine formatierte Nachricht wird über die C/C++-Bibliothek an den Kernel-Treiber geliefert, der die Nachricht im entsprechenden Puffer (Systempuffer) speichert

3. Ereignisprotokoll

  • Ereignisprotokollmeldungen werden mit der Klasse android.util.EventLog erstellt, die binär formatierte Protokollmeldungen erzeugt.
  • Protokolleinträge bestehen aus binären Tag-Codes, gefolgt von binären Parametern.
  • Die Tag-Codes der Meldungen werden auf dem System gespeichert unter: /system/etc/event-log-tags.
  • Jede Meldung enthält die Zeichenkette für die Protokollmeldung sowie Codes, die die mit diesem Eintrag verbundenen (gespeicherten) Werte angeben.

4. Funkprotokoll

  • Verwendet für funk- und telefon(modem)bezogene Informationen
  • Protokolleinträge bestehen aus binären Tags, Codes und Nachrichten für Netzwerkinformationen
  • Das Protokollierungssystem leitet Nachrichten mit bestimmten Tags automatisch in den Funkpuffer

Protokollformat unter Android

Nachfolgend das übliche Protokollformat in Android

tv_sec tv_nsec priority pid tid tag messageLen Message

Tag: Log-Tag
tv_sec & tv_nsec: der Zeitstempel der Log-Meldungen
pid: die Prozess-ID, von der die Log-Meldungen stammen
tid: die Thread-ID
Der Prioritätswert ist einer der folgenden Zeichenwerte, geordnet von der niedrigsten zur höchsten Priorität:
V – Verbose (niedrigste Priorität)*
D – Debug*
I – Info*
W – Warning*
E – Error*
F – Fatal*
S – Silent (höchste Priorität, bei der nie etwas gedruckt wird)

Log-File locations
Es gibt mehrere Verzeichnisse, in denen Logs (auch die von Abstürzen) gespeichert werden, und sie sind nicht standardisiert (d.d. h. einige können ROM-spezifisch sein). Ich lege hier einige allgemeine fest.

  • /data/anr : Dalvik schreibt hier Stack Traces auf ANR, d.h. „Application Not Responding“ aka „Force-Close“
  • /data/dontpanic : enthält einige Absturzprotokolle einschließlich Traces
  • /data/kernelpanics :- speichert „kernel panic“ bezogene Protokolle
  • /data/tombstones :- Kann mehrere tombstone_nn Dateien enthalten (nn ist eine Zahl von 0 bis 10 und nach 10 wiederholen)

‚Log‘ Kommandozeilentool
Um Logs von den Android-Geräten/Emulatoren zu erfassen, gibt es ein Kommandozeilentool. In realen Projekten gibt es Anwendungen/Tools zur Protokollerfassung, mit denen die Protokolle auf dem Benutzergerät erfasst und zur Analyse an den Entwickler/Maintainer weitergegeben werden.

  • adb logcat (zeigt alle Protokolle für das aktuelle Android-System an
  • adb logcat -v threadtime (enthält Datum und Uhrzeit)
  • adb logcat -v threadtime > logfile.txt (speichert Protokolle in logfile.txt)

Nützliche Filtermuster
Sie können den folgenden Filter in Ihrem adb-Befehl verwenden, um Protokolle zu filtern. Sie können diesen Filter auch verwenden, um Ihre Protokolldatei zu durchsuchen (Protokolle, die vom Benutzergerät bereitgestellt werden).

  • adb logcat -f <output_file> Alle Protokolle in einer Datei speichern
  • adb logcat „*:E“ Alle Fehler und Fatals abrufen
  • adb logcat | grep -i „foo.example.“ #Erhalte alle Logs, die sich auf „foo.example.*“ beziehen tagname
  • adb logcat „application_or_tag_name:*“ „*:S“ Holt alle Logs nach Anwendungsname
  • adb logcat -b events „gsm_service_state_change“ „*:S“ Holt alle GSM-Statusänderungen
  • adb logcat -b radio Holt alle Radio-Ereignisse

Log-Analyse
Bis jetzt haben wir alle grundlegenden Einblicke in das Android Logging System bekommen. Jetzt ist es an der Zeit, die Logs zu analysieren, die von Ihrer Anwendung oder dem Endbenutzer kommen. Hier können wir die Log-Analyse in zwei Teile unterteilen

  1. Debug Log:- Log-Datei, die während der Entwicklungs- und Testphase entsteht
  2. Production Log:- Log-Datei, die direkt vom Endbenutzer kommt.

So erraten Sie, welche schwierig ist Production one Right? Was ist also der beste Ansatz zur Fehlersuche und um die gewünschten Informationen aus den erfassten Protokollen zu erhalten? Wie ich oben besprochen habe, können wir es tun, indem wir

  • „Nützliche Filterpatterns“ und
  • ein Tool (z.B. LogRabit, GoogleLogTool und SonyLogTool)

So in der letzten Android-Log-Analyse ist kontinuierliches Lernen und die Nutzung Ihrer Erfahrung Prozess. Ich persönlich analysierte Protokolle über relevante Filter und Tools mit meiner Erfahrung aus der Vergangenheit.

Aber eine Sache ist gut Jede Android-Analyse (Endbenutzer-Problem/Fehlerprotokoll) gibt Ihnen neues Lernen und Erfahrung. Also mach weiter so und genieße dein Leben als Coder und Maintainer von Android-Systemen😎😎😎

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.