我注意到当我在使用带有ADT的Eclipse的Logcat时,会收到来自许多其他应用程序的消息。有没有办法过滤这些消息,仅显示来自我的应用程序的消息。
我注意到当我在使用带有ADT的Eclipse的Logcat时,会收到来自许多其他应用程序的消息。有没有办法过滤这些消息,仅显示来自我的应用程序的消息。
adb logcat | grep -F "`adb shell ps | grep com.asanayoga.asanarebel | tr -s [:space:] ' ' | cut -d' ' -f2`"
adb logcat | findstr com.example.package
adb logcat *:E | findstr com.example.package
adb logcat | grep \
adb shell ps | grep org.videolan.vlc | awk '{print $2")"}'`` - alijandroadb logcat | findstr com.example.package
- Redomanadb logcat | grep `adb shell ps | grep com.example.package | tr -s [:space:] ' ' | cut -d' ' -f2`
。 - hiepndadb logcat | grep -i \
adb shell ps | grep $1 | cut -c11-15`` 它在一个脚本中,我只需传入包名即可。 - David包名是唯一的,因此您可以使用包名作为标记并按包名过滤来使用Log函数:
注意:自Build Tools 21.0.3版本开始,由于标签被限制在23个字符或更少,这将不再起作用。
Log.<log level>("<your package name>", "message");
adb -d logcat <your package name>:<log level> *:S
-d
表示实际设备,-e
表示模拟器。如果有多个模拟器正在运行,可以使用-s emulator-<emulator number>
(例如,-s emulator-5558
)
示例:adb -d logcat com.example.example:I *: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。
logcat <your package name>:<log level>
命令可以将包名作为有效的筛选条件。为了更加易懂,建议将第一行改为"logcat <tag>:<log level>
,其中<tag>
可以是您在android.util.Log
中使用的包名标签。" - Flow自 Android 7.0 版本以后,logcat 工具提供了 --pid 过滤选项,并且 pidof 命令也可用,将 com.example.app 替换为您的包名即可。
adb logcat --pid=`adb shell pidof -s com.example.app`
或者adb logcat --pid=$(adb shell pidof -s com.example.app)
更多关于pidof命令的信息:
https://dev59.com/EmUo5IYBdhLWcg3w_DpK#15622698
grep
和 findstr
选项,但它们只能过滤出具有某个值的日志,排除了许多消息。你的答案是正确的,展示所有关于该应用程序的日志,而不排除来自其他库的日志消息。就像当前 Android Studio 的“仅显示已选择”的筛选器一样。谢谢! - equimanpidof
。 - vesperto添加过滤器
指定名称
选择您的过滤器。
对我来说,在Mac上这个方法是可行的:终端
进入你存放 adb
的文件夹,然后在终端中输入以下命令
./adb logcat MyTAG:V AndroidRuntime:E *:S
这里将过滤所有MyTAG
和AndroidRuntime
的日志。
Log.d("MyTAG", "我是英雄"); Log.d("AndroidRunTime", "我是零");
$ adb -s RKSCWSOV5SAIEUSC shell;
$ logcat MyTAG:V AndroidRuntime:E *:S
adb logcat -e "package-name"
已经过了几年,情况已经改变,Eclipse不再得到官方支持。因此这里提供两种更加实用的方法:
在
Android 监视器
工具箱中,您可以按可调试进程
筛选logcat。通常情况下,在开发应用程序时,它是一个可调试进程。偶尔会遇到问题,这时可以尝试以下步骤:
工具
-> Android
-> 启用ADB集成
.
如果已经启用,则切换关闭,然后再次打开
拔掉并重新插入您的手机设备。
还有通过正则表达式和调试级别进行筛选的选项。
如果您想使用基于终端的解决方案,这是一个很好的python封装。它的好处在于您可以保存多个配置并简单地重复使用它们。按标签
筛选相当可靠。您也可以按包名
进行过滤,只查看一个或多个应用程序的日志,但必须在启动应用程序之前启动logcat-color
。
看起来我不能评论以前的答案,所以我将发布一个新的。
这是对Tom Mulcahy的答案的评论,显示命令应如何更改才能在大多数设备上运行,因为adb shell ps
PID列是可变的。
注意:下面的命令适用于您连接了许多设备的情况。因此需要设备ID
。否则,您可以简单地省略方括号 '[', ']'
1. 要找出pid列,请键入:
adb [-s DEVICE_ID] shell ps | head -n 1
现在记住 PID 的列数。编号从 1
开始。
2. 然后输入以下内容:
adb [-s DEVICE_ID] logcat | grep $(adb [-s DEVICE_ID] shell ps \
| grep "com.example" | awk -F" " ' {print $PUT_COLUMN_HERE}')
只需将你记住的列放在PUT_COLUMN_HERE
,例如$5
每次重新运行应用程序时,你都需要重新运行第二条命令,因为应用程序从操作系统获得新的PID。
Ubuntu : adb logcat -b all -v color --pid=`adb shell pidof -s com.packagename` 带有颜色和应用程序的持续日志输出
pgrep
而不是 pidof
。 - Lennoard Silva这对我在 Git Bash 中运作良好:
$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid