Android
Protokollierung und Verwendung von Logcat
Suche…
Syntax
-
Log.v(String tag, String msg, Throwable tr)
-
Log.v(String tag, String msg)
-
Log.d(String tag, String msg, Throwable tr)
-
Log.d(String tag, String msg)
-
Log.i(String tag, String msg, Throwable tr)
-
Log.i(String tag, String msg)
-
Log.w(String tag, String msg, Throwable tr)
-
Log.w(String tag, String msg)
-
Log.e(String tag, String msg, Throwable tr)
-
Log.e(String tag, String msg)
Parameter
Möglichkeit | Beschreibung |
---|---|
-b (Puffer) | Lädt einen alternativen Protokollpuffer zur Anzeige, z. B. Ereignisse oder Radio. Der Hauptpuffer wird standardmäßig verwendet. Siehe Alternative Protokollpuffer anzeigen. |
-c | Löscht das gesamte Protokoll und löscht es. |
-d | Gibt das Protokoll auf dem Bildschirm aus und wird beendet. |
-f (Dateiname) | Schreibt die Protokollnachricht in (Dateiname). Der Standardwert ist stdout. |
-G | Gibt die Größe des angegebenen Protokollpuffers aus und wird beendet. |
-n (zählen) | Legt die maximale Anzahl gedrehter Protokolle auf (Anzahl) fest. Der Standardwert ist 4. Erfordert die Option -r. |
-r (kBytes) | Dreht die Protokolldatei alle (kBytes) der Ausgabe. Der Standardwert ist 16. Erfordert die Option -f. |
-s | Setzt die Standardfilterspezifikation auf "stumm". |
-v (Format) | Legt das Ausgabeformat für Protokollnachrichten fest. Der Standard ist das kurze Format. |
Bemerkungen
Definition
Logcat ist ein Befehlszeilentool, das ein Protokoll der Systemnachrichten abbildet, einschließlich Stapelablaufverfolgungen, wenn das Gerät einen Fehler ausgibt, und Meldungen, die Sie mit der Protokollklasse aus Ihrer App geschrieben haben.
Wann verwenden?
Wenn Sie erwägen, die System.out-Methoden von Java zum Drucken an die Konsole zu verwenden, anstatt eine der Protokollmethoden von Android zu verwenden, sollten Sie wissen, dass sie grundsätzlich gleich funktionieren. Es ist jedoch besser, Java-Methoden nicht zu verwenden, da die zusätzlichen Informationen und Formatierungen, die von den Android-Protokollmethoden bereitgestellt werden, vorteilhafter sind. Außerdem werden die Log.i()
System.out zur Methode Log.i()
umgeleitet .
Nützliche Links
- Offizielle Dokumentation des Android-Entwicklers für Log und Logcat .
- Stackoveflow-Frage: Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - Wann werden sie jeweils verwendet?
Filtern der Logcat-Ausgabe
Es ist hilfreich, die Logcat-Ausgabe zu filtern, da es viele Meldungen gibt, die nicht von Interesse sind. Um die Ausgabe zu filtern, öffnen Sie den "Android Monitor", klicken Sie auf das Dropdown-Feld oben rechts und wählen Sie Filterkonfiguration bearbeiten
Jetzt können Sie benutzerdefinierte Filter hinzufügen, um interessierende Nachrichten anzuzeigen, und bekannte Protokollzeilen herausfiltern, die ignoriert werden können. Um einen Teil der Ausgabe zu ignorieren, können Sie einen regulären Ausdruck definieren. Hier ist ein Beispiel für das Ausschließen passender Tags:
^(?!(HideMe|AndThis))
Dies kann durch folgendes Beispiel eingegeben werden:
Das obige ist ein regulärer Ausdruck, der Eingaben ausschließt. Wenn Sie ein weiteres Tag zur Blacklist hinzufügen möchten , fügen Sie es nach einer Pipe |
Charakter. Wenn Sie beispielsweise "GC" auf die schwarze Liste setzen möchten, verwenden Sie einen Filter wie diesen:
^(?!(HideMe|AndThis|GC))
Weitere Dokumentation und Beispiele finden Sie unter Protokollieren und Verwenden von Logcat
Protokollierung
Jede hochwertige Android-Anwendung wird anhand von Anwendungsprotokollen auf dem Laufenden halten. Diese Protokolle ermöglichen dem Entwickler eine einfache Debugging-Hilfe, um zu diagnostizieren, was mit der Anwendung passiert. Die vollständige Android-Dokumentation finden Sie hier , es folgt jedoch eine Zusammenfassung:
Grundlegende Protokollierung
DieLog
ist die Hauptquelle für das Schreiben von Entwicklerprotokollen, indem ein tag
und eine message
. Mit diesem Tag können Sie Protokollnachrichten filtern, um zu ermitteln, welche Zeilen von Ihrer jeweiligen Aktivität stammen. Einfach anrufen Log.v(String tag, String msg);
Das Android-System schreibt dem logcat eine Nachricht:
07-28 12:00:00.759 24812-24839/my.packagename V/MyAnimator: Some log messages
└ time stamp | app.package┘ | └ any tag |
process & thread ids ┘ log level┘ └ the log message
SPITZE:
Beachten Sie die Prozess-ID und die Thread-ID. Wenn sie gleich sind - das Protokoll kommt vom Haupt- / UI-Thread!
Jedes Tag kann verwendet werden, es ist jedoch üblich, den Klassennamen als Tag zu verwenden:
public static final String tag = MyAnimator.class.getSimpleName();
Log Levels
Der Android-Logger verfügt über 6 verschiedene Ebenen, die jeweils einen bestimmten Zweck erfüllen:-
ERROR
:Log.e()
- Wird verwendet, um einen kritischen Fehler anzuzeigen. Hierbei handelt es sich um die Ebene, in der beim Auslösen einer
Exception
gedruckt wird.
- Wird verwendet, um einen kritischen Fehler anzuzeigen. Hierbei handelt es sich um die Ebene, in der beim Auslösen einer
-
WARN
:Log.w()
- Wird verwendet, um eine Warnung anzuzeigen, hauptsächlich für behebbare Fehler
-
INFO
:Log.i()
- Wird verwendet, um Informationen über den Status der Anwendung auf höherer Ebene anzuzeigen
-
DEBUG
:Log.d()
- Wird verwendet, um Informationen zu protokollieren, die beim Debuggen der Anwendung hilfreich sein könnten, beim Ausführen der Anwendung jedoch stören würden
-
VERBOSE
:Log.v()
- Dient zum Protokollieren von Informationen, die die kleinen Details zum Status der Anwendung widerspiegeln
-
ASSERT
:Log.wtf()
- Wird verwendet, um Informationen zu einer Bedingung zu protokollieren, die niemals auftreten sollte.
- wtf steht für "What a Terrible Failure".
Motivation für die Protokollierung
Die Motivation für die Protokollierung besteht darin, Fehler, Warnungen und andere Informationen durch einen Blick auf die Ereigniskette der Anwendung leicht zu finden. Stellen Sie sich beispielsweise eine Anwendung vor, die Zeilen aus einer Textdatei liest, aber fälschlicherweise davon ausgeht, dass die Datei niemals leer ist. Die Protokollablaufverfolgung (einer App, die nicht protokolliert) würde in etwa wie folgt aussehen:E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
Es folgte eine Reihe von Stapelverfolgungsspuren, die schließlich zu der fehlerhaften Linie führen würden, wo das Durchlaufen eines Debuggers schließlich zu dem Problem führen würde
Der Protokollablauf einer Anwendung mit aktivierter Protokollierung könnte jedoch wie folgt aussehen:
V/MyApplication: Looking for file myFile.txt on the SD card
D/MyApplication: Found file myFile.txt at path <path>
V/MyApplication: Opening file myFile.txt
D/MyApplication: Finished reading myFile.txt, found 0 lines
V/MyApplication: Closing file myFile.txt
...
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
Ein kurzer Blick auf die Protokolle und es ist offensichtlich, dass die Datei leer war.
Was Sie beim Logging beachten sollten:
Obwohl die Protokollierung ein leistungsfähiges Werkzeug ist, mit dem Android-Entwickler einen tieferen Einblick in die Funktionsweise ihrer Anwendung erhalten, hat die Protokollierung einige Nachteile.Log-Lesbarkeit:
In Android-Anwendungen werden normalerweise mehrere Protokolle synchron ausgeführt. Daher ist es sehr wichtig, dass jedes Protokoll leicht lesbar ist und nur relevante, notwendige Informationen enthält.Performance:
Für die Protokollierung sind nur wenige Systemressourcen erforderlich. Im Allgemeinen gibt dies keinen Anlass zur Sorge. Bei Überbeanspruchung kann jedoch die Protokollierung die Anwendungsleistung negativ beeinflussen.Sicherheit:
In letzter Zeit wurden dem Google Play-Marktplatz mehrere Android-Anwendungen hinzugefügt, mit denen der Nutzer Protokolle aller laufenden Anwendungen anzeigen kann. Durch diese unbeabsichtigte Anzeige von Daten können Benutzer möglicherweise vertrauliche Informationen anzeigen. Entfernen Sie als Faustregel grundsätzlich immer Protokolle, die nicht öffentliche Daten enthalten, bevor Sie Ihre Anwendung auf dem Marktplatz veröffentlichen.Fazit:
Die Protokollierung ist ein wesentlicher Bestandteil einer Android-Anwendung, da sie den Entwicklern eine hohe Leistung bietet. Die Möglichkeit, eine nützliche Protokollablaufverfolgung zu erstellen, ist einer der schwierigsten Aspekte der Softwareentwicklung. Die Protokollklasse von Android hilft jedoch dabei, die Protokollierung zu erleichtern.Weitere Dokumentation und Beispiele finden Sie unter Protokollieren und Verwenden von Logcat
Melden Sie sich mit einem Link zur Quelle direkt aus Logcat
Dies ist ein schöner Trick, um einen Link zum Code hinzuzufügen, so dass es einfach ist, zu dem Code zu springen, der das Protokoll ausgegeben hat.
Mit folgendem Code diesen Aufruf:
MyLogger.logWithLink("MyTag","param="+param);
Wird darin enden, dass:
07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3) (MyFrag.java:2366) // << logcat converts this to a link to source!
Dies ist der Code (innerhalb einer Klasse namens MyLogger):
static StringBuilder sb0 = new StringBuilder(); // reusable string object
public static void logWithLink(String TAG, Object param) {
StackTraceElement stack = Thread.currentThread().getStackTrace()[3];
sb0.setLength(0);
String c = stack.getFileName().substring(0, stack.getFileName().length() - 5); // removes the ".java"
sb0.append(c).append(":");
sb0.append(stack.getMethodName()).append('(');
if (param != null) {
sb0.append(param);
}
sb0.append(") ");
sb0.append(" (").append(stack.getFileName()).append(':').append(stack.getLineNumber()).append(')');
Log.d(TAG, sb0.toString());
}
Dies ist ein einfaches Beispiel. Es kann leicht erweitert werden, um dem Anrufer eine Verknüpfung zu geben (Hinweis: Der Stapel wird [4] statt [3] sein), und Sie können auch andere relevante Informationen hinzufügen.
Logcat verwenden
Logcat ist ein Befehlszeilentool, das ein Protokoll der Systemnachrichten abbildet, einschließlich Stapelablaufverfolgungen, wenn das Gerät einen Fehler ausgibt, und Meldungen, die Sie mit der Protokollklasse aus Ihrer App geschrieben haben.
Die Logcat-Ausgabe kann im Android-Monitor von Android Studio oder mit der Adb-Befehlszeile angezeigt werden.
In Android Studio
Zeigen Sie durch Klicken auf das Symbol "Android Monitor": Oder drücken Sie Alt + 6 unter Windows / Linux oder CMD + 6 unter Mac.
über die Kommandozeile:
Einfache Verwendung:
$ adb logcat
Mit Zeitstempeln:
$ adb logcat -v time
Nach bestimmten Texten filtern:
$ adb logcat -v time | grep 'searchtext'
Es gibt viele Optionen und Filter für das Befehlszeilenprotokoll , die hier dokumentiert sind .
Ein einfaches, aber nützliches Beispiel ist der folgende Filterausdruck, der alle Protokollnachrichten mit der Prioritätsstufe "error" für alle Tags anzeigt:
$ adb logcat *:E
Protokollierungscode generieren
Live templates
Android Studio
bieten eine Reihe von Verknüpfungen für die schnelle Protokollierung.
Um Live-Vorlagen zu verwenden, müssen Sie nur den Namen der Vorlage eingeben und die TAB
oder die Eingabetaste TAB
, um die Anweisung einzufügen.
Beispiele:
-
logi
→ wird zu →android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
-
$METHOD_NAME$
wird automatisch durch Ihren Methodennamen ersetzt und der Cursor wartet, bis der Inhalt gefüllt ist.
-
-
loge
→ gleich, für Fehler - usw. für den Rest der Protokollierungsstufen.
Eine vollständige Liste der Vorlagen finden Sie in den Einstellungen von Android Studio
( ALT + s und Typ "live"). Außerdem können Sie Ihre benutzerdefinierten Vorlagen hinzufügen.
Wenn die Live templates
Android Studio
für Ihre Anforderungen nicht ausreichen, können Sie das Android Postfix-Plugin in Betracht ziehen
Dies ist eine sehr nützliche Bibliothek, mit der Sie die Protokollzeile nicht manuell schreiben müssen.
Die Syntax ist absolut einfach:
.log - Protokollierung. Wenn die Variable "TAG" konstant ist, wird "TAG" verwendet. Sonst verwenden Sie den Klassennamen.
Android Studio-Nutzung
Protokolle löschen
Um das gesamte Protokoll zu löschen (leeren):
adb logcat -c