Wie erhalte ich die Protokolldatei von einem Android-Gerät?

129

Ich möchte die Protokolldatei von einem Gerät auf meinen PC ziehen. Wie kann ich das machen?

Pentium10
quelle

Antworten:

112

Logcollector ist eine gute Option, aber Sie müssen es zuerst installieren.

Wenn ich möchte, dass die Protokolldatei per E-Mail gesendet wird, gehe ich normalerweise wie folgt vor:

Macarse
quelle
Diese Kommandozeile funktioniert bei mir nicht, ich bekomme diese Ausgabe. Logcat gelesen: Ungültiges Argument
Neoneye
5
Beachten Sie, dass Logcollector für Android-Versionen über 4.1 nicht funktioniert, da Anwendungen nur noch ihre eigenen Protokolleinträge lesen dürfen. ( groups.google.com/forum/#!topic/android-log-collector/… )
Matthew Lowe
11
Gibt es keine einfache Methode, um die Protokolldatei einfach vom Gerät abzurufen, sobald sie über USB als externes Speichergerät verbunden ist, ohne dass adb oder ähnliches installiert werden muss?
ODER Mapper
Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden adb. Normalerweise inC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
lolololol ol
30

Ich hoffe, dieser Code hilft jemandem. Ich habe 2 Tage gebraucht, um herauszufinden, wie ich mich vom Gerät aus anmelden und es dann filtern kann:

public File extractLogToFileAndWeb(){
        //set a file
        Date datum = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
        String fullName = df.format(datum)+"appLog.log";
        File file = new File (Environment.getExternalStorageDirectory(), fullName);

        //clears a file
        if(file.exists()){
            file.delete();
        }


        //write log to file
        int pid = android.os.Process.myPid();
        try {
            String command = String.format("logcat -d -v threadtime *:*");        
            Process process = Runtime.getRuntime().exec(command);

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder result = new StringBuilder();
            String currentLine = null;

            while ((currentLine = reader.readLine()) != null) {
                   if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
                       result.append(currentLine);
                       result.append("\n");
                    }
            }

            FileWriter out = new FileWriter(file);
            out.write(result.toString());
            out.close();

            //Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }


        //clear the log
        try {
            Runtime.getRuntime().exec("logcat -c");
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }

        return file;
    }

wie von @mehdok gezeigt

Fügen Sie dem Manifest die Berechtigung zum Lesen von Protokollen hinzu

<uses-permission android:name="android.permission.READ_LOGS" />
user1354692
quelle
1
Dies funktioniert gut, aber auf jedem Gerät, das Sie benötigen<uses-permission android:name="android.permission.READ_LOGS" />
Mehdok
27

Ich würde so etwas verwenden:

$adb logcat -d > logcat.txt

Die Option -d speichert den gesamten Umlaufpuffer in der Textdatei. Wenn Sie nach einer bestimmten Aktion / Absicht suchen, versuchen Sie es

$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt

Hoffe das hilft :)

Rohit
quelle
13

Für diejenigen, die nicht an USB-Debugging oder -Verwendung interessiert sind, adbgibt es eine einfachere Lösung. In Android 6 (nicht sicher über frühere Version) gibt es eine Option unter Entwicklertools: Take Bug Report

Wenn Sie auf diese Option klicken, wird ein Fehlerbericht erstellt und Sie werden aufgefordert, ihn auf dem Laufwerk zu speichern oder per E-Mail zu senden.

Ich fand, dass dies der einfachste Weg ist, um Protokolle zu erhalten. Ich mag das USB-Debugging nicht.

jjhavokk
quelle
1
Genau das, wonach ich gesucht habe!
YYamil
1
Wo finde ich es genau?
Gurehbgui
11

BEARBEITEN:

Das interne Protokoll ist ein Ringpuffer im Speicher. Es gibt tatsächlich einige solcher kreisförmigen Puffer für: Radio, Ereignisse, Hauptpuffer. Der Standardwert ist main.

Um eine Kopie eines Puffers zu erhalten, besteht eine Technik darin, einen Befehl auf dem Gerät auszuführen und die Ausgabe als Zeichenfolgenvariable abzurufen.

SendLog ist eine Open Source App, die genau dies tut: http://www.l6n.org/android/sendlog.shtml

Der Schlüssel ist, logcatauf dem Gerät im eingebetteten Betriebssystem ausgeführt zu werden. Es ist nicht so schwer, wie es sich anhört. Schauen Sie sich einfach die Open Source-App im Link an.

Brad Hein
quelle
Dies gibt die Ausgabe auf dem Bildschirm aus, ich brauche sie in einer Datei.
Pentium10
Sie können Protokolle mit aLogCat senden. Oder kopieren und einfügen einfach aus DDMS: P
Molnarm
@molnarm Ich gebe zu, dass meine Antwort etwas überarbeitet wurde, wenn das alles ist, was er tun muss =)
Brad Hein
@BradHein Sie sagten, SendLog sei Open Source, aber ich kann den Quellcode scheinbar nicht finden. Irgendeine Idee wo es ist?
Smith 324
8

