Logcat - Was ist das?

  • Antworten:6
  • OffenNicht stickyNicht beantwortet

10.03.2012 16:08:06

Das Logcat (Systemlog) des Android Smartphones
Das Logcat der Android Smartphones ist ein s.g. System Logger, der zu jeder Zeit im Android Betriebssystem aktiv ist. Jede App und jeder Prozess, der auf dem Smartphone aktiv ist, hat die Möglichkeit verschiedene Arten von Meldungen in dieses Log hineinzuschreiben.
Normalerweise sind die dort zu lesenden Meldungen sehr technisch und für den normalen Benutzer eigentlich nicht von Belang und tragen auch in keiner Weise zur Funktion einer App bei. Sie dienen im Normalfall nur den Entwicklern von Apps um Fehler, die während des Betriebes auftreten, besser analysieren zu können.

Man kann das Logcat theoretisch mit einer Überwachungskamera auf einer Autobahn vergleichen. Diese Kameras zeichnen einen gewissen Zeitraum lang alle Fahrzeuge auf, welche die Kamera passieren. Dabei werden eben die Dinge aufgezeichnet, die ein Auto von sich preisgibt, Kennzeichen, Farbe, Typ des Fahrzeugs, Anzahl der Fenster usw.

Schreibt nun ein Fahrzeugbesitzer auf sein Autodach mit weißer Farbe: “Mein Name ist Franz Müller”, so wäre das vergleichbar damit mit einer Programmzeile wie :
Log.i(“Name des Besitzers”, “Mein Name ist Franz Müller”);
Also einem Eintrag ins Logcat.

Zunächst, welche Arten von Meldungen kann das Log enthalten?
Es gibt die sogenannten LogLevel: Debug, Error, Info, Warn. Im Normalfall bestimmt der Entwickler selber, ob und was er mit welchem dieser Loglevel in das Log schreibt. Der Loglevel Debug bspw. enthält normalerweise nur Ausgaben, die dem Entwickler während der Entwicklung Informationen darüber liefern ob sich sein Applikations-Code so verhält wie er es sich gedacht hat.
Der Loglevel Error dagegen sollte nur dann verwendet werden, wenn wirklich ein Fehler im Programmablauf passiert. Mit dem Loglevel Warn werden Meldungen klassifiziert die zwar nicht unbedingt positiv sind, aber den Ablauf der Applikation im Normalfall nicht weiter stören.
Der Loglevel Info wird in der Regel verwendet, um Dinge zu informativen Zwecken im Logfile auszugeben, die auch anderen von Nutzen sein könnten. Zu Beispiel wie lange der Download einer Datei gedauert hat o.ä.

Wie groß kann so ein Log werden?
Die Größe eines Logs ist beschränkt und kann auf verschiedenen Geräten variieren. Auf dem Samsung Galaxy Note bspw. ist das Logcat etwa 800 Kb groß. Auf anderen Geräten kann das um einiges kleiner sein. (Standard ist laut Google 64 Kb)
Als Anhaltspunkt: In den etwa 800Kb Logcat des Samsung Galaxy Note befinden sich etwa 7900 Logzeilen.
(Die maximale Länge einer Logzeile ist auf etwa 4Kb begrenzt)

Wie funktioniert das mit der Größenbeschränkung?
Die Größenbeschränkung rührt daher, dass das Logcat eigentlich ein sogenannter Ringpuffer ist. Stellt Euch einen zum Ring geformten Schlauch vor. An einem Ende beginnt man Wasser hineinzuschütten und wenn der Ring voll ist, strömt das Wasser am anderen Ende wieder heraus. Dabei wird genau der Tropfen, der als erstes in den Schlauch gelangte, diesen auch als erster wieder verlassen. Aus diesem Grund bezeichnet man solche Konstruktionen auch als FIFO (First in, First out) wobei in einem Ringpuffer eigentlich nie etwas den Ringpuffer verlässt, sondern im Gegensatz dazu bei Erreichen des Füllgrades das älteste Element überschrieben wird und dann das nächstälteste usw.

Warum ist diese Größenbeschränkung für uns interessant?
Die Größenbeschränkung des Logcat ist insofern interessant, als dass Ereignisse oder Logzeilen irgendwann wieder aus dem Logcat verschwinden. Wenn man beispielsweise um genau 0:00 Uhr eine App startet, die sagen wir mal 40 Zeilen ins Logcat schreibt und danach nichts mehr am Smartphone macht, sind die Chancen, dass diese 40 Zeilen um 0:30 Uhr noch im Logcat enthalten sind relativ hoch.
Habe ich in der Zwischenzeit jedoch mehrere Apps gestartet, die allesamt relativ viel ins Logcat schreiben oder das Betriebssystem veranlassen so etwas zu tun, dann kann es gut sein, dass die 40 Zeilen um 0:30 schon längst wieder im Ringpuffer überschrieben wurden und somit nicht mehr aufscheinen.

