1. 程式人生 > >使用 Logcat 寫入和檢視日誌

使用 Logcat 寫入和檢視日誌

Android Monitor 包含一個可以顯示除錯訊息的 logcat 監視器。logcat 監視器既可以顯示系統訊息(例如何時發生了垃圾回收),也能顯示您可以使用 Log 類新增到應用中的訊息。此監視器可以實時顯示訊息,也可以保留歷史記錄,以便您檢視較舊的訊息。

要僅顯示感興趣的資訊,您可以建立過濾器,修改訊息中顯示的資訊量,設定優先順序,僅顯示通過應用程式碼生成的訊息,以及搜尋日誌。預設情況下,logcat 監視器僅顯示與最近執行的應用相關的日誌輸出。

如果應用引發異常,logcat 監視器會顯示一條訊息,接著顯示關聯的堆疊跟蹤,堆疊跟蹤包含指向該程式碼的連結。此功能可以幫助您修復錯誤和改進應用操作。

自 Android Studio 2.2 開始,Run 視窗還會顯示當前正在執行的應用的日誌訊息。請注意,您可以配置 logcat 監視器顯示,但無法配置 Run 視窗。

logcat 訊息格式
每個 Android 日誌訊息都有與其關聯的標記和優先順序。系統日誌訊息的標記是一個簡短的字串,其表示訊息所源自的系統元件(例如,ActivityManager)。使用者自定義的標記可以是您認為有用的任意字串,例如當前類的名稱(建議的標記)。您可以在 Log 方法呼叫中定義名稱,例如:

Log.d(tag, message);
優先順序是以下值之一:

V — 詳細(最低優先順序)
D — 除錯
I — 資訊
W — 警告
E — 錯誤
A — 斷言
日誌訊息的格式為:

date time PID-TID/package priority/tag: message
例如,下面的日誌訊息的優先順序為 V,標記為 AuthZen:

12-10 13:02:50.071 1901-4229/com.google.android.gms V/AuthZen: Handling delegate intent.
PID 代表程序識別符號,TID 則為執行緒識別符號;如果僅有一個執行緒,兩者可以相同。

在 logcat 監視器中顯示正在執行的應用
要顯示特定應用的日誌訊息,請執行以下操作:

滿足先決條件和依賴關係。
開啟一個應用專案。
在硬體裝置或模擬器上執行應用。
顯示 Android Monitor。
點選 logcat 標籤。
預設情況下,logcat 監視器僅顯示裝置或模擬器上正在執行的應用的日誌訊息:

要更改此預設設定,請參閱過濾 logcat 訊息。

(可選)選擇不同的裝置、模擬器或程序。
設定日誌級別
您可以設定日誌級別,以控制 logcat 監視器中顯示的訊息數量。您可以顯示所有訊息,也可以僅顯示指示最嚴重狀態的訊息。

請記住,無論日誌級別設定如何,logcat 監視器都會繼續收集所有訊息。此設定僅決定 logcat 監視器的顯示內容。

要設定日誌級別,請執行以下操作:

在 Log level 選單中,選擇以下值之一:
Verbose - 顯示所有日誌訊息(預設值)。
Debug - 顯示僅在開發期間有用的除錯日誌訊息,以及此列表中較低的訊息級別。
Info - 顯示常規使用的預計日誌訊息,以及此列表中較低的訊息級別。
Warn - 顯示尚不是錯誤的潛在問題,以及此列表中較低的訊息級別。
Error - 顯示已經引發錯誤的問題,以及此列表中較低的訊息級別。
Assert - 顯示開發者預計絕不會發生的問題。
搜尋 logcat 訊息
要搜尋 logcat 監視器中當前顯示的訊息,請執行以下操作:

(可選)如果您想要使用正則表示式搜尋模式,請選擇 Regex。
在搜尋欄位中鍵入字元序列 “搜尋”圖示
logcat 監視器將相應地顯示更改。

按 Enter 鍵以在此會話期間將搜尋字串儲存到選單中。
要重複搜尋,請從搜尋選單中選擇。根據需要選擇或取消選擇 Regex(不建議使用此設定)。
過濾 logcat 訊息
一種將日誌輸出減少至可管理水平的方式是,使用過濾器進行限制。

注:過濾器的應用範圍為整個 logcat 歷史記錄,而不僅僅是 logcat 監視器中當前顯示的訊息。確保對其他顯示選項進行相應設定,以便您能夠看到想要檢查的過濾器輸出。

要定義並應用過濾器,請執行以下操作:

在過濾器選單中,選擇一個過濾選項:
Show only selected application - 僅顯示通過應用程式碼生成的訊息(預設選項)。logcat 監視器將使用活動應用的 PID 過濾日誌訊息。
No Filters - 不應用過濾器。無論您選擇哪個程序,logcat 監視器都會顯示裝置中的所有日誌訊息。
Edit Filter Configuration - 建立或修改自定義過濾器。例如,您可以建立一個過濾器,以同時檢視兩個應用中的日誌訊息。
定義過濾器後,您還可以在選單中選擇它們。要從選單中移除過濾器,請刪除過濾器。

