如何以编程方式实时读取 logcat?
How to programmatically read logcat in real time?
我有一个服务想从 logcat 读取数据,从服务开始(即在服务开始之前丢弃 logcat 数据),监控 logcat实时数据,过滤 logcat 以仅显示 "ActivityManager" 的标签和信息日志。
然后我想根据过滤后的 logcat 数据执行某些操作。我尝试了以下方法,但它不起作用:
Runtime.getRuntime().exec("logcat -c"); // flush the logcat first
Process process = Runtime.getRuntime().exec("logcat ActivityManager:I"); // filters logcat to only "ActivityManager:I" logs
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line = "";
Log.d(TAG, "Reading filtered logcat");
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
有谁知道我错在哪里?
我建议您查看此 SO post 中发布的问题和答案。我不在安装了工作室的机器上,所以我现在无法尝试。为了帮助我们回答您的问题,您能否提供更多有关您遇到的问题的信息?当您说您拥有 "doesn't work" 的方法时,您是什么意思? 'log' 的值不会改变吗?是否抛出异常?是否提供了日志但未过滤?
此外,您尝试执行的操作可能无法在无根设备上运行。正如 this SO post/answer 解释的那样,您无法再访问其他应用程序的日志,只能访问您自己的应用程序的日志。这意味着您的服务只能读取它所属的应用程序在无根设备上的日志。
好的,原来我错过了 logcat 中的 -s 参数,它过滤了 logcat 输出。
我有一个服务想从 logcat 读取数据,从服务开始(即在服务开始之前丢弃 logcat 数据),监控 logcat实时数据,过滤 logcat 以仅显示 "ActivityManager" 的标签和信息日志。
然后我想根据过滤后的 logcat 数据执行某些操作。我尝试了以下方法,但它不起作用:
Runtime.getRuntime().exec("logcat -c"); // flush the logcat first
Process process = Runtime.getRuntime().exec("logcat ActivityManager:I"); // filters logcat to only "ActivityManager:I" logs
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line = "";
Log.d(TAG, "Reading filtered logcat");
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
有谁知道我错在哪里?
我建议您查看此 SO post 中发布的问题和答案。我不在安装了工作室的机器上,所以我现在无法尝试。为了帮助我们回答您的问题,您能否提供更多有关您遇到的问题的信息?当您说您拥有 "doesn't work" 的方法时,您是什么意思? 'log' 的值不会改变吗?是否抛出异常?是否提供了日志但未过滤?
此外,您尝试执行的操作可能无法在无根设备上运行。正如 this SO post/answer 解释的那样,您无法再访问其他应用程序的日志,只能访问您自己的应用程序的日志。这意味着您的服务只能读取它所属的应用程序在无根设备上的日志。
好的,原来我错过了 logcat 中的 -s 参数,它过滤了 logcat 输出。