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


当前回答

把这个放到applog.sh

#!/bin/sh
PACKAGE=$1
APPPID=`adb -d shell ps | grep "${PACKAGE}" | cut -c10-15 | sed -e 's/ //g'`
adb -d logcat -v long \
 | tr -d '\r' | sed -e '/^\[.*\]/ {N; s/\n/ /}' | grep -v '^$' \
 | grep " ${APPPID}:"

然后: applog.sh com.example.my.package

其他回答

除了Tom Mulcahy的回答,如果你想在Windows的控制台上通过PID进行过滤,你可以创建一个像这样的批处理文件:

@ECHO OFF

:: find the process id of our app (2nd token)
FOR /F "tokens=1-2" %%A IN ('adb shell ps ^| findstr com.example.my.package') DO SET PID=%%B

:: run logcat and filter the output by PID
adb logcat | findstr %PID%

这可能是最简单的解决方案。

在Tom Mulcahy的解决方案之上,你可以进一步简化它,如下所示:

alias logcat="adb logcat | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

使用方便,如普通别名。只需在shell中输入命令:

logcat

别名设置非常方便。regex使它对于多进程应用程序非常健壮,假设你只关心主进程。

因为您可以根据需要为每个进程设置更多的别名。或者用hegazy的解。:)

此外,如果您想设置日志级别,它是

alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"

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

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

对于mac:

adb logcat | grep "MyUniqueString" 

Windows (powershell):

adb logcat | Select-String "MyUniqueString"

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

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

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