1

我正在使用 Android 的日志来监督应用程序的使用,所以我在手机中使用了 logcat,而不是在 Eclipse 中。

好吧,如果我只是在日志中写入并将信息发送给我,一切都可以,但我会收到以前执行的信息。我决定每次应用程序启动时都清除日志,但现在我通常会丢失第一条日志消息。也许 logcat 需要一些时间来清除?因为当我尝试调试一切时,一切正常。

例子:

清除日志,消息 1,消息 2,消息 3,...

有时我没有收到消息 1,有时没有收到消息 1 和 2...

我已经检查了我所有的代码是否可能意外清除,但我没有找到任何东西......

我在开始时调用了这个函数(在 onCreate() 中)

public static void clearLog(){
            ArrayList<String> commandLine = new ArrayList<String>();
            commandLine.add("logcat");
            commandLine.add("-c");//CLEAR

            Runtime process = Runtime.getRuntime();
            process.exec(commandLine.toArray(new String[0]));

            TAG = "";
}

然后我添加日志

log.i(TAG, "message1");
..
log.i(TAG, "messageN");

这就是我收集日志的方式:

ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("logcat");
commandLine.add("-d");//dump and exit
commandLine.add("-v");//especify verbose mode
commandLine.add("raw");//raw show only the message, brief for show all
commandLine.add(TAG + ":V");//show TAG's log
commandLine.add("*:S");//hide others

Process process = Runtime.getRuntime().exec(
        commandLine.toArray(new String[0]));
BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(process.getInputStream()));

String line, log = "";
while ((line = bufferedReader.readLine()) != null) {
    log += line + LINE_SEPARATOR;
}
4

1 回答 1

1

文档exec()

在单独的本机进程中执行指定的命令及其参数。

所以它在一个单独的进程中运行。在您开始记录之前,没有一个很好的方法来判断它是否已经完成。

您可以在每次运行时更改日志标签,而不是清除日志。只需使用常规标签附加一些标识运行的数字,即使只是随机的。然后,当您收集日志时,您可以按此过滤,并且只收集您想要的日志。

于 2013-10-02T13:14:29.577 回答