使用 Android 的日誌工具LogCat

來源:互聯網
上載者:User

標籤:

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, 那些不相干的瑣碎資訊就不會再幹擾你的視線了。

使用 Android 的日誌工具LogCat

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.