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

Ale*_*rov 120 android logcat

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

Dav*_*son 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");
Run Code Online (Sandbox Code Playgroud)

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

adb logcat -s AlexeysActivity 
Run Code Online (Sandbox Code Playgroud)

这会过滤掉所有不使用相同标签的内容.

  • 我认为标签用于识别哪个类/应用程序部分正在记录?在eclipse的logcat视图中,可以通过Application进行过滤(例如:de.myapplication.someapp) - 所以如果eclipse的logcat可以做到这一点,那么在使用adb logcat时肯定有办法做同样的事情吗?关于我提到的Tag:[Logging Conventions](http://developer.android.com/reference/android/util/Log.html) (44认同)
  • 你没有回答这个问题.他想将他的应用程序日志数据与他手机中正在发生的其他事情分开. (27认同)
  • -1因为它不是问题的答案.它要求按应用程序过滤,而不是按标签过滤. (24认同)
  • 我认为这个链接:http://developer.android.com/guide/developing/tools/logcat.html与logcat命令更相关.但是它确实(据我所知)没有说明如何通过应用程序的(包)名称或进程ID过滤日志.但是eclipse做到了,所以我只是想知道... (13认同)
  • 我不认为您可以使用命令行版本的logcat按应用程序进行过滤.我怀疑Eclipse logcat插件只是抛出所有日志然后进行自己的过滤. (5认同)
  • 这不应该是可接受的答案,您可以*在IDE和(通过grep)命令行中按应用程序进行筛选. (3认同)
  • CORRECT答案是通过PID进行gep,例如以编程方式运行'Runtime.getRuntime().exec("logcat -v threadtime -d | grep"+ android.os.Process.myPid()" (2认同)

Dom*_*ann 36

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

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

adb logcat ActivityManager:I MyApp:D *:S

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

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

  • 如果我想拥有一个包的所有类,该怎么办?例如,`com.example.android.*:D`?它不起作用,也许它与`*:S`冲突作为日志标记我使用完整的类名,因此包.也许是一种不好的做法 (8认同)

Sha*_*yan 28

嗨,我通过使用这个得到了解决方案:

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

adb logcat | grep `adb shell ps | grep com.package | cut -c10-15`
Run Code Online (Sandbox Code Playgroud)

  • 这很好,除了每次你的应用重启时你都必须重新运行命令(它会得到一个新的PID).另外,你可以用`awk`代替`cut`:`adb logcat | grep"$(adb shell ps | grep com.your.package | awk'{print $ 2}')"` (3认同)
  • 真的很好,这只是自动神奇地工作,很棒.我使用它与logcat-color一起使它很好地着色以及时间戳,然后命令看起来像这样:logcat-color -v time*:v | grep`adb shell ps | grep com.alrimal | 切-c10-15` (2认同)

Sha*_*had 20

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

在此输入图像描述

  • 有谁知道*它是如何工作的?"adb logcat"格式选项都不包含应用程序名称. (10认同)
  • 这有用吗?对我来说它什么都不会显示 (5认同)

The*_*ppo 12

如果您可以接受这样的事实,即您的日志来自额外的终端窗口,我可以推荐pidcat(仅获取包名称并跟踪PID更改.)


Ste*_*ker 11

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

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • 为MyService

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

adb logcat MyActivity1:v MyActivity2:v MyActivity3:v MyService:v *:s
Run Code Online (Sandbox Code Playgroud)

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

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

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

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

adb logcat | grep MyApp
Run Code Online (Sandbox Code Playgroud)

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

  • 在Windows系统(或没有`grep`的系统)上,只需使用`adb shell`连接到设备,然后运行命令:`shell @ myDevice:/ $ logcat | grep MyApp` (4认同)

Gav*_*iel 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}:"
Run Code Online (Sandbox Code Playgroud)

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

  • 而不是那个奇怪的`cut`&`sed`组合,你可以使用`awk'{print $ 2}'`:-) (2认同)

小智 7

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


Cir*_*sta 6

如果你使用Eclipse,你就可以按照shadmazumder提供的Android Studio进行过滤.

只需转到logcat,单击Display Saved Filters视图,然后添加新的logcat过滤器.它将显示如下:

在此输入图像描述

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


ear*_*per 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");
Run Code Online (Sandbox Code Playgroud)

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