2013-05-28 11 views
7

Nach Where are Android logcat files stored? Ich lerne, dass Logcat als ein interner Ring-Puffer im Kernel gespeichert wird, der 256kb Größe ist. Anwendungen verwenden eine spezielle API, um den Kernel zum Speichern von Protokollen aufzufordern.Wie werden Logcat-Nachrichten gespeichert?

Meine Geräteprotokolle sind wayyyyyy größer. Ich weiß das, denn wenn ich adb logcat > adblogcat.txt bekomme ich eine wirklich große Datei. Dies bedeutet, dass "etwas" die Kernel-Puffer löscht und sie im Dateisystem (?) Speichert und adb logcat aus dieser größeren Datei liest.

Kann mir jemand erklären, wie das funktioniert? Ich schaue in https://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp und ich kann die genauen Details nicht verstehen.

Bonuspunkte für jemanden, der erklärt, was beim Neustart passiert, wird das Protokoll zwischen Neustarts gespeichert?

Antwort

9

Hier mein Verständnis über logcat ist, vielleicht einige Fehler gibt, begrüßen alle Kommentare:

  1. Über Protokolldatei im Telefon: Vom frameworks/base/core/jni/android_util_Log.cpp wir alle Log-in /dev/log/ geschrieben werden sehen Ordner in Ihren Geräten standardmäßig. Haupt wird in /dev/log/main geschrieben werden Radio wird in /dev/log/radio ... geschrieben werden, weil alle I/O-Dateien des Betreibersystems sind. So wird es gelöscht, wenn das Telefon neu gestartet wird. Und diese Dateigröße hat einige Einschränkungen, wenn die Größe die Begrenzung erreicht, wird das alte Protokoll außer Kraft gesetzt.

  2. Über Logcat: Logcat ist ein Tool zum Lesen oder Neuausgeben der Protokolldateien. Es ist im System/bin/Ordner des Telefons installiert. Ich lese nicht jeden Code von logcat.cpp; Aber ich kann sagen, dass die Logcat-Anwendung die Log-Datei in system/logcat/main standardmäßig liest und sie auf dem Bildschirm oder in der Datei basierend auf den von Ihnen verwendeten Parametern ausgibt.

  3. darüber, wie das Protokoll erstellt: Wenn Sie den Quellcode android.util.log sehen, können Sie alle log.d/log.e wird verwenden JNI-Methode finden Sie das Protokoll zu schreiben, Dateien zu protokollieren, wie oben erwähnt.

    public static native int println_native(int bufID,int priority, String tag, String msg);

    Sie können die JNI-Methode here finden. Wenn Sie es interessiert, können Sie den Quellcode lesen, um zu finden, was es dort tut.

  4. Speichern Sie den Logcat in die gewünschte Datei: Basierend auf dem Log-I/O, Entwickler kann eine Anwendung schreiben das Protokoll in einer Datei auf der SD-Karte im Telefon zu speichern, so dass wir mehr Protokolle oder halten können größere Protokolldatei. Die einfachste Methode ist die Verwendung der Runtime.exec() zur Ausführung der Logcat-Anwendung: Sie können den BOOT-Empfänger überwachen, um Ihren logcat-Befehl zu starten, um alle Logcat-Logs in Ihre eigenen Dateien einzulesen.

Zum Beispiel:

String cmd = "logcat -v time -f yourown.file" 
Process process = Runtime.getRuntime().exec(cmd); 
+1

4 angeht, würde ich dies tun in init.rc, wie ein Skript beim Booten gestartet. – elcuco

+0

Ja, ich denke, es kann funktionieren. wie folgt: 'service goldfish-logcat/system/bin/logcat >> yourfileonsdcard oneshot' es ist ein Skript für den Emulator. – buptcoder

+0

@buptcoder Danke für einen tollen Überblick. Ich habe dies in der Android-Dokumentation gesucht und konnte es nicht finden! – Alan

Verwandte Themen