如何将日志输出从logcatredirect到Android设备上的SD卡?

我试图将我的应用程序的日志redirect到SD卡文件。 但我没有这样做。 我正在尝试这样的事情。

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

我也试过-f选项,但它也不工作。

使用logcat -f <filename>为了将其转储到文件系统中的文件。
确保你使用的文件名在SD卡中,即以/sdcard/...开头。

此外,为了将parameter passing给logcat程序,您应该将exec方法传递给一个string数组(而不是一个string):

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

最后,如果一切都失败,请使用logcat: /system/bin/logcat的完整path,而不是仅使用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(); } 

find你的日志文件/sdcard/logfile.log

logcat -d会将当前的logcat缓冲区发送到文件,然后停止输出到该文件。 如果应用程序手动终止,只需使用-f来redirectlogcat

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

尝试在string中的每个元素之后使用空格。 否则,它会认为是没有空格的单行命令,什么都不做。

如果您得到一个空的日志文件,请尝试将文件的扩展名从.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(); } }