Oft bekomme ich den Fehler " logcat read: Invalid argument". Ich musste das Protokoll löschen, bevor ich aus dem Protokoll lesen konnte.

Ich mag das:

prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
neoneye
quelle
Vielen Dank! Ich hatte diesen Fehler für eine lange Zeit, dass logcat -c ihn sofort behoben hat!
Jords
4

Eine einfache Möglichkeit besteht darin, eigene Protokollkollektormethoden oder auch nur eine vorhandene Protokollkollektor-App vom Markt zu erstellen.

Für meine Apps habe ich eine Berichtsfunktion erstellt, die die Protokolle an meine E-Mail-Adresse (oder sogar an einen anderen Ort) sendet. Sobald Sie das Protokoll erhalten haben, können Sie tun, was Sie möchten.

Hier ist ein einfaches Beispiel, wie Sie die Protokolldatei von einem Gerät abrufen können:

Moos
quelle
3

Führen Sie einfach den folgenden Befehl aus, um die Ausgabe auf Ihr Terminal zu übertragen:

adb shell logcat
Weston Ganger
quelle
3

Ich weiß, dass es eine alte Frage ist, aber ich glaube, dass sie auch 2018 noch gültig ist.

Es gibt eine Option, einen Fehlerbericht zu erstellen , der in den Entwickleroptionen auf jedem Android-Gerät versteckt ist .

HINWEIS: Dies würde das gesamte Systemprotokoll sichern

Wie aktiviere ich Entwickleroptionen? Siehe: https://developer.android.com/studio/debug/dev-options

Was funktioniert bei mir:

  1. Starten Sie Ihr Gerät neu (um minimale Müllprotokolle zu erstellen, die der Entwickler analysieren kann).
  2. Reproduzieren Sie Ihren Fehler
  3. Gehen Sie zu Einstellungen -> Entwickleroptionen -> Fehlerbericht erstellen
  4. Warten Sie, bis das Android-System die Protokolle erfasst hat (sehen Sie sich die Fortschrittsanzeige in der Benachrichtigung an).
  5. Tippen Sie nach Abschluss des Vorgangs auf die Benachrichtigung, um sie freizugeben (Sie können Google Mail oder einen anderen Benutzer verwenden).

wie liest man das? open bugreport-1960-01-01-hh-mm-ss.txt

Sie möchten wahrscheinlich nach so etwas suchen:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main

oder:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Piotr Z.
quelle
2

Dank user1354692 konnte ich es mit nur einer Zeile einfacher machen! derjenige, den er kommentiert hat:

try {
    File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
    Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
jfcogato
quelle
Wo kann man diesen Code am besten ablegen? in OnCreate?
Youngjae
2

Ich habe eine kleine Bibliothek (.aar) erstellt, um die Protokolle per E-Mail abzurufen. Sie können es mit Google Mail-Konten verwenden. Es ist ziemlich einfach, funktioniert aber. Eine Kopie erhalten Sie hier

Die Website ist auf Spanisch, es gibt jedoch ein PDF mit einer englischen Version der Produktbeschreibung.

Ich hoffe es kann helfen.

lm2a
quelle
2

Zwei schritte:

  • Generieren Sie das Protokoll
  • Laden Sie Google Mail, um das Protokoll zu senden

.

  1. Generieren Sie das Protokoll

    File generateLog() {
        File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
        if (!logFolder.exists()) {
            logFolder.mkdir();
        }
        String filename = "myapp_log_" + new Date().getTime() + ".log";
    
        File logFile = new File(logFolder, filename);
    
        try {
            String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
            Runtime.getRuntime().exec(cmd);
            Toaster.shortDebug("Log generated to: " + filename);
            return logFile;
        }
        catch (IOException ioEx) {
            ioEx.printStackTrace();
        }
    
        return null;
    }
  2. Laden Sie Google Mail, um das Protokoll zu senden

    File logFile = generateLog();
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
    intent.setType("multipart/");
    startActivity(intent);

Referenzen für # 1

~~

Für # 2 gibt es viele verschiedene Antworten zum Laden der Protokolldatei zum Anzeigen und Senden. Schließlich funktionierte die Lösung hier tatsächlich für beide:

  • Laden Sie Google Mail als Option
  • Hängt die Datei erfolgreich an

Vielen Dank an https://stackoverflow.com/a/22367055/2162226 für die richtig funktionierende Antwort

Gene Bo
quelle
0

Stellen Sie zunächst sicher, dass der Befehl adb ausführbar ist, indem Sie PATH auf android sdk platform-tools setzen:

export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH

dann renne:

adb shell logcat > log.txt

ODER zuerst zu adb platform-tools wechseln:

cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

dann renne

./adb shell logcat > log.txt
Aqib Mumtaz
quelle