標籤:android android開發 經驗分享 軟體開發 sdk
1.6 Log列印—Log輸出工具(logcat)
1.6.1
啟動logcat
不僅僅是Android開發,對於所有的軟體開發來說,Log的地位都是非常重要的,它是一位我們在開發和調試過程當中不可避免都會接觸到的朋友,因此,怎麼和這位朋友搞好關係,是我們必須要掌握好的。
在Android當中,Android日誌系統提供了記錄和查看系統調試資訊的功能。日誌都是從各種軟體和一些系統的緩衝區中記錄下來的,緩衝區可以通過 logcat 命令來查看和使用。
我們可以使用adb logcat命令來運行logcat:
圖1-32 運行logcat
1.6.2
過濾日誌輸出
在開發和調試中,我們經常需要列印Log出來進行查看。但是有時候在大量的日誌中尋找我們需要的資訊是一件很頭疼的事情,這裡就需要我們在日誌的海洋中過濾出我們需要的資訊。
每一個輸出的Android日誌資訊都有一個標籤和它的優先順序。
日誌的標籤是系統組件原始資訊的一個簡要的標誌。(比如:“View”就是查看系統的標籤)。
按照從低到高順序來排列,優先順序有以下幾種:
V — Verbose (lowest priority)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (highest priority, on whichnothing is ever printed)
在運行logcat的時候在前兩列的資訊中你就可以看到logcat的標籤列表和優先順序別,它是這樣標出的:<priority>/<tag> ,1-33所示。
圖1-33 logcat的組成
在這裡我們可以看到,它的優先順序是D,標籤是dalvikvm。
為了讓日誌輸出能體現管理的層級,你還可以用過濾器來控制日誌輸出,過濾器可以協助你描述系統的標籤等級。
過濾器語句按照下面的格式描tag:priority … , tag 表示是標籤,priority 是表示標籤的報告的最低等級。 從上面的tag的中可以得到日誌的優先順序。你可以在過濾器中多次寫tag:priority,它們之間用空格來表示。
下面的過濾語句指顯示優先順序為Info或更高的日誌資訊:
adb logcat *:I
效果1-34所示。
圖1-34 logcat過濾
這樣之前優先順序為D的log資訊就被過濾了,只顯示I等級以上的log資訊。
1.6.3
控制日誌輸出格式
日誌資訊包括了許多中繼資料域。我們可以修改日誌的輸出格式,以顯示出特定的中繼資料域。
Logcat提供了以下幾種格式:
1) brief-預設格式,log是按“優先順序/標籤 (原進程的PID)”的格式來顯示的;
2) process-log是按“優先順序 (原進程的PID)”的格式來顯示的;
3) tag-log是按“優先順序/標籤”的格式來顯示的;
4) thread-log是按“優先順序 (進程號:線程號)”的格式來顯示的;
5) raw-顯示原始的log資訊,不再有其他的中繼資料域;
6) time-log是按“時間優先順序/標籤”的格式來顯示的;
7) long-顯示所有的中繼資料域,並且資訊之間以空白行來間隔。
當啟動了logcat ,我們可以通過-v 選項來指定輸出格式:
[adb] logcat [-v <format>]
下面是用 thread 來產生的日誌格式:
adb logcat -v thread
1-35所示。
圖1-35 控制logcat輸出格式
1.6.4
查看可用日誌緩衝區
Android日誌系統有迴圈緩衝區,並不是所有的日誌系統都有預設迴圈緩衝區。為了得到日誌資訊,你需要通過-b選項來啟動logcat。如果要使用迴圈緩衝區,你需要查看剩餘的迴圈緩衝區:
radio — 查看緩衝區的相關的資訊。
events — 查看和事件相關的的緩衝區。
main — 查看主要的日誌緩衝區
-b 選項使用方法:
[adb] logcat [-b <buffer>]
下面的例子表示怎麼查看日誌緩衝區包含radio 和 telephony資訊:
adb logcat -b radio
1-36所示。
圖1-36 查看緩衝區
經驗分享: Android中由系統啟動的進程,預設STDOUT和STDERR(System.out和System.err )是被定向到/dev/null中去的,所以,從adb shell是看不到程式的輸出的,只能通過LOGW等列印,然後通過logcat查看。 |
第一章 工欲善其事 必先利其器—Android SDK工具(6)