1. 程式人生 > >【轉】使用 Android 的日誌工具LogCat

【轉】使用 Android 的日誌工具LogCat

Android中的日誌工具類是 Log(android.util.Log),這個類中提供瞭如下幾個方法來供我們列印日誌。

1.    Log.v()

這個方法用於列印那些最為瑣碎的,意義最小的日誌資訊。對應級別 verbose,是

Android 日誌裡面級別最低的一種。

2.    Log.d()

這個方法用於列印一些除錯資訊,這些資訊對你除錯程式和分析問題應該是有幫助 的。對應級別 debug,比 verbose 高一級。

3.    Log.i()

這個方法用於列印一些比較重要的資料,這些資料應該是你非常想看到的,可以幫 你分析使用者行為的那種。對應級別 info,比 debug 高一級。

4.    Log.w()

這個方法用於列印一些警告資訊,提示程式在這個地方可能會有潛在的風險,最好 去修復一下這些出現警告的地方。對應級別 warn,比 info 高一級。

5.     Log.e()

這個方法用於列印程式中的錯誤資訊,比如程式進入到了 catch 語句當中。當有錯 誤資訊打印出來的時候,一般都代表你的程式出現嚴重問題了,必須儘快修復。對應級 別 error,比 warn 高一級。 其實很簡單,一共就五個方法,當然每個方法還會有不同的過載,但那對你來說肯定不

是什麼難理解的地方了。我們現在就在 HelloWorld 專案中試一試日誌工具好不好用吧。 開啟 HelloWorldActivity,在 onCreate()方法中新增一行列印日誌的語句,如下所示:

 

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hello_world_layout);

Log.d("HelloWorldActivity", "onCreate execute");

}

Log.d 方法中傳入了兩個引數,第一個引數是 tag,一般傳入當前的類名就好,主要用於 對列印資訊進行過濾。第二個引數是 msg,即想要列印的具體的內容。

現在可以重新執行一下 HelloWorld 這個專案了,仍然是右擊 HelloWorld 專案→Run As

→Android Application。等程式執行完畢,可以看到 LogCat 中列印資訊如圖 1.20 所示。

 

 

 

 

 

圖   1.20

 

其中你不僅可以看到列印日誌的內容和 Tag 名,就連程式的包名、列印的時間以及應用 程式的程序號都可以看到。如果你的 LogCat 中並沒有打印出任何資訊,有可能是因為你當 前的裝置失去焦點了。這時你只需要進入到 DDMS 檢視,在 Devices 視窗中點選一下你當前 的裝置,列印資訊就會出來了。

另外不知道你有沒有注意到,你的第一行程式碼已經在不知不覺中寫出來了,我也總算是 交差了。

 

1.4.3    為什麼使用 Log 而不使用 System.out

 

我相信很多的 Java 新手都非常喜歡使用 System.out.println()方法來列印日誌,不知道你 是不是也喜歡這麼做。不過在真正的專案開發中,是極度不建議使用 System.out.println()方 法的!如果你在公司的專案中經常使用這個方法,就很有可能要捱罵了。

為什麼 System.out.println()方法會這麼遭大家唾棄呢?經過我仔細分析之後,發現這個 方法除了使用方便一點之外,其他就一無是處了。方便在哪兒呢?在 Eclipse 中你只需要輸 入 syso,然後按下程式碼提示鍵,這個方法就會自動出來了,相信這也是很多 Java 新手對它 鍾情的原因。那缺點又在哪兒了呢?這個就太多了,比如日誌列印不可控制、列印時間無法 確定、不能新增過濾器、日誌沒有級別區分……

聽我說了這些,你可能已經不太想用 System.out.println()方法了,那麼 Log 就把上面所 說的缺點全部都做好了嗎?雖然談不上全部,但我覺得 Log 已經做得相當不錯了。我現在就 來帶你看看 Log 和 LogCat 配合的強大之處。

首先在 LogCat 中是可以很輕鬆地新增過濾器的,你可以在圖 1.21 中看到我們目前所有 的過濾器。

 

 

 

 

 

圖   1.21

 

目前只有兩個過濾器,All messages 過濾器也就相當於沒有過濾器,會把所有的日誌都 顯示出來。com.test.helloworld 過濾器是我們執行 HelloWorld 專案時自動建立的,點選這個 過濾器就可以只看到 HelloWorld 程式中列印的日誌。那可不可以自定義過濾器呢?當前可 以,我們現在就來新增一個過濾器試試。

點選圖 1.21 中的加號,會彈出一個過濾器配置介面。我們給過濾器起名叫 data,並且讓 它對名為 data 的 Tag 進行過濾,如圖 1.22 所示。

 

 

 

圖   1.22

 

點選 OK,你就會發現你已經多出了一個 data 過濾器,當你點選這個過濾器的時候,你 會發現剛才在 onCreate()方法裡列印的日誌沒了,這是因為 data 這個過濾器只會顯示 Tag 名 稱為 data 的日誌。你可以嘗試在 onCreate() 方法中把列印日誌的語句改成 Log.d("data","onCreate execute"),然後再次執行程式,你就會在 data 過濾器下看到這行日誌了。

不知道你有沒有體會到使用過濾器的好處,可能現在還沒有吧。不過當你的程式打印出 成百上千行日誌的時候,你就會迫切地需要過濾器了。

看完了過濾器,再來看一下 LogCat 中的日誌級別控制吧。LogCat 中主要有 5 個級別, 分別對應著我在上一節介紹的 5 個方法,如圖 1.23 所示。

 

 

 

圖   1.23

 

當前我們選中的級別是 verbose,也就是最低等級。這意味著不管我們使用哪一個方法 列印日誌,這條日誌都一定會顯示出來。而如果我們將級別選中為 debug,這時只有我們使 用 debug 及以上級別方法列印的日誌才會顯示出來,以此類推。你可以做下試驗,如果你把 LogCat 中的級別選中為 info、warn 或者 error 時,我們在 onCreate()方法中列印的語句是不會 顯示的,因為我們列印日誌時使用的是 Log.d()方法。

日誌級別控制的好處就是,你可以很快地找到你所關心的那些日誌。相信如果讓你從上 千行日誌中查詢一條崩潰資訊,你一定會抓狂的吧。而現在你只需要將日誌級別選中為 error, 那些不相干的瑣碎資訊就不會再幹擾你的視線了。