我观察到,当我使用Logcat Eclipse ADT for Android时,我也从许多其他应用程序获得消息。是否有一种方法来过滤这个,只显示来自我自己的应用程序的消息。


当前回答

这是Gavriel的applog.sh的另一个变体,支持多个设备和多个进程的应用程序:

#!/bin/sh
PKG=$1
shift

APPIDS=`adb $@ shell ps | awk -v PKG="$PKG" '
    (NR == 1){appcolumn=2; for (i=1; i<=NF; i++) if ($i=="PID") {appcolumn=i}}
    index($0,PKG){print $(appcolumn)}' | paste -d \| -s`

echo "PID's: $APPIDS"
adb $@ logcat -v color | awk  "(\$3 ~ /$APPIDS/){print \$0}"

使用方法:applog.sh com.example.my.package [-s <特定设备>]

其他回答

如果您正在使用Eclipse,请在下面的logCat窗口中按下绿色+号,并将您的包名称(com.example.yourappname)放在按应用程序名称框中。此外,在“筛选器名称”框中选择任何适合您的名称,然后单击“确定”。当从logCat的左窗格中选择刚才添加的筛选器时,您将只看到与应用程序相关的消息。

应用程序消息

作为一个变体,你可以使用第三方脚本PID猫由杰克沃顿。这个脚本有两个主要优点:

显示来自特定应用程序包的进程的日志项 颜色logcat

从文档:

在应用程序开发过程中,您通常希望只显示来自应用程序的日志消息。不幸的是,由于进程ID在每次部署到手机时都会更改,这对grep进行正确的操作是一个挑战。 这个脚本通过应用程序包进行过滤解决了这个问题。

输出如下所示

ADT v15 for Eclipse允许您指定应用程序名称(实际上是androidmanifest.xml中的包值)。

我喜欢通过应用程序进行过滤,但新的logcat在自动滚动方面有一个bug。当您向上滚动一点以查看以前的日志时,它会在几秒钟内自动滚动回底部。在日志中向上滚动1/2的位置似乎可以防止它跳回底部,但这通常是无用的。

编辑:我试着从命令行指定一个应用程序过滤器——但运气不好。如果有人解决了这个问题或者如何停止自动滚动,请告诉我。

我写了一个shell脚本,通过包名过滤logcat,我认为这比使用更可靠

ps | grep com.example.package | cut -c10-15

它使用/proc/$pid/cmdline找到实际的pid,然后在logcat上执行grep

https://gist.github.com/kevinxucs/7340e1b1dd2239a2b04a

我通常会在日志消息中添加一些内容以使其与众不同。或者以unity app为例,你可以使用“unity”作为匹配字符串。

对于mac:

adb logcat | grep "MyUniqueString" 

Windows (powershell):

adb logcat | Select-String "MyUniqueString"