Android 以编程方式筛选我的应用程序的logcat。不为我工作

Android 以编程方式筛选我的应用程序的logcat。不为我工作,android,logcat,Android,Logcat,在android应用程序中,我试图获取我的应用程序日志消息并将它们保存到文件中 我正在使用下面的代码。 我为我的每个类使用不同的标记,并且有几个标记。 做logcat-d会给我所有不相关的信息。。 把我的包裹的名字 logcat-d myapp.com:I*:S 不工作结果为空,但如果我这样做 logcat-d myclasstag:I MYCLASS2TAG*:S 那就行了,但我有很多课 我怎样才能把我的包名和得到的结果 try { Process process

在android应用程序中,我试图获取我的应用程序日志消息并将它们保存到文件中 我正在使用下面的代码。 我为我的每个类使用不同的标记,并且有几个标记。 做logcat-d会给我所有不相关的信息。。 把我的包裹的名字

logcat-d myapp.com:I*:S

不工作结果为空,但如果我这样做

logcat-d myclasstag: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)    {   }

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

编辑:我很好奇,所以我查看了ADT源代码以了解ADT是如何做到这一点的。它的长与短之处在于,它使用
-v long
选项将PID包含在每条消息中,并保留从PID到应用程序名称的映射。相关的源代码文件位于包
com.android.ddmuilib.logcat.LogCatMessageParser
com.android.ddmuilib.logcat.LogCatPidToNameMapper

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

adb logcat -v long | grep <your PID>
adb logcat-v long | grep
这将是一个有点痛苦,因为你的PID将改变每次你运行应用程序,但这就是你可以在紧要关头这样做


编辑:我刚刚注意到长格式实际上在一行打印PID,在下一行打印消息,因此您可能需要使用类似于awk的内容,而不是grep。我将测试一些内容并发布后续信息。

据我所知,您正在尝试在设备上运行logcat以获取并保存到文件。不幸的是,在当前命令行中,filterspec只支持
标记:priority
格式。您需要通过自己的逐行过滤器运行输出。您可能可以通过计算PID,然后根据PID筛选行来自动执行此操作。

恐怕您必须列出所有标签。在eclipse中,当您看到logcat时,其中有一个应用程序列显示您的包名。这让我相信这是可能的我猜他们是在手动过滤日志。至少只列出了
tag:priority
*:priority
是,这是我在手册中看到的。键入所有标记非常不方便。。我有将近20个标记。你可以创建一个类,这个类有一个静态的标记数组供你的其他类使用(或者创建一个奇特的注册表)——使用这个列表以编程方式构建字符串。但是,好吧,这可能比仅仅输入20个标签要多:)谢谢你的努力布赖恩:)