adb logcat 命令

adb logcat 命令

adb 命令在移动端开发和测试中广泛使用 , 尤其在自动化测试脚本中很常见 .
adb logcat用于输出设备日志,分析错误原因 .
本章主要说明 adb logcat 命令 . 有四部分组成,分别是命令格式, 常用命令 , shell脚本输出指定app日志 ,android系统log缓冲区.


一.命令格式
adb logcat [选项] [过滤项], 其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的;
选项解析:
1."-s"选项 : 只显示指定标签的日志; ------>adb logcat -s SWVDEC 显示SWVDEC标签的日志
adb logcat 命令
2."-v"选项 : 设置日志的输出格式;----->adb logcat -v threadtime 查看日志输出时间和线程信息
3."-c"选项 : 清空所有的日志缓存信息;---->adb logcat -c
4."-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;------->adb logcat -d
5."-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;------>adb logcat -t 5 输出日志缓冲区的最近5行
6."-g"选项 : 查看日志缓冲区信息; ------>adb logcat -g
7."-B"选项 : 以二进制形式输出日志; ----> adb logcat -B


二.常用命令
1.过滤指定等级日志 比如: 显示Error以上级别的日志: adb logcat *:E 常用的还有D (debug以上级别), I (Info以上级别)
2.log输出到计算机文件 adb logcat > /home/cherish/log.txt ( 相对路径.绝对路径都可以.)
3.使用管道过滤日志
过滤指定标签"android"或者"system"标签的log,并输出到文件:
adb logcat | grep -E “android|system” > /home/cherish/log.txt
如下图:
adb logcat 命令
4.将日志保存到文件 , 但无法输出到屏幕 , 针对这个问题可以采用 tee命令 .
adb logcat | grep -E “android|system” | tee /home/cherish/log.txt
adb logcat 命令5.给指定标签文字加颜色
比如:adb logcat | grep --color=auto -i android
过滤带有标签"android"的log,并给"android"字样加上颜色 .
adb logcat 命令6.输出带有某个包名的日志
adb logcat | grep “需要过滤的包名”
adb logcat 命令注:在windows上不能使用grep关键字,可以用findstr代替grep.

7.adb logcat -help 如果具体命令没记住 , 使用它查看简单的命令格式.


三.shell脚本输出指定app日志
思路: 先通过包名找到该进程的pid, 使用pid进行过滤该应用日志. 代码如下:

#!/bin/bash
packageName=$1

systemVersion="$(adb shell getprop ro.build.version.release)"
echo "systemVersion=$systemVersion"
version=`echo $systemVersion | awk -F '.' '{print $1}'`

ver=`expr $version + 0`  
#android8.0及以上系统获取正在运行的进程pid需要加上-A:  adb shell ps -A
if [ $ver -ge 8 ]; then
   pid="$(adb shell ps -A | grep $packageName | awk '{print $2}')" 
else
   pid="$(adb shell ps | grep $packageName | awk '{print $2}')"
fi

echo "pid=$pid"

echo "-----------------------------"
adb logcat | grep --color=auto $pid

执行脚本命令 ./log.sh 包名
比如 ./log.sh com.android.systemui


四.知识扩展
1.android log系统组成
adb logcat 命令
2.logcat缓冲区
android系统把log输出到不同的缓冲区中,目前定义了四个log缓冲区 .

  • radio:输出通信系统(无线/电话相关)的log
  • system:输出系统组件的log
  • events:输出事件相关模块的log
  • main:所有java层的log, 也是主缓冲区 (默认缓冲区)
    缓冲区主要给系统组件使用,上层应用不需要关心,应用的log都输出到main缓冲区中
    默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log

3.缓冲区模型
adb logcat 命令

上一篇:如何抓取崩溃的log日志?


下一篇:adb 常用命令