我观察到,当我使用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 <特定设备>]

其他回答

为了访问日志,首先需要安装ADB命令行工具。ADB命令行工具是android studio平台工具的一部分,可以从这里下载。在此之后,需要设置adb工具的path/environment变量。现在您可以从eclipse终端/ intellij终端或mac终端(如果您使用的是macbook)访问logcat。

adb logcat:获取整个logcat。

adb shell pidof 'com.example.debug':获取应用程序的进程id。

adb logcat pid=<pid>:获取特定于应用程序的logcat。

adb logcat pid=<pid>|grep 'sometext':根据某些文本对logcat进行过滤。

有关过滤日志猫的更多信息,请阅读此。

把这个放到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

如果你正在使用Android Studio,你可以选择你想要接收日志的进程。 这是截图。

在Windows 10上,使用Ionic,对我来说最有效的是将“findstr”与所有应用程序消息生成的“INFO:CONSOLE”结合起来。 所以,我在命令行中的命令是:

adb logcat | findstr INFO:CONSOLE

包的名称保证是唯一的,所以你可以使用Log功能与标签作为你的包的名称,然后过滤包的名称:

注意:从构建工具21.0.3开始,这将不再有效,因为标签被限制为23个字符或更少。

日志。<日志级别>("<您的包名>","message");

adb -d logcat <您的包名>:<日志级别> *:S

-d表示实际设备,-e表示模拟器。如果有多个模拟器正在运行,您可以使用-s emulator-<模拟器编号>(例如,-s emulator-5558)

例如:adb -d logcat com.example。例子:我*:S

或者,如果您使用System.out.print将消息发送到日志中,则可以使用adb -d logcat System。out:I *:S只显示对System.out的调用。

您可以在这里找到所有日志级别和更多信息:https://developer.android.com/studio/command-line/logcat.html

http://developer.android.com/reference/android/util/Log.html

编辑:看起来我有点操之过急了,刚刚才意识到您在问Eclipse中的logcat。我上面发布的是如何从命令行通过adb使用logcat。我不确定相同的过滤器是否可以转移到Eclipse中。