一、logcat命令介绍
1.android log系统
2.logcat介绍
logcat是android中的一个命令行工具,可以用于得到程序的log信息。
Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来查看和使用.
LogCat可以实时的捕捉系统中的log信息,这样在测试过程中,有助于帮助我们收集信息,当出现问题的时候,能够更加快速、准确的定位。
logcat命令格式:
语法格式:
[adb] logcat [<option>] … [<filter – spec>] …
PC端使用:
adb logcat
shell模式下使用:
logcat
二、logcat命令参数
1.参数说明
参数 | 描述 |
-b <buffer> | 加载一个可使用的日志缓冲区供查看,比如event和radio。默认值是main |
-c | 清除缓冲区中的全部日志并退出(清除完后可以使用-g查看缓冲区) |
-d | 将缓冲区的log转存到屏幕中然后退出 |
-f <filename> | 将log输出到指定的文件中<文件名>.默认为标准输出(stdout) |
-g | 打印日志缓冲区的大小并退出 |
-n <count> | 设置日志的最大数目<count>,默认值是4,需要和-r选项一起使用 |
-r <kbytes> | 每<kbytes>时输出日志,默认值是16,需要和-f选项一起使用 |
-s | 设置过滤器 |
-v <format> | 设置输出格式的日志消息。默认是短暂的格式。支持的格式列表 |
-t <count> | 将缓冲区的log输出指定的行数到屏幕中然后退出 |
-B | 以二进制形式输出日志 |
2、参数详解
1)-v
日志消息包含一个元数据字段,除了标签和优先级,您可以修改输出显示一个特定的元数据字段格式的消息。为此,您使用-v选项来指定一个支持的输出格式。一下为支持的格式:
格式 | 说明 |
brief | 显示优先级/标记和过程的PID发出的消息(默认格式) |
process | 只显示PID |
tag | 只显示优先级/标记 |
raw | 显示原始的日志消息,没有其他元数据字段 |
time | 调用显示日期、时间、优先级/标签和过程的PID发出消息 |
threadtime | 调用显示日期、时间、优先级、标签以及PID TID线程发出的消息 |
long | 显示所有元数据字段与空白行和单独的消息 |
当logcat开始,指定想要输出格式-v选项:
[adb] logcat [-v <format>]
举例:adb logcat –v thread
只能指定一个输出格式-v
2)-b
举例:adb logcat –b main
adb logcat -b system -b main -b events -b radio -s robin:i
缓冲区介绍:
android log输出量巨大,特别是通信系统的log,因此,android把log输出到不同的缓冲区中,目前定义了四个log缓冲区:
1)Radio:输出通信系统的log
2)System:输出系统组件的log
3)Event:输出event模块的log
4)Main:所有java层的log,遗迹不属于上面3层的log
缓冲区主要给系统组件使用,一般的应用不需要关心,应用的log都输出到main缓冲区中
默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log
3)-s
举例:adb logcat -s ActivityManager \\只显示“ActivityManager”标签的日志
4)-f
举例:adb logcat -f /data/local/tmp/log.txt & \\这里的“&”符号表示后台执行,即执行后断开pc和手机,可持续手机log
该选项指定输出日志信息的<filename> ,默认是stdout . 即文件是指android系统上的文件,非PC端文件;
5)“>”输出
">" 后面跟着要输出的日志文件, 可以将 logcat 日志输出到文件中;, 使用more log 命令查看日志信息;
举例:adb logcat>D:\android-sdk\log\log.txt \\其中 D:\android-sdk\log\log.txt 为pc端log日志地址
6)优先级
优先级使用字符标识,以下优先级从低到高;
如果过滤v,则所有的日志都会显示,如果过滤E,则只会显示E及E以上级别的日志;
V –Verbose(最低优先级)
D – Debug
I – Info
W – Warning
E – Error
F – Fatal
S – Silent (highest priority, on which nothing is ever printed)
3、实例
实例1:adb logcat ActivityManager:I My App:D *:S
//过滤TAG为ActivityManager输出级别大于等于I的日志与TAG为MyApp输出级别大于D的日志
上面表达式的最后的元素 *:S
,,是设置所有的标 签为”silent”,所有日志只显示有”View” and “MyApp”的,用 *:S
的另一个用处是 能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器也作为一项输出到日志中.
实例2:adb logcat *:W //显示优先级为warning或更高的日志信息
实例3:adb shell "logcat | grep com.rexen.zxapplication" >D:\android-sdk\log\log.txt
//只输出程序包名为“com.rexen.zxapplication”的日志
实例4:
adb logcat -d //将缓冲区的log打印到屏幕并退出
adb logcat -c //清除缓冲区log(testCase运行前可以先清除一下)
adb logcat -g //打印缓冲区大小并退出
adb logcat -f /data/local/tmp/log.txt -n 10 -r 1 //输出log
一般长时间输出log的话建议-f,-n,-r三个参数连用,这样当一个文件日志输出满了之后可以马上在另一个中进行输出。(未试验成功)
四、其他(目前还不理解)
如果你电脑上运行logcat
,相比在远程adbshell端,你还可以 为环境变量ANDROID_LOG_TAGS
:输入一个参数来设置默认的过滤
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D*:S"
需要注意的是ANDROID_LOG_TAGS
过滤器如果 通过远程shell运行logcat
或 用adb shell logcat
来 运行模拟器/设备不能输出日志.
查看 stdout 和stderr
在默认状态下,Android系统有stdout
和 stderr
(System.out
和System.err
) 输出到/dev/null
, 在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout
和stderr
和 优先级 I.来记录日志信息
通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用setprop
命 令远程输入日志
$ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start
系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加/data/local.prop
可 以使用模拟器/设备上的默认设置
未完待续:管道grep比较重要,还未研究。。。