工作平台:MacOS
系统版本:10.14.5
adb版本:1.0.41
1.直接使用adb logcat
adb logcat
adb工具需要安装,Android sdk工具自带adb工具,在sdk/platform-tools/adb目录;可以将之配置到环境变量方便终端工具直接使用
查看日志前建议先清空日志缓存:
adb logcat -c
关联:
2、过滤输出日志
- 过滤指定级别日志:
adb logcat *:W
其中W是表示不显示警告等级以下的日志。
日志等级顺序是从低到高:
V — 明细 verbose(最低优先级)
D — 调试 debug
I — 信息 info
W — 警告 warn
E — 错误 error
F — 严重错误 fatal
S — 无输出 silent
- 按照tag过滤
adb logcat tag:* *:S
tag为希望过滤出的标签,*:S
必须加上 ,用于设置所有标记的日志优先级为S,确保只输出过滤的tag项。
同理,如果要输出指定tag的同时,还想输出error以上等级的日志,可以将*:S
改为*:E
效果如下
$ adb logcat HttpUtils2:* *:S
--------- beginning of system
--------- beginning of main
09-20 14:20:02.177 7979 19583 I HttpUtils2: sendPostRequest-onFinish-thread=Thread-1714
09-20 14:20:02.346 7979 19583 I HttpUtils2: sendPostRequest-onFinish-thread=Thread-1718
09-20 14:20:02.359 7979 19583 I HttpUtils2: sendPostRequest-onFinish-thread=Thread-1719
09-20 14:31:56.539 7979 19583 I HttpUtils2: sendPostRequest-onFinish-thread=Thread-1732
3、通过包名过滤日志
1)查看Android进程pid,格式如下:
adb shell "ps | grep 包名"
$ adb shell "ps | grep com.paic.paphonesdk"
u0_a907 29711 315 854736 90964 sys_epoll_ 00000000 S com.paic.paphonesdk
其中第二项"29711"就是对应pid
另外需要注意的是,该命令会将所有包名中含有"com.paic.paphonesdk"字符的进程均检测出来,如下:
$ adb shell "ps | grep com.paic.paphonesdk"
u0_a906 7979 315 789524 46620 sys_epoll_ 00000000 S com.paic.paphonesdk
u0_a907 29711 315 822144 78708 sys_epoll_ 00000000 S com.paic.paphonesdk.cxjt
2)通过pid查看logcat日志,格式如下:
adb logcat | grep pid
同样可以加上过滤条件
adb logcat *:V | grep pid
$ adb logcat *:V | grep 7979
09-20 12:30:23.919 1569 4007 I ActivityManager: Start proc 7979:com.paic.paphonesdk/u0a906 for activity com.paic.paphonesdk/.WelcomeActivity
09-20 12:30:24.001 7979 7979 W ReflectionUtils:
……
也可以直接将日志输出到文件
adb logcat *:V | grep pid > 输出文件路径
windows环境下不支持grep命令,换成find,并将pid用双引号包裹即可
adb logcat | find “pid“
3)Mac下可以将上述步骤封装进shell脚本,Win可以封装为bat脚本,形成自动化
以下是Mac下的shell脚本,只进行了简单研究,不追求优雅严谨,足够使用。win下bat脚本小伙伴们可以自行研究。
#!/bin/bash
#运行前给权限chmod +x ./androidlogcat.sh #使脚本具有执行权限
#./androidlogcat.sh #执行脚本
#crtl+c退出脚本
s_ps=`adb shell "ps |grep com.paic.paphonesdk"`
echo $s_ps
#获取com.paic.paphonesdk的pid
if [[ $s_ps =~ "com.paic.paphonesdk" ]]
then
echo "existing process"
array_s=($s_ps)
echo "数组元素为: ${array_s[*]}"
echo "数组长度为: ${#array_s[*]}"
if [ ${#array_s[*]} = 0 ]
then
echo "长度为0"
else
echo "长度不为0"
s_pid=${array_s[1]}
echo $s_pid
fi
else
echo "none"
fi
echo "paphonesdk pid:$s_pid"
#清空日志缓存
adb logcat -c
#输出日志保存到文件
s_file="and_`date "+%Y%m%d%H%M%S"`.txt"
echo "日志文件名:$s_file"
adb logcat *:V | grep $s_pid >./$s_file
参考: