2010-07-29 14 views

Odpowiedz

21

użyć logcat -f <filename> w celu zrzutu do pliku w systemie plików.
Upewnij się, że nazwa pliku, którego używasz, znajduje się na sdcard, tzn. Zaczyna się od /sdcard/....

Ponadto, w celu przekazywania argumentów do programu logcat, należy podać metodę exec tablicę ciągów (a nie jeden String):

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

końcu, jeśli wszystko inne zawiedzie, należy użyć pełnej ścieżka do logcat: /system/bin/logcat zamiast tylko logcat.

+1

thanx dla reply..I próbowała to samo, ale otrzymuję pusty plik –

+0

należy pamiętać, że może to zająć trochę czasu dla pliku dziennika, aby pokazać zawartość, jak to może być buforowania zapisuje do pliku (i pisania kilka KB na raz) – adamk

+2

I jeszcze jedna ważna rzecz - upewnij się, że twoja aplikacja ma uprawnienia WRITE_EXTERNAL_STORAGE i READ_LOGS - lub nie pozwoli jej czytać dzienników i zapisywać ich na sdcard. – adamk

0

Spróbuj użyć spacji po każdym elemencie ciągu. W przeciwnym razie potraktuje to jako jedno polecenie liniowe bez spacji i nic nie zrobi.

+0

cześć, Próbowałem, to daje mi pusty plik ... To jest wat próbowałem, Nazwa pliku = nowy Plik ("/ sdcard/logfile.log"); filename.createNewFile(); Ciąg [] cmd = nowy ciąg [] {"logcat", "-v", "czas", "ActivityManager: W", "myApp: D", "*: *", "\" "+ filename.getAbsolutePath() + "\" "}; Runtime.getRuntime(). Exec (cmd); –

23

To mój pracował wersja:

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(); 
} 

znaleźć logfile /sdcard/logfile.log

+6

Nadal dostaję pusty plik logFile.log. Dodałem już uprawnienia WRITE_EXTERNAL_STORAGE i READ_LOGS – kmalmur

+0

'-d' prowadzi tylko do zapisania bieżącego bufora. Logcat następnie zatrzymuje się, aby zapisać dodatkowe dane. Zobacz odpowiedź niedźwiedzia, aby uzyskać ciągłe pisanie. – 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

Dziękuję. Ale gdzie powinienem umieścić ten kod? Jak rozpocząć proces? – Pontios

+0

Umieść powyższy kod w klasie * main_activity *. Następnie utwórz ** prywatny proces procesowy **, aw metodzie * onCreate * programuj go w następujący sposób: ** process = launchLogcat ("sdcard/log.file"); ** i gotowe! – Pontios

0

Jeśli otrzymujesz pusty plik dziennika, spróbuj zmienić rozszerzenie pliku z .log do .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(); 
    } 
} 
Powiązane problemy