2012-03-15 35 views
2

在一个Android应用程序,我试图让我的应用程序日志消息,并将它们保存到文件 我使用下面的代码。 我为每个班级使用了不同的标签,其中有几个。 做的logcat -d给了我所有无关的消息.. 把我的包的名字一样以编程方式为我的应用程序过滤logcat。不为我工作

的logcat -d myapp.com:I *:S

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

的logcat -d MYCLASS1TAG:我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) { } 
+0

恐怕你必须列出你所有的标签。或者您手动过滤完整日志。 – zapl 2012-03-15 22:32:54

+0

在eclipse中,当你看到logcat时,在那里有一个应用程序列,它显示你的包名。这让我相信这可能是可能的 – Ahmed 2012-03-15 22:36:40

+0

我想他们正在手动过滤日志。至少http://developer.android.com/guide/developing/tools/adb.html#logcat只列出'tag:priority'和'*:priority' – zapl 2012-03-15 22:39:20

回答

5

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

编辑:我很好奇,所以我翻阅了ADT的资料来看看ADT是怎么做到的。它的长短之处在于它使用-v long选项将PID包含在每条消息中,并且它将映射从PID保存到应用程序名称。相关源代码文件位于软件包com.android.ddmuilib.logcat.LogCatMessageParsercom.android.ddmuilib.logcat.LogCatPidToNameMapper中。

所以,一个解决办法,我能想到的是调用一个shell(adb shell),使用ps找出你的PID,然后通过管道亚行logcat的输出到grep:

adb logcat -v long | grep <your PID> 

这将是有点痛苦,因为你的PID每次运行应用程序时都会改变,但这就是你可以轻松地做到的。

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

+0

感谢您的努力布赖恩:) – Ahmed 2012-03-16 00:04:04

0

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

相关问题