1

我想将我的应用程序 logcat 事件保存在 sd 卡上的文本文件中。我的令人震惊的应用程序在我和我朋友的设备上正常运行,但其他应用程序在我的应用程序上出现错误。例如,他们说应用程序中的警报时间错误,但我在我和我朋友的设备中没有看到这个错误。由于这个问题和其他问题,我想以原子方式保存与我的应用程序相关的所有事件 logcat。所以他们将日志文件发送给我以解决问题。我怎样才能做到这一点?谢谢对不起我的英语不好

4

5 回答 5

3

您可以通过以下方式获取 logcat:

static final int BUFFER_SIZE = 1024;

public String getLogCat() {
    String[] logcatArgs = new String[] {"logcat", "-v", "time"};

    Process logcatProc = null;
    try {
        logcatProc = Runtime.getRuntime().exec(logcatArgs);
    }
    catch (IOException e) {
        return null;
    }

    BufferedReader reader = null;
    String response = null;
    try {
        String separator = System.getProperty("line.separator");
        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), BUFFER_SIZE);
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
            sb.append(separator);
        }
        response = sb.toString();
    }
    catch (IOException e) {
    }
    finally {
        if (reader != null) {
            try {
                reader.close();
            }
            catch (IOException e) {}
        }
    }

    return response;
}

然后,您可以将其保存String到 SD 卡。

于 2013-01-19T21:53:52.893 回答
1

ACRA Android 库已经实现了这种类型的功能。该库检测崩溃,并将崩溃信息发送到 Google Docs 电子表格或您自己的目的地。

于 2013-01-19T21:51:58.963 回答
1

您可以通过以下方式获取 logcat:

static final int BUFFER_SIZE = 1024;

public String getLogCat() {
    String[] logcatArgs = new String[] {"logcat", "-v", "time"};

    Process logcatProc = null;
    try {
        logcatProc = Runtime.getRuntime().exec(logcatArgs);
    }
    catch (IOException e) {
        return null;
    }

    BufferedReader reader = null;
    String response = null;
    try {
        String separator = System.getProperty("line.separator");
        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), BUFFER_SIZE);
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
            sb.append(separator);
        }
        response = sb.toString();
    }
    catch (IOException e) {
    }
    finally {
        if (reader != null) {
            try {
                reader.close();
            }
            catch (IOException e) {}
        }
    }

    return response;
}

然后,您可以将其保存String到 SD 卡。

“Dororo”的这个答案对我不起作用,因为它总是因为很多行而陷入困境,但我不知道如何解决这个问题。

于 2013-02-15T08:53:28.390 回答
1

除非您指定“-d”参数,否则 logcat 将阻止读取新日志。

尝试

   String[] logcatArgs = new String[] {"logcat", "-d", "-v", "time"};
于 2013-02-28T05:53:40.803 回答
1

在线程内执行以避免 ANR

于 2015-06-14T07:28:25.063 回答