Was schreibt denn nun alles ins Logcat rein?
Im Grunde kann das zum einen jede App die aufgerufen wird, bzw. aktiv ist tun. Darüber hinaus schreiben aber auch Systemprozesse in das Logcat hinein. Um dieses besser trennen zu können, ist das Logcat eine zeitlich orientierte Zusammenfassung mindestens zweier Log-Kategorien.
main Log: Hier schreiben die Anwendungen hinein. 512 Kb
system Log: Hier schreiben Systemprozesse hinein. 256 Kb
Die restlichen 30 Kb die noch zu den ~800 Kb fehlen bestehen aus möglicherweise noch hinzugefügten Zeitangaben der jeweiligen Logs.

Ist das Logcat gefährlich?
Das Logcat selber ist nicht gefährlich. Lediglich dann, wenn unachtsame Entwickler oder Hersteller Dinge ins Logcat schreiben die dort nichts verloren haben, dann kann es gefährlich werden.
Gefährlich deswegen, weil dieses Logcat mit einer einzigen Berechtigung (READ_LOGS) durch wirklich jede App ausgelesen werden kann. Wenn nun also eine solche App das Log ausliest und im Log zufällig gerade Deine Telefonnummer und die IMEI Deines Handys enthalten sind, dann besteht die Möglichkeit, dass Deine privaten Daten absichtlich oder unabsichtlich in falsche Hände geraten.
Absichtlich schreibe ich hier, weil nicht jede App per se gute Absichten haben muss! Es gibt genug Malware (böswillig entwickelte Apps) die sich teilweise die Finger nach so mancher im Logcat aufscheinender Information abschlecken.
Mit unabsichtlich meine ich, wenn man in gutem Glauben ein Logcat an den Entwickler einer App oder einen Hersteller übermittelt, ohne zu ahnen, welche sensitiven Informationen man da unter Umständen weitergibt. Damit möchte ich allerdings keineswegs irgendwelche Entwickler der böswilligen Nutzung von sensitiven, an sie übermittelten Informationen, beschuldigen!

Kann ich mir ansehen ob in meinem Logcat sensible Daten enthalten sind?
Ja, das kann man sich ansehen. Entweder mit einer der zahlreichen Apps aus dem Market, die das Logcat einfach nur anzeigen (aLogcat ist da sehr beliebt) oder aber noch einfacher mit einer App, die ich speziell für diesen Zweck entwickelt habe.

LogMan Logcat Prüfung liest Dein Logcat aus und zeigt Dir lediglich die Zeilen aus dem Logcat Deines Smartphones, die sensible Daten enthalten.

Im wesentlichen können das folgende Dinge sein:
  • Deine IMEI [Farbe Orange]
  • Deine IMSI [Farbe Orange]
  • Deine Sim-Karten Seriennummer [Farbe Orange]
  • Deine Telefonnummer [Farbe Rot]
  • Deine Emailadresse(n) [Farbe Gelb]
  • Deine mögliche Position (Lokationsdaten) [Farbe Orange]

Werden in Deinem Logcat derartige Daten gefunden, so wird die App Dir diese Dinge entsprechend anzeigen und je nach Grad der Gefährdung einfärben.

— geändert am 10.03.2012 16:08:52

lg Voss - Ach ja und noch was, die AndroidPIT-Regeln ლ(╹◡╹ლ) Android Security

10.03.2012 20:48:44

Man kann es nicht oft genug sagen: java.util.logging gibt es auch unter Android und wird z.T. nach logcat weitergeleitet.

Ich erwähne das weil es apps gibt die READ_LOGS anfordern um Ihre eigene logs zu lesen. Das ist aber nicht notwendig! Das kann man mit java.util.logging.Handler viel einfacher und ohne READ_LOGS schaffen.

[app]net.sourceforge.uiq3.fx602p[/app]: Info Forum — [app]net.sourceforge.uiq3.hp45[/app]: Info Forum

06.08.2013 19:59:55

Eve
Ich verstehe das jetzt so, dass ich stattdessen lieber "import java.util.logging" verwenden soll.

Ein einfaches tauschen den import reicht nicht. Du brauchst eine logger instanz.

1/**
2 * <p>
3 * class logger instance
4 * </p>
5 */
6 private static final java.util.logging.Logger logger;
7 /**
8 * <p>
9 * class logger tag.
10 * </p>
11 */
12 private static final String TAG;
13
14 static
15 {
16 TAG = Decomposed.class.getName ();
17 logger = java.util.logging.Logger.getLogger (Decomposed.TAG);
18 } // static

Und zum abfangen der logs braucht du noch eine log hander.

[app]net.sourceforge.uiq3.fx602p[/app]: Info Forum — [app]net.sourceforge.uiq3.hp45[/app]: Info Forum