Logcat命令介紹
Android Log系統(tǒng)
graph LR
subgraph Java
APP[應(yīng)用] --> LJ[android.util.log.java]
end
subgraph C++
LJ --> LC[android_util_log.cpp]
SC[系統(tǒng)組件] --> LC
LC --> LL[liblog]
LL --> FLD[fakelogDevie]
end
subgraph 內(nèi)核
LL --> LD[Log驅(qū)動(dòng)]
end
Logcat介紹
logcat是android中的一個(gè)命令行工具,可以用于得到程序的log信息。log類是一個(gè)日志類,可以在代碼中使用logcat打印出消息。常見的日志紀(jì)錄方法包括:
| 方法 | 描述 |
|---|---|
| v(String,String) (vervbose) | 顯示全部信息 |
| d(String,String)(debug) | 顯示調(diào)試信息 |
| i(String,String)(information) | 顯示一般信息 |
| w(String,String)(waning) | 顯示警告信息 |
| e(String,String)(error) | 顯示錯(cuò)誤信息 |
例如:開發(fā)過程中獲取log
Log.i("MyActivity","MyClass.getView() - get item number"+position);
adb獲取log
$ adb logcat #adb logcat輸出的日志格式如下
I/ActivityManager( 1754): Waited long enough for: ServiceRecord{2b24178c u0 com.google.android.gms/.checkin.CheckinService}
Logcat命令格式
語法格式:
[adb] logcat [<option>] … [<filter – spec>] …
PC端使用:
$ adb logcat
Shell模式下使用:
$ logcat
logcat緩沖區(qū)
緩沖區(qū)介紹
android log輸出量巨大,特別是通信系統(tǒng)的log,因此,android把log輸出到不同的緩沖區(qū)中,目前定義了四個(gè)log緩沖區(qū):
- Radio:輸出通信系統(tǒng)的log
- System:輸出系統(tǒng)組件的log
- Event:輸出event模塊的log
- Main:所有java層的log,遺跡不屬于上面3層的log
緩沖區(qū)主要給系統(tǒng)組件使用,一般的應(yīng)用不需要關(guān)心,應(yīng)用的log都輸出到main緩沖區(qū)中。默認(rèn)log輸出(不指定緩沖區(qū)的情況下)是輸出System和Main緩沖區(qū)的log
緩沖區(qū)模型

安卓_Logcat使用_內(nèi)容1.png
獲取緩沖區(qū)命令
| 參數(shù) | 描述 |
|---|---|
| -b<buffer> | 加載一個(gè)可使用的日志緩沖區(qū)提供查看,默認(rèn)值是main |
實(shí)例
$ adb logcat –b radio
$ adb logcat –b system
$ adb logcat –b events
$ adb logcat –b main
logcat命令參數(shù)
參數(shù)說明
| 參數(shù) | 描述 |
|---|---|
| -b <buffer> | 加載一個(gè)可使用的日志緩沖區(qū)供查看,比如event和radio。默認(rèn)值是main |
| -c | 清除緩沖區(qū)中的全部日志并退出(清除完后可以使用-g查看緩沖區(qū)) |
| -d | 將緩沖區(qū)的log轉(zhuǎn)存到屏幕中然后退出 |
| -f <filename> | 將log輸出到指定的文件中<文件名>.默認(rèn)為標(biāo)準(zhǔn)輸出(stdout) |
| -g | 打印日志緩沖區(qū)的大小并退出 |
| -n <count> | 設(shè)置日志的最大數(shù)目<count>,默認(rèn)值是4,需要和-r選項(xiàng)一起使用 |
| -r <kbytes> | 沒<kbytes>時(shí)輸出日志,默認(rèn)值是16,需要和-f選項(xiàng)一起使用 |
| -s | 設(shè)置過濾器 |
| -v <format> | 設(shè)置輸出格式的日志消息。默認(rèn)是短暫的格式。支持的格式列表 |
一般長(zhǎng)時(shí)間輸出log的話建議-f,-n,-r三個(gè)參數(shù)連用,這樣當(dāng)一個(gè)文件日志輸出滿了之后可以馬上在另一個(gè)中進(jìn)行輸出
實(shí)例
#將緩沖區(qū)的log打印到屏幕并退出
$ adb logcat -d
#清除緩沖區(qū)log(testCase運(yùn)行前可以先清除一下)
$ adb logcat -c
#打印緩沖區(qū)大小并退出
$ adb logcat -g
#輸出log
$ adb logcat -f /data/local/tmp/log.txt -n 10 -r 1
logcat格式化輸出
參數(shù)說明
日志消息包含一個(gè)元數(shù)據(jù)字段,除了標(biāo)簽和優(yōu)先級(jí),您可以修改輸出顯示一個(gè)特定的元數(shù)據(jù)字段格式的消息。為此,您使用-v選項(xiàng)來指定一個(gè)支持的輸出格式。一下為支持的格式:
| 格式 | 說明 |
|---|---|
| brief | 顯示優(yōu)先級(jí)/標(biāo)記和過程的PID發(fā)出的消息(默認(rèn)格式) |
| process | 只顯示PID |
| tag | 只顯示優(yōu)先級(jí)/標(biāo)記 |
| raw | 顯示原始的日志消息,沒有其他元數(shù)據(jù)字段 |
| time | 調(diào)用顯示日期、時(shí)間、優(yōu)先級(jí)/標(biāo)簽和過程的PID發(fā)出消息 |
| threadtime | 調(diào)用顯示日期、時(shí)間、優(yōu)先級(jí)、標(biāo)簽遺跡PID TID線程發(fā)出的消息 |
| long | 顯示所有元數(shù)據(jù)字段與空白行和單獨(dú)的消息 |
當(dāng)logcat開始,指定想要輸出格式-v選項(xiàng):
[adb] logcat [-v <format>]
實(shí)例
$ adb logcat –v thread
只能指定一個(gè)輸出格式-v
例子

安卓_Logcat使用_內(nèi)容2.png
logcat優(yōu)先級(jí)
優(yōu)先級(jí)使用字符標(biāo)識(shí),一下優(yōu)先級(jí)從低到高
V –Verbose(最低優(yōu)先級(jí))
D – Debug
I – Info
W – Warning
E – Error
F – Fatal
S – Silent
為了減少不想要日志的輸出,可以建立一個(gè)過濾器。過濾語法:tag: priority
#過濾TAG為ActivityManager輸出級(jí)別大于I的日志與TAG為MyApp輸出級(jí)別大于D的日志
$ adb logcat ActivityManager:I My App:D *:S
#設(shè)置過濾級(jí)別為W以上
$ adb logcat *:W
#如果用的比較多可以設(shè)置環(huán)境變量
$ export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D*:S"