如何按应用程序过滤Android logcat?

时间:2011-09-24 06:25:04

标签: android logcat

如何按应用程序过滤Android logcat输出?我需要这个,因为当我附加设备时,由于来自其他进程的垃圾邮件,我无法找到我想要的输出。

27 个答案:

答案 0 :(得分:46)

编辑:原文如下。当一个Android Studio不存在时。但是如果你想过滤整个应用程序,我会使用pidcat进行终端查看或Android Studio。使用pidcat而不是logcat,标签不需要是应用程序。您可以使用pidcat com.your.application

来调用它

您应该使用自己的标记,请查看:http://developer.android.com/reference/android/util/Log.html

像。

Log.d("AlexeysActivity","what you want to log");

然后当你想阅读日志时使用>

adb logcat -s AlexeysActivity 

过滤掉所有不使用相同标签的内容。

答案 1 :(得分:35)

根据http://developer.android.com/tools/debugging/debugging-log.html

  

这是一个过滤器表达式的示例,它禁止除标记为“ActivityManager”,优先级为“Info”或更高版本的所有日志消息,以及标记为“MyApp”的所有日志消息,优先级为“Debug”或更高:

adb logcat ActivityManager:I MyApp:D *:S

  

上述表达式中的最后一个元素*:S将所有标记的优先级设置为“silent”,从而确保只显示带有“View”和“MyApp”的日志消息。

  • V - 详细(最低优先级)
  • D - 调试
  • 我 - 信息
  • W - 警告
  • E - 错误
  • F - 致命
  • S - 无声(最高优先级,无需打印任何内容)

答案 2 :(得分:25)

您好我通过使用此解决方案得到了解决方案:

您必须从终端执行此命令。我得到了结果,

adb logcat | grep `adb shell ps | grep com.package | cut -c10-15`

答案 3 :(得分:19)

我正在使用Android Studio,有一个很好的选项来使用包名来获取消息。 在“编辑过滤器配置”中,您可以通过在“按包名称”上添加包名称来创建新过滤器。

enter image description here

答案 4 :(得分:12)

如果你能记住你的日志来自额外的终端窗口这一事实,我可以推荐pidcat(只取包名并跟踪PID变化。)

答案 5 :(得分:11)

假设名为MyApp的应用程序包含以下组件。

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • 为MyService

要使用logcat过滤应用程序MyApp的日志记录输出,请键入以下内容。

adb logcat MyActivity1:v MyActivity2:v MyActivity3:v MyService:v *:s

但是,这需要您了解应用程序中所有组件的TAG名称,而不是使用应用程序名称MyApp进行过滤。有关详细信息,请参阅logcat

允许在应用程序级别进行过滤的一种解决方案是为每个独特的TAG添加前缀。

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

现在可以使用TAG前缀在logcat输出上执行通配符过滤器。

adb logcat | grep MyApp

结果将是整个应用程序的输出。

答案 6 :(得分:10)

把它放到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

答案 7 :(得分:7)

当我们从应用程序中收到一些错误时,Logcat会自动显示会话过滤器。我们可以自己创建会话过滤器。只需添加一个新的logcat过滤器,填写过滤器名称表单。然后使用您的应用程序包填充应用程序名称。 (例如:我的申请是“Adukan”,包是“com.adukan”,所以我用应用程序包填写“com.adukan”)

答案 8 :(得分:6)

如果你使用Eclipse,你可以像应用程序那样过滤,就像shadmazumder提供的Android Studio一样。

只需转到 logcat ,点击显示保存的过滤器视图,然后添加新的logcat过滤器。它将显示如下:

enter image description here

然后为过滤器添加名称,并在按应用程序名称指定应用程序的包。

答案 9 :(得分:5)

在我的Windows 7笔记本电脑上,我使用' adb logcat |找到" com.example.name"'从其余部分过滤与系统程序相关的logcat输出。 logcat程序的输出通过管道输入到find命令。每行包含' com.example.name'输出到窗口。双引号是find命令的一部分。

要包含我的Log命令的输出,我使用包名称,这里" com.example.name",作为我的Log命令中第一个参数的一部分,如下所示:

Log.d("com.example.name activity1", "message");

注意:我的三星Galaxy手机输出的节目相关输出要少得多 比17级模拟器。

答案 10 :(得分:2)

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

除了Tom Mulcahy的解决方案之外,您还可以进一步简化它,如下所示:

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

使用方法与普通别名一样简单。只需在shell中输入命令:

logcat

别名设置使它变得更方便。正则表达式使得它对多进程应用程序具有可靠性,假设您只关心主进程。

您可以根据需要为每个流程设置更多别名。或者使用hegazy的解决方案。 :)

此外,如果要设置日志记录级别,则为

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

