Logcat使用

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ū):

  1. Radio:輸出通信系統(tǒng)的log
  2. System:輸出系統(tǒng)組件的log
  3. Event:輸出event模塊的log
  4. 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"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容