微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用命令行中的 logcat 通过 TAG 排除消息?

如何解决如何使用命令行中的 logcat 通过 TAG 排除消息?

我正在以编程方式流式传输 logcat 输出,并且我想排除带有某些标签的日志。这是未经过滤的版本(有效):

Runtime.getRuntime().exec("logcat -v time");

这个用例在 Android Studio 中使用“Log Tag:”输入框是可能的,所以在命令行中也应该是可能的。

根据文档,您可以使用正则表达式过滤日志。与在标签上明确过滤并不完全相同,但我想它会这样做:

-e,--regex=

仅打印日志消息与正则表达式匹配的行。

来源:https://developer.android.com/studio/command-line/logcat.html?hl=en#options)

我不能让它工作。例如,我尝试过使用否定前瞻(“包括不包含这些关键字的所有内容”):

Runtime.getRuntime().exec("logcat -v time -e ^(?!.*(ConnectionTracker|SensorManager|SurfaceControl|TetheringManager|ThemeUtils|TransportRuntime|Openglrenderer|ViewRoot))");

...但它不起作用。

有效但超级丑:

  class LogToFileRunnable implements Runnable {

        @Override
        public void run() {
            try {
                final Runtime runtime = Runtime.getRuntime();
                final Process process = runtime.exec("logcat -v time");
                final BufferedReader bufferedReader = new BufferedReader(
                        new InputStreamReader(process.getInputStream(),Charsets.UTF_8));

                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    if (!containsExcludedTags(line)) {
                        logFile.writeLog(String.format(Locale.ROOT,"%d-%s%n",CURRENT_YEAR,line));
                    }
                }
            } catch (IOException e) {
                throw new LoggerException("Unable to write log to file.",e);
            }
        }

        private boolean containsExcludedTags(@NonNull String line) {
            return line.contains("/mali_winsys(") || line.contains("/mali::instrumentation::perfetto::frequency(") ||
                    line.contains("/AbsListView(") || line.contains("/ConnectionTracker(") ||
                    line.contains("/DecorView(") || line.contains("/FA ") || line.contains("/InputMethodManager(") ||
                    line.contains("/mali_egl(") || line.contains("/libEGL ") || line.contains("/DatabaseUtils(") ||
                    line.contains("/InputTransport(") || line.contains("/MixpanelAPI(") ||
                    line.contains("/SensorManager(") || line.contains("/SurfaceControl(") ||
                    line.contains("/System.out(") || line.contains("/TetheringManager(") ||
                    line.contains("/ThemeUtils(") || line.contains("/TransportRuntime(") ||
                    line.contains("/Openglrenderer(") || line.contains("/ViewRootImpl");
        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。