答案 11 :(得分:1)

通常,我在提示符中执行此命令“adb shell ps”(允许查看正在运行的进程),并且可以发现应用程序的pid。有了这个pid,请转到Eclipse并编写pid:XXXX(XXXX是应用程序pid)然后日志输出被此应用程序过滤。

或者,以更简单的方式...在Eclipse的logcat视图中,搜索与所需应用程序相关的任何单词,发现pid,然后通过pid“pid:XXXX”进行过滤。

答案 12 :(得分:1)

我通常采用的是 PID 的单独过滤器,它等同于当前会话。但是每次运行应用程序时它都会发生变化。不好,但这是获取应用程序所有信息的唯一方式,无论日志标记如何。

答案 13 :(得分:1)

是的,现在你会自动获得....
更新到AVD 14,其中logcat将自动session filter
在哪里过滤登录您的特定应用程序(包)

答案 14 :(得分:1)

我的.bash_profile函数,可能有任何用处

logcat() {
    if [ -z "$1" ]
    then
        echo "Process Id argument missing."; return
    fi
    pidFilter="\b$1\b"
    pid=$(adb shell ps | egrep $pidFilter | cut -c10-15)
    if [ -z "$pid" ]
    then
        echo "Process $1 is not running."; return
    fi
    adb logcat | grep $pid
}

alias logcat-myapp="logcat com.sample.myapp"

用法:

$ logcat-myapp

$ logcat com.android.something.app

答案 15 :(得分:1)

在logcat视图的左侧,您有"已保存的过滤器"视窗。在这里,您可以按应用程序名称添加新的logcat过滤器(例如,com.your.package)

答案 16 :(得分:1)

您可以在Eclipse logcat中通过在搜索字段中输入以下内容来实现此目的。

app:com.example.myapp

com.example.myapp是应用程序包名称。

答案 17 :(得分:1)

我用它将它存储在一个文件中:

        int pid = android.os.Process.myPid();
        File outputFile = new File(Environment.getExternalStorageDirectory() + "/logs/logcat.txt");
        try {
            String command = "logcat | grep " + pid + " > " + outputFile.getAbsolutePath();
            Process p =  Runtime.getRuntime().exec("su");
            OutputStream os = p.getOutputStream();
            os.write((command + "\n").getBytes("ASCII"));
        } catch (IOException e) {
            e.printStackTrace();
        }

答案 18 :(得分:1)

在Android Monitor窗口的Android Studio中: 1.选择要筛选的应用程序 2.选择"仅显示选定的应用程序"

enter image description here

答案 19 :(得分:0)

我在商店找到了一个可以显示日志名称/进程的应用程序。 由于Android Studio只是在其他进程生成的日志上放置(?),因此我发现知道哪个进程生成此日志很有用。但是这个应用程序仍然缺少进程名称的过滤器。你可以找到它here

答案 20 :(得分:0)

在Linux / Un * X / Cygwin上,您可以使用此命令获取项目中所有标记的列表(每个标记后附加:V)(因为可读性而分开):

$ git grep 'String\s\+TAG\s*=\s*' |  \
  perl -ne 's/.*String\s+TAG\s*=\s*"?([^".]+).*;.*/$1:V/g && print ' | \
  sort | xargs
AccelerometerListener:V ADNList:V Ashared:V AudioDialog:V BitmapUtils:V # ...

它涵盖了定义标签的两种方式定义的标签:

private static final String TAG = "AudioDialog";
private static final String TAG = SipProfileDb.class.getSimpleName();

然后将它用于adb logcat。

答案 21 :(得分:0)

在sdk / tools / monitor下可用的Android设备监视器应用程序有一个logcat选项,可按应用程序名称'进行过滤。您输入应用程序包名称的位置。

答案 22 :(得分:0)

为日志标记使用完全限定的类名:

public class MyActivity extends Activity {
  private static final String TAG = MyActivity.class.getName();
}

然后

Log.i(TAG, "hi");

然后使用grep

adb logcat | grep com.myapp

答案 23 :(得分:0)

使用第一个参数作为您的应用程序名称。 Log.d( “your_Application_Name”, “消息”);

并在LogCat中:创建过滤器--->过滤器名称&按日志标记:等于'your_Application_Name' 它将为您的应用程序创建新选项卡。

答案 24 :(得分:-1)

点击logcat左上角的“+”按钮,在“过滤器名称”中添加应用程序包。

答案 25 :(得分:-2)

在命令行上过滤日志使用以下脚本

adb logcat com.yourpackage:v

答案 26 :(得分:-5)

可以过滤日志cat输出,以便仅使用这些参数显示包中的消息。

adb com.your.package:I *:s

编辑 - 我很快就采访了。

adb com.your.package:v