天天看點

【轉】使用 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 所示。

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

圖   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 中看到我們目前所有 的過濾器。

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

圖   1.21

目前隻有兩個過濾器,All messages 過濾器也就相當于沒有過濾器,會把所有的日志都 顯示出來。com.test.helloworld 過濾器是我們運作 HelloWorld 項目時自動建立的,點選這個 過濾器就可以隻看到 HelloWorld 程式中列印的日志。那可不可以自定義過濾器呢?目前可 以,我們現在就來添加一個過濾器試試。

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

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

圖   1.22

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

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

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

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

圖   1.23

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

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