在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) { }
答案 0 :(得分:5)
我不确定如何从命令行执行此操作,但Eclipse的ADT插件允许您按应用程序进行过滤。
编辑:我很好奇,所以我浏览了ADT来源,弄清楚ADT是如何做到的。它的长短是因为它使用-v long
选项在每条消息中包含PID,并且它将Map从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>
这会有点痛苦,因为每次运行应用程序时你的PID都会改变,但这就是你可以在紧要关头做到的。
编辑:我只是注意到长格式实际上在一行上打印了PID并且在下一行上打印了消息,所以你可能需要使用类似awk而不是grep的东西。我将测试一些内容并发布后续内容。
答案 1 :(得分:0)
据我所知,你试图在设备上运行logcat来抓取并保存到文件中。不幸的是,在当前命令行中,filterspec仅支持tag:priority
格式。您需要通过自己的逐行过滤器运行输出。你可以通过计算你的PID然后根据它来过滤线来实现自动化。