如何使用BufferedReader从logcat中只读取新行,并忽略所有以前的logcat行

时间:2015-11-02 19:35:05

标签: java android logcat

所以,我试图使用bufferReader从Android设备读取logcat。由于“logcat -c”并不总是能够清除日志,我想启动阅读器,然后删除当前输出并开始只读取新行。我怎样才能做到这一点?

每次启动过程时都会捕获整个logcat输出,我只想在启动阅读器时生成当前行。

所以当我这样做时:

        ProcessBuilder pb = new ProcessBuilder("adb", "logcat", "-v", "threadtime", "-b", "all");
        pb.redirectErrorStream(true);
        Process p = pb.start();

        BufferedReader reader =
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while ( (line = reader.readLine()) != null) {
            result += line + "\n";
        }

捕获整个日志,因为adb logcat将为您提供整个日志,所有以前的行都在缓冲区中,并且没有清除队列的选项。我试图使用标记和重置,但这似乎不起作用。结果字符串始终具有logcat之前的行,这些行是在我启动阅读器之前发生的。

任何人都知道如何写这个,所以只读新行,先前删除了吗?

编辑:当我尝试使用mark和reset时,输出字符串仍然包含一小时前的logcat行,它需要从现在开始。我的理解是标记和集合用于返回缓冲区,我不想这样做。我想只读取来自logcat的新行,而不是前面的行。

    ProcessBuilder pb = new ProcessBuilder("adb", "logcat", "-v", "threadtime", "-b", "all");
    pb.redirectErrorStream(true);
    Process p = pb.start();

    BufferedReader reader =
            new BufferedReader(new InputStreamReader(p.getInputStream()));
    reader.mark(0);
    reader.reset();
    String line = null;
    while ( (line = reader.readLine()) != null) {
        result += line + "\n";
    }
编辑#2:我确实提出了一个“临时”解决方案,通过使用logcats -T选项仅从特定时间戳中获取日志。但是这个解决方案需要我的PC和我的Android设备时间同步。如果有一个没有这个时间同步要求的更好的解决方案,那就太好了。

所以如果有人有,那就太好了。这是我的临时解决方案:

        DateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss.mmm");
        Date date = new Date();
        String dateString = dateFormat.format(date);

        ProcessBuilder pb = new ProcessBuilder(
                "adb", "-s", deviceID, "logcat", "-v", "threadtime", "-b", "all", "-T", dateString);
        pb.redirectErrorStream(true);
        p = pb.start();
        BufferedReader reader =
            new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while ( (line = reader.readLine()) != null) {
            result += line + "\n";
        }

0 个答案:

没有答案