如果您選擇了 Edit Filter Configuration,請建立或修改過濾器。
在 Create New Logcat Filter 對話方塊中指定過濾器引數:
Filter Name - 鍵入您想要定義的過濾器的名稱,或者從左側面板中選擇一個以修改現有過濾器。名稱只能包含小寫字元、下劃線和數字。
Log Tag -(可選)指定標記。如需瞭解詳細資訊,請參閱 logcat 訊息格式。
Log Message -(可選)指定日誌訊息文字。如需瞭解詳細資訊,請參閱 logcat 訊息格式。
Package Name -(可選)指定軟體包名稱。如需瞭解詳細資訊,請參閱 logcat 訊息格式。
PID -(可選)指定程序 ID。如需瞭解詳細資訊,請參閱 logcat 訊息格式。
Log Level -(可選)選擇日誌級別。如需瞭解詳細資訊,請參閱設定日誌級別。
Regex - 選擇此選項可以為相關引數使用正則表示式。
點選 +,將過濾器定義新增到左側面板中。
要移除過濾器,請在左側面板中將其選中,然後點選 -。

完成後,點選 OK。如果您點選 Cancel,任何過濾器新增或修改操作都會丟失。
確保您能看到想要檢查的日誌訊息。
如果您認為沒有看到想要檢查的日誌訊息,請嘗試選擇 No filters 並搜尋特定日誌訊息。

配置 logcat 標題顯示
要自定義標題顯示以僅顯示感興趣的資訊,請執行以下操作:

選擇“Use Soft Wraps” “Use Soft Wraps”圖示 以檢視整個訊息,並防止其從右側邊緣消失。
點選“Configure Logcat Header” “Configure Logcat header”圖示 以指定想要顯示或隱藏的訊息的元素,然後點選 OK。
如需瞭解有關訊息元素的詳細資訊,請參閱 logcat 訊息格式。

上下移動堆疊跟蹤
在應用引發異常時,訊息將包含方法呼叫的堆疊追蹤。logcat 監視器讓您可以在日誌中快速定位堆疊追蹤,並在程式碼編輯器中檢視關聯程式碼。如果需要(和可能),逆編譯程式將派生您可以檢視的原始碼。

要上下移動堆疊追蹤並在程式碼編輯器中檢視關聯程式碼,請執行以下操作:

點選“Up the Stack Trace” “Up the Stack Trace”圖示 可以移動到日誌中相對於當前位置的前一個方法。
點選“Down the Stack Trace” “Down the Stack Trace”圖示 可以移動到日誌中相對於當前位置的下一個方法。
移動到日誌結尾
點選特定訊息將停止顯示訊息。

要快速移動到日誌結尾以檢視實時訊息流,請執行以下操作:

點選“Scroll to the End” “Scroll to the End”圖示
按 End 鍵。
滾動或按 Page Down 鍵,直至結尾。
列印和寫入檔案
要保留日誌資訊,您可以將日誌傳送到印表機,將日誌寫入 PDF 檔案,或者將日誌複製並貼上到文字檔案中。

要列印日誌或將其寫入 PDF 檔案,請執行以下操作:

點選“Print” “Print”圖示
在 Android Studio 的 Print 對話方塊中,可以選擇更改列印引數,然後點選 Print。
在作業系統的 Print 對話方塊中,可以選擇更改列印引數,然後點選 Print。
您可以設定引數,以將日誌傳送到印表機或將其寫入 PDF 檔案。

要將日誌複製到文字檔案,請執行以下操作:

在 logcat 監視器中,請選擇然後複製日誌文字。
按 Ctrl+A (⌘A) 全選。

開啟文字編輯器並將文字貼上到檔案中。
清除和重啟日誌
要清除(重新整理)整個日誌,請執行以下操作:

點選“Clear logcat” “Clear logcat”圖示
如果存在問題並且日誌不再記錄,您可以重啟日誌:

點選“Restart” “Restart”圖示
向您的程式碼新增日誌訊息
您可以通過 Log 類建立在 logcat 監視器中顯示的日誌訊息。一般來說,您應使用以下日誌方法,這些方法按照優先順序從高到低(或者從最簡略到最詳細)的順序列示:

Log.e(String, String)(錯誤)
Log.w(String, String)(警告)
Log.i(String, String)(資訊)
Log.d(String, String)(除錯)
Log.v(String, String)(詳細)
請參閱 Log 類說明,檢視更完整的選項列表。

除開發期間外,其他任何時候都絕不應將詳細日誌編譯到您的應用中。除錯日誌雖然會編譯,但會在執行時去掉,而錯誤、警告和資訊日誌會始終保留。

對於每種日誌方法,第一個引數都應是唯一標記,第二個引數是訊息。系統日誌訊息的標記是一個簡短的字串,其表示訊息所源自的系統元件(例如,ActivityManager)。您的標記可以是您認為有用的任意字串,例如當前類的名稱。

一種比較好的做法是,在要用於第一個引數的類中宣告 TAG 常量。例如,您可以按照以下步驟建立一條資訊日誌訊息:

private static final String TAG = “MyActivity”;

Log.i(TAG, "MyClass.getView() — get item number " + position);