以编程方式过滤我的应用程序的logcat。不适合我

时间:2012-03-15 22:24:28

标签: android logcat

在Android应用程序中,我试图获取应用程序日志消息并将其保存到文件中 我正在使用下面的代码。 我为我的每个班级使用不同的TAG,其中有几个。 做logcat -d给了我所有无关的消息.. 把我的包名像

logcat -d myapp.com:I *:S

不起作用,结果是空的,但如果我这样做

logcat -d MYCLASS1TAG:I MYCLASS2TAG *:S

然后它有效,但我有很多课程。

我怎样才能输入我的包名并获得结果.. ??

try  {      
       Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

   String line;  

   while ((line = bufferedReader.readLine()) != null) 
    {


 //       write to my file here

   }
  }  catch (IOException e)    {   }

2 个答案:

答案 0 :(得分:5)

我不确定如何从命令行执行此操作,但Eclipse的ADT插件允许您按应用程序进行过滤。

编辑:我很好奇,所以我浏览了ADT来源,弄清楚ADT是如何做到的。它的长短是因为它使用-v long选项在每条消息中包含PID,并且它将Map从PID保存到应用程序名称。相关的源代码文件位于包com.android.ddmuilib.logcat.LogCatMessageParsercom.android.ddmuilib.logcat.LogCatPidToNameMapper

因此,我能想到的一个解决方法是调用shell(adb shell),使用ps计算出你的PID,然后将adb logcat的输出传递给grep:

adb logcat -v long | grep <your PID>

这会有点痛苦,因为每次运行应用程序时你的PID都会改变,但这就是你可以在紧要关头做到的。

编辑:我只是注意到长格式实际上在一行上打印了PID并且在下一行上打印了消息,所以你可能需要使用类似awk而不是grep的东西。我将测试一些内容并发布后续内容。

答案 1 :(得分:0)

据我所知,你试图在设备上运行logcat来抓取并保存到文件中。不幸的是,在当前命令行中,filterspec仅支持tag:priority格式。您需要通过自己的逐行过滤器运行输出。你可以通过计算你的PID然后根据它来过滤线来实现自动化。