如何通过应用程序过滤Android的logcat?

我怎样才能过滤Android应用程序的logcat输出? 我需要这个,因为当我附上一个设备,我找不到我想要的输出,由于来自其他进程的垃圾邮件。

编辑:原件在下面。 当一个Android Studio不存在时。 但是,如果你想过滤你的整个应用程序,我会使用pidcat进行terminal查看或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 

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

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

下面是一个filterexpression式示例,该expression式除了标签为“ActivityManager”,优先级为“Info”或更高的所有日志消息,以及标签为“MyApp”且优先级为“Debug”或更高的所有日志消息外,

adb logcat ActivityManager:I MyApp:D *:S

上述expression式中的最后一个元素*:S将所有标签的优先级设置为“无声”,从而确保仅显示具有“查看”和“我的应用程序”的日志消息。

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

您好我通过使用这个解决scheme:

你必须从terminal执行这个命令。 我得到了结果,

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

我在Android Studio上工作,有一个很好的select,使用包名称来获取消息。 在“编辑filterconfiguration”上,您可以通过在“按包名称”添加软件包名称来创build一个新的filter。

在这里输入图像描述

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

  • MyActivity1
  • MyActivity2
  • MyActivity3
  • 为MyService

为了使用logcat过滤来自您的应用程序MyApp的日志输出,您需要input以下内容。

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

但是,这要求您知道应用程序中所有组件的TAG名称,而不是使用应用程序名称MyApp进行筛选。 请参阅logcat的具体信息。

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

  • MyAppActivity1
  • MyAppActivity2
  • MyAppActivity3
  • MyAppService

现在可以使用TAG前缀执行logcat输出上的通配符filter。

 adb logcat | grep MyApp 

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

如果你可以忍受这个事实,即你的日志来自一个额外的terminal窗口,我可以推荐pidcat (只取包名,跟踪PID变化)。

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

当我们的应用程序出现错误时,Logcat会自动显示会话filter。 我们可以自己创build会话filter。 只需添加一个新的logcatfilter,填写filter名称的forms。 然后用你的应用程序包填写应用程序名称。 (例如:我的应用程序是“Adukan”,包是“com.adukan”,所以我用应用程序包“com.adukan”填写应用程序名称)

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

只要去logcat ,点击Display Saved Filters视图 ,然后添加新的logcatfilter 。 它会出现以下内容:

在这里输入图像描述

然后你给filter添加一个名字,然后在应用程序名称中指定你的应用程序的包。

在我的Windows 7笔记本电脑上,我使用“adb logcat |” find“com.example.name”来过滤系统程序相关的logcat输出。 logcat程序的输出被传送到find命令中。 包含“com.example.name”的每行都会输出到窗口。 双引号是find命令的一部分。

为了包含我的Log命令的输出,我在这里使用包名称(在这里是“com.example.name”)作为Log命令的第一个参数的一部分:

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

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

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

在logcat视图的左边有“保存的filter”窗口。 在这里,您可以按应用程序名称添加一个新的logcatfilter(例如,com.your.package)

我通常做的是有一个单独的PIDfilter,这将是相当于当前会话。 但是当然,每次运行应用程序时都会发生变化。 不好,但它是唯一的方式,不pipe日志标记,都有关于应用程序的所有信息。

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

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

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

  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(); } 

这可能是最简单的解决scheme。

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

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

用法很简单,就像正常的别名一样。 只需在shell中input命令:

 logcat 

别名设置使得它很方便。 正则expression式使得它适用于多进程应用程序,假设你只关心主进程。

因为你可以为每个进程设置更多的别名。 或者使用hegazy的解决scheme。 🙂

另外,如果你想设置日志级别,那就是

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

您可以在Eclipse logcat中通过在search字段中input以下内容来实现此目的。

 app:com.example.myapp 

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

在Android监视器窗口中的Android Studio中:1.select要过滤的应用程序2.select“仅显示选定的应用程序”

在这里输入图像描述

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

并在LogCat:创buildfilter—>filter名称和日志标记:等于'your_Application_Name'它将为您的应用程序创build新的选项卡。

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

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

然后

 Log.i(TAG, "hi"); 

然后使用grep

 adb logcat | grep com.myapp 

sdk / tools / monitor下提供的Android Device Monitor应用程序具有logcat选项,可在其中input应用程序包名称,以按应用程序名称进行过滤。

我的.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

在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。

我在商店里发现了一个可以显示日志名称/进程的应用程序。 由于Android Studio只是在由其他进程生成的日志中放置一个(?),所以我发现知道哪个进程正在生成这个日志很有用。 但是,这个程序仍然缺less进程名称的filter。 你可以在这里find它。

通过点击logcat左上angular的“+”button,在“Filter Name”中添加您的应用程序包。

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

adb logcat com.yourpackage:v

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

adb com.your.package:I *:s

编辑 – 我很快就谈到了。

 adb com.your.package:v