Как перенаправить вывод моего журнала с logcat на SD-карту на устройстве Android?

Я пытаюсь перенаправить журнал моего приложения в файл sdcard. Но я не смог этого сделать. Я пытаюсь что-то вроде этого.

String cmd= "logcat -v time ActivityManager:W myapp:D *:* >\""+file.getAbsolutePath()+"\""; Runtime.getRuntime().exec(cmd); 

Я также попробовал параметр -f, но он тоже не работает.

Используйте logcat -f <filename> , чтобы выгрузить его в файл в файловой системе.
Убедитесь, что имя файла, которое вы используете, находится в SD-карте, т.е. начинается с /sdcard/...

Кроме того, чтобы передать аргументы программе logcat , вы должны передать методу exec массив строк (и не одну строку):

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

Наконец, если все остальное не работает, используйте полный путь для logcat: /system/bin/logcat а не только logcat .

Это моя работающая версия:

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

Найдите свой файл журнала /sdcard/logfile.log

Logcat -d отправит текущий файл logcat-буфера в файл и затем остановит вывод в этот файл. Просто используйте -f для переадресации logcat, если приложение завершено вручную

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

Попробуйте использовать пробел после каждого элемента в строке. В противном случае он будет рассматривать как одну строку без пробелов и ничего не делать.

Если вы получаете пустой файл журнала, попробуйте изменить расширение файла с .log на .txt .

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