Logcat - Was ist das?

  • Antworten:7
Gelöschter Account
  • Forum-Beiträge: 5.136

10.03.2012, 16:08:06 via Website

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

MichaelNicotom_catKlaus T.

Antworten
tom_cat
  • Forum-Beiträge: 11.132

10.03.2012, 16:14:29 via Website

Schön erklärt, Danke Jörg!

Natürlicher Verstand kann fast jeden Grad von Bildung ersetzen, aber keine Bildung den natürlichen Verstand. Arthur Schopenhauer App Reviews nach Einsatzzweck und hier noch das: Das-AndroidPITiden-Buch

Antworten
Martin Krischik
  • Forum-Beiträge: 116

10.03.2012, 20:48:44 via Website

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

Antworten
Eve
  • Forum-Beiträge: 25

04.08.2013, 20:03:33 via Website

Hallo,

eine Frage dazu:
in meiner App verwende ich "import android.util.Log"

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

Danke!

LG,
Eve

MichaelMartin Krischik

Antworten
Alain
  • Forum-Beiträge: 11.646

04.08.2013, 20:16:11 via App

Danke Jörg für die Erklärung :)

Die Warheit schmeckt gut wenn man den Bauch voller Lügen hat! ~Muhammad Ali~

Antworten
impjor
  • Forum-Beiträge: 1.793

04.08.2013, 23:09:41 via App

@Eve:
Es ging um das Auslesen des Logs...
Mit android.util.Log bist du schon richtig.

@Mods:
Wäre das nicht ein gut, wenn's sticky wäre? Eventuell auch in einem anderen Forum, da es z. T. ja nicht (nur) Entwickler betrifft.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Martin Krischik
  • Forum-Beiträge: 116

06.08.2013, 19:59:55 via Website

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

Antworten
Maverigz
  • Forum-Beiträge: 20

12.10.2014, 18:58:59 via App

Sehr gut erklärt, vielen dank! :)

Antworten