Antworten:
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:
adb shell logcat > log.txt
adb
. Normalerweise inC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
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" />
<uses-permission android:name="android.permission.READ_LOGS" />
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 :)
Für diejenigen, die nicht an USB-Debugging oder -Verwendung interessiert sind, adb
gibt 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.
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, logcat
auf 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.
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
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:
Führen Sie einfach den folgenden Befehl aus, um die Ausgabe auf Ihr Terminal zu übertragen:
adb shell logcat
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:
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
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){}
OnCreate
?
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.
Zwei schritte:
- Generieren Sie das Protokoll
- Laden Sie Google Mail, um das Protokoll zu senden
.
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;
}
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
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