android log 抓取

android Log 等级说明

logcat 的输出日志格式:priority/tag
I/CacheService( 665): Preparing DiskCache for all thumbnails.

V — Verbose (lowest priority)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (highest priority, on which nothing is ever printed)无log打印

tag:priority 过滤log

过滤器格式描述:tag:priority, tag 表示是标签,priority是表示标签log的最低等级,可以在过滤器中多次写tag:priority。
logcat tag:priority
adb logcat ActivityManager:I MyApp:D *:S 或者 adb logcat -s ActivityManager:I MyApp:D
上面表达式的最后的元素 :S ,,是设置所有的标签为”silent”,所有日志只显示有”ActivityManager”和“MyApp”的,用 :S 的另一个用处是能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器也作为一项输出写到日志中
adb logcat -s XXX这个是设置过滤用的 比如你只想查看FirstDemo的日志 就替换最后的XXX(tag:priority)
root@Pixi3-4:/dev/log # export ANDROID_LOG_TAGS=”AccessibilitySettings:D *:S”
root@Pixi3-4:/dev/log # echo $ANDROID_LOG_TAGS
AccessibilitySettings:D *:S
root@Pixi3-4:/dev/log # logcat
在adb shell 命令下导入ANDROID_LOG_TAGS后,logcat 就显示ANDROID_LOG_TAGS设定的内容

adb logcat -d 获取指定操作log

adb logcat -d 这个命令是在时间上倒过来用的 就是你先操作然后敲这个命令 打出来的log就是你刚操作那段时间的log 而且自动退出log模式
如1:adb logcat -c清除日志 2:操作 3:adb logcat -d -s ActivityManager:I MyApp:D 这样就会显示刚才的操作的log

使用grep 过滤log

只显示需要的输出:
adb logcat | grep aaa //匹配一行中aaa字串
adb logcat | grep -i aaa //匹配一行中aaa字串,忽略大小写
adb logcat | grep –color=auto -i aaa //设置匹配字串颜色

adb logcat | grep “^..MyApp” //由于logcat 格式为:第一个字母标示日志优先级,第二为/,第三个开始为tag;tag为Myapp的日志。
adb logcat | grep “^E.MyApp” //只显示tag为Myapp优先级为E的日志。
adb logcat | grep “^..MyApp|^..MyActivity”
adb logcat | grep -E “^..MyApp|^..MyActivity” #使用 egrep 无须转义符
过滤不需要的输出:
还是使用 grep,用法也跟上面的一样,加一个 -v 即可。例如要过滤 tag 为 MyApp 和 MyActivity 的输出:

adb logcat | grep -v “^..MyApp|^..MyActivity”
adb logcat | grep -vE “^..MyApp|^..MyActivity” #使用 egrep 无须转义符
从当前开始显示:

抓log前清空log缓存

logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。
adb logcat -c && adb logcat
过滤 log 文件:
有时需要分析 log 文件,过滤 log 文件还是使用 grep。例如 log 文件为 myapp.log,要匹配 tag 为 MyApp 和 MyActivity 的输出,然后输出到 newmyapp.log:
cat myapp.log | grep “^..MyApp|^..MyActivity” > newmyapp.log

adb logcat -v 控制日志输出格式

日志信息包括了许多元数据域包括标签和优先级。可以修改日志的输出格式,所以可以显示出特定的元数据域。可以通过 -v 选项得到格式化输出日志的相关信息.
brief — Display priority/tag and PID of originating process (the default format).
process — Display PID only.
tag — Display the priority/tag only.
thread — Display process:thread and priority/tag only.
raw — Display the raw log message, with no other metadata fields.
time — Display the date, invocation time, priority/tag, and PID of the originating process.
long — Display all metadata fields and separate messages with a blank lines.
当启动了logcat ,你可以通过-v 选项来指定输出格式:
[adb] logcat [-v ]
下面是用 thread 来产生的日志格式:
adb logcat -v thread
adb logcat -c && adb logcat -v time |grep AccessibilitySettings
需要注意的是你只能-v 选项来规定输出格式 option.

查看可用日志缓冲区:
Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期:
radio — 查看缓冲区的相关的信息.
events — 查看和事件相关的的缓冲区.
main — 查看主要的日志缓冲区
-b 选项使用方法:
[adb] logcat [-b ]
下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息。
adb logcat -b radio

$adb shell
$cd /dev/log # ls
events
ksystem
main
radio
system

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

logcat main,logcat radio

实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志

状态信息的有:adb shell dmesg,adb shell dumpstate,adb shell dumpsys,adb bugreport

讲解一下各自作用:
通过DDMS抓的其实跟用dos批处理抓的一样都是logcat的日志文件,ddms抓的通常是main缓存中的,就是应用程序打印的日志文件。不过ddms好处在于能够实时看到带有颜色的,如果是用dos批处理只能重定向到文件,到抓完之后才能够看到,不是实时的。
adb logcat -b main -v time>app.log 打印应用程序的log
adb logcat -b radio -v time> radio.log 打印射频相关的log,SIM STK也会在里面,modem相关的ATcommand等,当然跟QXDM差的很远了。

adb logcat -b events -v time 打印系统事件的日志,比如触屏事件。。。

tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这个来抓,adb shell tcpdump -s 10000 -w /sdcard/capture.pcap,比如抓mms下载的时候的UA profile,browser上网的时候,使用proxy的APN下载,streaming的相关内容包括UA profile等。
最后是高通平台的QXDM,不管是不是Android,只要使用高通芯片,都会对它很熟悉,当然了,不是高通的芯片就不用提它了。这个不多讲,内容丰富,射频,电话,上网,…凡是高通提供的解决方案,这个都可以抓。
状态信息:其实一个就够了,那就是bugreport(命令adb bugreport>bugreport.log)。里面包含有dmesg,dumpstate和dumpsys。dmesg(命令adb shell dmesg > ldmesg_kernel.log)是kernel的log,凡是跟kernel相关的,比如driver出了问题(相机,蓝牙,usb,启动,等等吧)。 dumpstate是系统状态信息,里面比较全,包括手机当前的内存信息、cpu信息、logcat缓存,kernel缓存等等。adb shell dumpsys这个是关于系统service的内容都在这个里面,这个命令还有更详尽的用法,比如adb shell dumpsys meminfo system是查看system这个process的内存信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值