2010-07-29 36 views

Respuesta

21

use logcat -f <filename> para volcarlo en un archivo en el sistema de archivos.
Asegúrate de que el nombre de archivo que estás utilizando está en la tarjeta SD, es decir, comienza con /sdcard/....

Además, con el fin de pasar argumentos al programa logcat, debe pasar el método exec una matriz de cadenas (y no una cadena):

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

Por último, si todo lo demás falla, utilice el pleno ruta para logcat: /system/bin/logcat en lugar de solo logcat.

+1

gracias por reply..I intentó lo mismo, pero estoy recibiendo archivo vacío –

+0

tenga en cuenta que puede tomar algún tiempo para que el archivo de registro para mostrar contenidos, como podría ser el almacenamiento en búfer escribe en el archivo (y escribir una pocos KB a la vez) – adamk

+2

Y otra cosa importante: asegúrese de que su aplicación tenga los permisos WRITE_EXTERNAL_STORAGE y READ_LOGS, o no le permitirá leer los registros y escribirlos en la tarjeta SD. – adamk

0

Intenta usar un espacio después de cada elemento de la cadena. De lo contrario, considerará como un solo comando de línea sin espacios y no hará nada.

+0

hola, Lo intenté, me está dando un archivo vacío ... Esto es lo que probé, Archivo filename = new File ("/ sdcard/logfile.log"); filename.createNewFile(); Cadena [] cmd = new Cadena [] {"logcat", "-v", "tiempo", "ActivityManager: W", "myApp: D", "*: *", "\" "+ filename.getAbsolutePath() + "\" "}; Runtime.getRuntime(). Exec (cmd); –

23

Ésta es mi versión trabajado:

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

encontrar su archivo de registro /sdcard/logfile.log

+6

Todavía obtengo un archivo vacío FileFile.log. Ya agregué WRITE_EXTERNAL_STORAGE y READ_LOGS permisos – kmalmur

+0

'-d' lleva a solo escribir el búfer actual. Logcat luego se detiene para escribir cualquier dato adicional. Vea la respuesta de Bear para obtener una escritura continua. – 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

Gracias. Pero, ¿dónde debería poner este código? ¿Cómo voy a comenzar el proceso? – Pontios

+0

Pon el código de arriba en tu clase * main_activity *. Luego crea un ** proceso de Proceso privado ** y en el método * onCreate * escríbela así: ** process = launchLogcat ("sdcard/log.file"); ** ¡y listo! – Pontios

0

Si usted está recibiendo un archivo de registro vacío, intente cambiar la extensión del archivo de .log a .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(); 
    } 
} 
Cuestiones relacionadas