Android 筆記——日志工具的使用
1、使用 Android 的日志工具 Log
Android 中的日志工具類是 Log(android.util.Log)?,這個類中提供了5個方法來供我們打印日志:
★ Log.v():用于打印那些最為瑣碎的、意義最小的日志信息。
? 對應級別 verbose,是 Android 日志里面級別最低的一種。
★ Log.d():用于打印一些調試信息,這些信息對你調試程序和分析問題應該是有幫助的。
? 對應級別 debug,比 verbose 高一級。
★ Log.i():用于打印一些比較重要的數據,這些數據應該是你非常想看到的、可以幫你分析用戶行為的數據。
? 對應級別 info,比 debug 高一級。
★ Log.w():用于打印一些警告信息,提示程序在這個地方可能會有潛在的風險,最好去修復一下這些出現警告的地方。
? 對應級別 warn,比 info 高一級。
★ Log.e():用于打印程序中的錯誤信息,比如程序進入了 catch 語句中。當有錯誤信息打印出來的時候,一般代表你的程序出現嚴重問題了,必須盡快修復。
? 對應級別 error,比 warn 高一級。
一共5個方法,每個方法有不同的重載。
在 HelloWorld 項目中試一試日志工具好不好用,打開 MainActivity,在 onCreate() 方法中添加一行打印日志的語句,如下所示:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.d("MainActivity", "onCreate execute") } }
Log.d() 方法中傳入了兩個參數:第一個參數是 tag,一般傳入當前的類名就好,主要用于對打印信息進行過濾;第二個參數是 msg,即想要打印的具體內容。
重新運行一下 HelloWorld 項目,點擊頂部工具欄上的運行按鈕,或者使用快捷鍵 Shift + F10(Mac系統是Control + R)?。等程序運行完畢,點擊 Android Studio 底部工具欄的“Android Monitor”?,在 Logcat 中就可以看到打印信息。

其中,不僅可以看到打印日志的內容和 tag 名,就連程序的包名、打印的時間以及應用程序的進程號都可以看到。當然,Logcat 中不光會顯示我們所打印的日志,還會顯示許多其他程序打印的日志,因此在很多情況下還需要對日志進行過濾。
2、為什么使用 Log 而不使用 println()?
相信很多的 Java 新手會非常喜歡使用 System.out.println() 方法來打印日志,在 Kotlin 中與之對應的是 println() 方法,不知道你是不是也喜歡這么做。不過在真正的項目開發中,是極度不建議使用 System.out.println() 或 println() 方法的,如果你在公司的項目中經常使用這兩個方法來打印日志的話,就很有可能要挨罵了。
為什么 System.out.println() 和 println() 方法會這么不受待見呢?
仔細分析會發現這兩個方法除了使用方便一點之外,其他就一無是處了。方便在哪兒呢?在 Android Studio 中你只需要輸入“sout”?,然后按下代碼提示鍵,方法就會自動出來了,相信這也是很多 Java 新手對它鐘情的原因。那缺點又在哪兒了呢?這個就太多了,比如日志開關不可控制、不能添加日志標簽、日志沒有級別區分……
Log 雖然沒有把上面所說的缺點全部改好,但 Log 已經做得相當不錯了,現在看看 Log 和 Logcat 配合的強大之處。
首先,Logcat 中可以很輕松地添加過濾器,可以點擊下圖中的過濾圖標,查看最近使用過的過濾條件。

目前只有4個過濾器,level:warn 表示只顯示指定級別的日志,這里指定的日志級別是 warn; package:mine 表示只顯示指定包名的日志,這里指定的包名是 mine;tag:MainActivity 表示只顯示指定 tag 名稱的日志,這里指定的 tag 為 MainActivity;MainActivity 表示只顯示包含指定字符串的日志,這里指定的字符串是 MainActivity。
除此以外,message:MainActivity 表示只顯示消息中包含指定字符串的日志,這里指定的字符串是 MainActivity。
可以同時指定多個過濾條件,使用空格分隔。
現在來添加日志試試,在 onCreate() 方法中添加打印日志的語句:Log.d("data", "onCreate execute"),再次運行程序,在 data 過濾器下看到這行日志了。

Logcat 中主要有5個級別,分別對應上一小節介紹的5個方法。新版本的 Logcat 增加了 level:assert,用于顯示斷言信息。

按日志級別進行過濾 :
? level:verbose :顯示所有日志。
? level:debug :顯示調試日志。
? level:info :顯示一般信息。
? level:warn :顯示警告日志。
? level:error :顯示錯誤日志。
? level:assert :顯示斷言信息。
如果當前選中的級別是 Verbose,也就是最低等級。這意味著不管使用哪一個方法打印日志,這條日志都一定會顯示出來。而如果將級別選中為 Debug,這時只有我們使用 Debug 及以上級別方法打印的日志才會顯示出來,以此類推。當把 Logcat 中的級別選中為 Info、Warn 或者 Error 時,在 onCreate() 方法中打印的語句是不會顯示的,因為打印日志時使用的是 Log.d() 方法。
日志級別控制的好處是可以很快地找到關心的那些日志。可以在輸入框里輸入關鍵字的內容,這樣只有符合關鍵字條件的日志才會顯示出來,從而能夠快速定位到任何你想查看的日志。
關鍵字過濾是支持正則表達式的,有這個特性,就可以構建出更加豐富的過濾條件。

浙公網安備 33010602011771號