2010-07-29 2 views

Antwort

21

Verwenden Sie logcat -f <filename>, um es in eine Datei im Dateisystem abzulegen.
Stellen Sie sicher, dass der Dateiname, den Sie verwenden, in der SD-Karte ist, also mit /sdcard/... beginnt.

Auch, um Argumente an die logcat Programm zu übergeben, sollten Sie die exec Methode ein Array von Strings (und nicht einen String) übergeben:

String[] cmd = new String[] { "logcat", "-f", "/sdcard/myfilename", "-v", "time", "ActivityManager:W", "myapp:D" }; 

Schließlich, wenn alles andere fehlschlägt, verwenden Sie den vollständigen Pfad für Logcat: statt nur logcat.

+1

thanx für reply..I versucht, die gleichen, aber ich bin immer leere Datei –

+0

Bitte beachten Sie, dass es einige Zeit für die Log-Datei nehmen kann Inhalte zu zeigen, wie es Pufferung schreibt in die Datei sein könnte (und ein Schreiben ein paar KB zu einem Zeitpunkt) – adamk

+2

Und noch eine wichtige Sache - stellen Sie sicher, dass Ihre App die Berechtigungen WRITE_EXTERNAL_STORAGE und READ_LOGS hat - oder es wird es nicht erlauben, Protokolle zu lesen und sie auf die SD-Karte zu schreiben. – adamk

0

Versuchen Sie, ein Leerzeichen nach jedem Element in der Zeichenfolge zu verwenden. Andernfalls wird es als ein einzelner Zeilenbefehl ohne Leerzeichen betrachtet und tut nichts.

+0

Hallo, Ich versuchte, es gibt mir leere Datei ... Dies ist wat ich versuchte, Datei Dateiname = neue Datei ("/ sdcard/logfile.log"); filename.createNewFile(); Zeichenfolge [] cmd = neue Zeichenfolge [] {"logcat", "-v", "Uhrzeit", "ActivityManager: W", "myApp: D", "*: *", "\" "+ Dateiname.getAbsolutePath() + "\" "}; Laufzeit.getRuntime(). Exec (cmd); –

23

Dies ist meine Version gearbeitet:

try { 
    File filename = new File(Environment.getExternalStorageDirectory()+"/logfile.log"); 
    filename.createNewFile(); 
    String cmd = "logcat -d -f "+filename.getAbsolutePath(); 
    Runtime.getRuntime().exec(cmd); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Logdatei finden /sdcard/logfile.log

+6

Ich bekomme immer noch eine leere Datei logFile.log. Ich habe bereits die Berechtigungen WRITE_EXTERNAL_STORAGE und READ_LOGS hinzugefügt – kmalmur

+0

'-d' führt nur zum Schreiben des aktuellen Puffers. Logcat stoppt dann, um irgendwelche zusätzlichen Daten zu schreiben. Siehe die Antwort des Bären, um fortlaufend zu schreiben. – battlepope

4
/** 
    * Launches a logcat process. 
    * To stop the logcat preserve the use: 
    * process.destroy(); 
    * in the onBackPressed() 
    * 
    * @param filename destination of logcat output 
    * @return Process logcaat is running on 
    */ 

    public Process launchLogcat(String filename) { 
     Process process = null; 
     String cmd = "logcat -f " + filename + "\n"; 
     try { 
      process = Runtime.getRuntime().exec(cmd); 
     } catch (IOException e) { 
      process = null; 
     } 
     return process; 
    } 
+0

Danke. Aber wo soll ich diesen Code hinstellen? Wie starte ich den Prozess? – Pontios

+0

Fügen Sie den obigen Code in Ihre Klasse * main_activity * ein. Erstellen Sie dann einen ** privaten Prozess Prozess ** und in der * onCreate * Methode verpuppen Sie es wie folgt: ** process = launchLogcat ("sdcard/log.file"); ** und Sie sind fertig! – Pontios

0

Wenn Sie eine leere Protokolldatei bekommen, versuchen Sie die Erweiterung der Datei ändern von .log zu .txt.

0
public static void saveLogInSDCard(Context context){ 
    String filename = Environment.getExternalStorageDirectory() + File.separator + "project_app.log"; 
    String command = "logcat -d *:V"; 

    try{ 
     Process process = Runtime.getRuntime().exec(command); 

     BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     String line = null; 
     try{ 
      File file = new File(filename); 
      file.createNewFile(); 
      FileWriter writer = new FileWriter(file); 
      while((line = in.readLine()) != null){ 
       writer.write(line + "\n"); 
      } 
      writer.flush(); 
      writer.close(); 
     } 
     catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 
Verwandte Themen