使用 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, 那些不相干的瑣碎信息就不會再干擾你的視線了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM