Android的Logcat命令詳解
——翻譯Enabling logcat Logging
田海立@CSDN
2011/07/28
Android LOG系統提供了收集和查看系統調試輸出的功能。各種應用程式和系統其他部分輸出的LOG都儲存在一些迴圈緩衝區裡,這些緩衝區可以通過 logcat 命令來查看和過濾使用。
使用logcat命令
你可以用 logcat 命令來查看和控制系統LOG Buffer裡內容,通常用法:
[adb] logcat [<option>] ... [<filter-spec>] ...
這節下面內容解釋過濾以及命令的選項。關於選項的全面總結可參看:logcat命令選項列表
你可以在你的電腦,也可以通過運行在模擬器/裝置上的遠程adb shell端來使用logcat命令。在你的電腦上查看LOG輸出:
$ adb logcat
通過遠端 adb shell,可以這樣:
# logcat
過濾Log輸出
Android LOG資訊都有一個標籤(tag)和它的優先順序(priority)。
· LOG的標籤是一個簡短的描述來指示發生在哪一個系統組件內,在寫LOG時指定。(比如:“View”就是查看VIEW系統的標籤).
· 優先順序有下列幾種,按照優先順序從低到高順序排列為:
o V — Verbose (最低優先順序)
o D — Debug
o I — Info
o W — Warning
o E — Error
o F — Fatal
o S — Silent (最高優先順序,沒有任何輸出)
在運行logcat 的時候在前兩列的資訊中你就可以看到 logcat 的標籤列表和優先順序別,它是這樣標出的<priority>/<tag>.
下面是一個logcat輸出的例子,它的優先順序就是“I”,標籤是“ActivityManage”:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
為了讓LOG輸出達到可管理的層級,你還可以用過濾器來限制LOG輸出,過濾器可以協助只是顯示你感興趣的tag-priority組合的資訊,而隱藏其他資訊。
A過濾器語句按照tag:priority ...格式描述。這裡,tag 表示是感興趣的標籤,priority 是表示報告指定標籤的最低等級。 包含上面tag的資訊或者指定優先順序之上的資訊被寫入LOG。你可以在一個過濾運算式中提供多個tag:priority 聲明,這些聲明之間用空白符間隔。
下面有一個過濾運算式的例子,例子表示不顯示其他所有的LOG資訊,除了那些標籤為“ActivityManager”且優先順序為“Info”以上的和標籤為“ MyApp”且優先順序為“ Debug”以上的資訊。
adb logcat ActivityManager:I MyApp:D *:S
上面運算式的最後的元素 *:S,,是設定所有標籤的優先順序為“silent”,這樣保證只有“View”和“MyApp”的LOG才會顯示。用 *:S 的是確保日誌輸出被限制在你明確指定的過濾運算式的極好方法——它使的你的過濾器在LOG輸出時就像一個“白名單”。
下面過濾語句顯示優先順序為warning或更高的LOG日誌資訊:
adb logcat *:W
如果你在電腦上運行logcat (相比遠程運行adb shell),你還可以通過為環境變數ANDROID_LOG_TAGS指定一個參數來設定預設的過濾器:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
需要注意,如果你從遠端運行logcat 或者使用adb shell logcat,ANDROID_LOG_TAGS 過濾器並不能應用在模擬器/裝置執行個體上 。
控制LOG輸出格式
Log日誌資訊除了包括標籤和優先順序外,還有許多其他中繼資料域。可以修改日誌的輸出格式,來顯示出特定的中繼資料域。可以通過-v 選項來指定下列所支援的格式化輸出。
· brief — 顯示priority/tag和列印LOG進程的PID((預設格式)。
· process — 僅僅顯示PID。.
· tag — 僅僅顯示priority/tag。
· thread — 顯示進程:線程和priority/tag.
· raw — 顯示原始LOG資訊,不顯示其他中繼資料域。
· time — 顯示日期,發生時間,priority/tag和列印LOG進程的PID。
· long — 顯示所有的中繼資料域和LOG資訊,他們之間用空白行隔開。
當啟動了logcat,你可以通過-v選項來指定輸出格式:
[adb] logcat [-v <format>]
下面是用 thread 輸出格式來產生的LOG的例子:
adb logcat -v thread
要注意的是你只能用-v 選項來指定一個輸出格式。
查看指定的LOG Buffer
Android日誌系統有多個迴圈緩衝區,並不是所有的LOG資訊都把LOG輸出到預設迴圈緩衝區。為了看到其他緩衝區的LOG資訊,你需要通過-b 選項來啟動logcat 。來看其他迴圈緩衝區。這些緩衝區有:
· radio — 查看與無線/電話相關的緩衝區裡的資訊。
· events — 查看和事件相關的的緩衝區。
· main — 查看main緩衝區裡的LOG (預設)
-b 選項使用方法:
[adb] logcat [-b <buffer>]
下面的例子示範怎麼查看包含radio 和 telephony資訊的LOG緩衝區:
adb logcat -b radio
查看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 中。
Logcat命令選項列表
選項 |
描述 |
-b <buffer> |
載入一個指定的LOG Buffer供查看,比如event 或radio。 預設值是main 。具體參考查看指定的Log Buffers. |
-c |
清除整個 log並退出。 |
-d |
輸出LOG到螢幕上並退出。 |
-f <filename> |
寫LOG資訊到 <filename>。預設是stdout. |
-g |
列印指定LOG Buffer的大小並退出。 |
-n <count> |
設定日誌的最大數目<count>,預設值是4,需要和選項-r一起使用。 |
-r <kbytes> |
Rotates每輸出<kbytes> 寫LOG檔案,預設值為16,需要和選項-f一起使用。 |
-s |
設定預設的過濾層級為silent。 |
-v <format> |
Sets 設定LOG的輸出格式,預設的是brief 格式,要知道更多的支援的格式,參看控制LOG輸出格式. |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
附,大家看兩張在WORD裡編輯的效果:
一、開頭
二、結尾