如何通过应用程序过滤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