Vin*_*nod 318 android android-logcat
我观察到当我使用带有ADT for Android的Logcat时,我也会从许多其他应用程序中获取消息.有没有办法过滤这个,只显示来自我自己的应用程序的消息.
Tom*_*ahy 346
使用ps/grep/cut来获取PID,然后使用该PID grep获取logcat条目.这是我使用的命令:
adb logcat | grep -F "`adb shell ps | grep com.asanayoga.asanarebel | tr -s [:space:] ' ' | cut -d' ' -f2`"
Run Code Online (Sandbox Code Playgroud)
(你可以进一步改进正则表达式,以避免包含相同数字的不相关日志行的理论问题,但它对我来说从来都不是问题)
这在匹配多个进程时也有效.
在Windows上,您可以:
adb logcat | findstr com.example.package
Run Code Online (Sandbox Code Playgroud)
sha*_*net 247
包名称保证是唯一的,因此您可以使用Log
带有标记的函数作为包名称,然后按包名称进行筛选:
注意:从Build Tools 21.0.3开始,这将不再有效,因为TAGS限制在23个字符以内.
Log.<log level>("<your package name>", "message");
adb -d logcat <your package name>:<log level> *:S
-d
表示实际设备并-e
表示仿真器.如果运行的仿真器超过1个,则可以使用-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.我上面发布的是从命令行使用logcat到adb.我不确定相同的过滤器是否会转移到Eclipse中.
ber*_*ium 52
添加过滤器
指定名称
选择你的过滤器.
You*_*Kim 42
从Android 7.0开始,logcat具有--pid过滤器选项,并且pidof命令可用,请将com.example.app替换为您的包名.
(ubuntu终端/自Android 7.0以来)
adb logcat --pid=`adb shell pidof -s com.example.app`
Run Code Online (Sandbox Code Playgroud)
要么
adb logcat --pid=$(adb shell pidof -s com.example.app)
Run Code Online (Sandbox Code Playgroud)
有关pidof命令的更多信息:https://stackoverflow.com/a/15622698/7651532
dig*_*ark 18
adb logcat -e "package-name"
Run Code Online (Sandbox Code Playgroud)
当仅过滤一个应用程序的行时,此功能非常有效。
Ind*_*ore 17
对我来说,这适用于mac Terminal
到你所在的文件夹,adb
然后在终端输入以下命令
./adb logcat MyTAG:V AndroidRuntime:E *:S
Run Code Online (Sandbox Code Playgroud)
这将过滤的所有日志MyTAG
和AndroidRuntime
Pas*_*lis 13
已经有几年了,情况发生了变化.并且不再正式支持Eclipse.所以这里有两个最新的方法:
在
Android monitor
工具箱中,您可以过滤logcat per debuggable process
.通常,在开发应用程序时,它是一个可调试的过程.每隔一段时间我就会遇到这个问题,并做以下事情:
Tools
- > Android
- > Enable ADB Integration
.
如果已经启用,则将其关闭,然后重新打开
拔下并重新插入您的移动设备.
还有通过正则表达式和调试级别进行过滤的选项
adb logcat
如果你想使用基于终端的解决方案,这是一个很好的python包装器.它的好处是您可以保存多个配置并简单地重复使用它们.过滤tags
是非常可靠的.您也可以过滤package
以查看仅一个或多个应用的日志,但是logcat-color
在启动应用之前就开始了.
我似乎无法评论以前的答案,所以我会发布一个新答案.这是对Tom Mulcahy的回答的评论,它显示了命令应该如何改变以便在大多数设备上工作,因为adb shell ps
PID列是可变的.
注意:以下命令适用于已连接许多设备的情况.所以device id
需要.否则,你可以简单地省略括号'[',']'
1.要查找pid列,请键入:
adb [-s DEVICE_ID] shell ps | head -n 1
Run Code Online (Sandbox Code Playgroud)
现在记住PID的列号.编号从1
.开始.
2.然后键入以下内容:
adb [-s DEVICE_ID] logcat | grep $(adb [-s DEVICE_ID] shell ps \
| grep "com.example" | awk -F" " ' {print $PUT_COLUMN_HERE}')
Run Code Online (Sandbox Code Playgroud)
只需将您记忆中的列放入PUT_COLUMN_HERE
,例如$5
每次重新运行应用程序时,都必须重新运行第二个命令,因为应用程序从操作系统获取新的PID.
wub*_*ubb 10
这在git bash中一直在为我工作:
$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
Run Code Online (Sandbox Code Playgroud)
把它放到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
我写了一个用于按包名过滤logcat的shell脚本,我认为它比使用更可靠
ps | grep com.example.package | cut -c10-15
Run Code Online (Sandbox Code Playgroud)
它使用/ proc/$ pid/cmdline找出实际的pid,然后在logcat上执行grep
https://gist.github.com/kevinxucs/7340e1b1dd2239a2b04a
使用-s
!
您应该使用自己的标签,请参阅: http://developer.android.com/reference/android/util/Log.html
喜欢。
Run Code Online (Sandbox Code Playgroud)Log.d("AlexeysActivity","what you want to log");
然后当你想阅读日志时使用>
Run Code Online (Sandbox Code Playgroud)adb logcat -s AlexeysActivity
这会过滤掉所有不使用相同标签的内容。
这适用于USB调试:
连接设备并使用:
adb shell
简单使用logcat:
logcat | grep com.youapp.packagename
ADT v15 for Eclipse允许您指定应用程序名称(实际上是androidmanifest.xml中的包值).
我喜欢能够通过应用程序进行过滤,但新的logcat有自动滚动的错误.当您向上滚动一点以查看以前的日志时,它会在几秒钟内自动滚动回到底部.它似乎向上滚动日志的1/2向上确保它不会跳回到底部,但这通常是无用的.
编辑:我尝试从命令行指定一个应用程序过滤器 - 但没有运气.如果有人想出来或如何停止自动滚动,请告诉我.
为了访问 logcats,您首先需要安装 ADB 命令行工具。ADB命令行工具是android studio平台工具的一部分,可以从这里下载。之后,您需要设置adb 工具的路径/环境变量。现在,如果您使用的是 macbook,您可以从 eclipse 终端/intellij 终端或 mac 终端访问 logcat。
adb logcat
:获取整个logcat。
adb shell pidof 'com.example.debug'
:获取您的应用程序的进程ID。
adb logcat pid=<pid>
:获取特定于您的应用程序的 logcat。
adb logcat pid=<pid>|grep 'sometext'
:根据某些文本过滤logcat。
有关过滤 logcat 的更多信息,请阅读此内容。
对于可调试的应用程序,我建议
adb shell run-as my.package.name logcat
Run Code Online (Sandbox Code Playgroud)
run-as 不适用于不可调试的应用程序,因此对于那些我使用该--uid
标志的应用程序。不幸的是没有 a uidof
,所以我需要从 中提取它pm
。这是一个小的 sh 脚本来执行此操作:
function logcat {
pkg="$1"
shift
if [ -z "$pkg" ]; then
>&2 echo 'Usage: logcat pkg ...'
return 1
fi
uid="$(adb shell pm list package -U $pkg | sed 's/.*uid://')"
if [ -z "$uid" ]; then
>&2 echo "pkg '$pkg' not found"
return 1
fi
adb logcat --uid="$uid" "$@"
}
Run Code Online (Sandbox Code Playgroud)
用法是logcat my.package.name
. 它像普通的 logcat 一样接受额外的参数。
我更喜欢基于此的--pidof
解决方案(请参阅/sf/answers/3360286051/),因为这需要您在每次重新启动进程时重新运行命令。
归档时间: |
|
查看次数: |
303713 次 |
最近记录: |