如何将我的日志输出从logcat重定向到Android设备上的SD卡?

时间:2010-07-29 05:28:56

标签: android logging

我正在尝试将我的应用程序的日志重定向到sdcard文件。但我没有这样做。我正在尝试这样的事情。

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

我也尝试了-f选项,但它也没有用。

6 个答案:

答案 0 :(得分:23)

这是我的工作版本:

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

答案 1 :(得分:21)

使用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

答案 2 :(得分: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;
    }

答案 3 :(得分:0)

尝试在字符串中的每个元素后面使用空格。否则,它将被视为没有空格的单行命令,并且不执行任何操作。

答案 4 :(得分:0)

如果您收到一个空的日志文件,请尝试将文件扩展名从.log更改为.txt

答案 5 :(得分: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();
    }
}