使用 Logcat 查看記錄

Android Studio 的「Logcat」視窗可即時顯示裝置記錄,協助您對應用程式進行偵錯。這些記錄包括您以 Log 類別加到應用程式中的訊息、在 Android 執行的服務的訊息,或在執行垃圾收集等作業時顯示的系統訊息等。只要應用程式擲回例外狀況,Logcat 就會顯示訊息,然後提供內有該行程式碼連結的相關堆疊追蹤記錄。

開始使用 Logcat 視窗

如要查看應用程式的記錄訊息,請執行下列步驟:

  1. 開啟 Android Studio,在實體裝置或模擬器上建構並執行應用程式
  2. 依序選取選單列中的「View」>「Tool Windows」>「Logcat」。

根據預設,Logcat 會捲動至底端。您只需在「Logcat」檢視畫面中按一下,或向上滾動滑鼠滾輪,即可關閉這項功能。如要重新開啟,請按一下工具列中的「Scroll to the End」圖示 「Scroll to the End」圖示。您也可以使用工具列清除、暫停或重新啟動 Logcat。

「Logcat」視窗 UI

圖 1. Logcat 會設定記錄格式,方便您掃描實用資訊 (例如標記和訊息),以及找出不同類型的記錄 (例如警告和錯誤)。

如何閱讀記錄

每筆記錄都含有日期、時間戳記、程序與執行緒 ID、標記、套件名稱、優先順序,以及相關聯的訊息。不同標記有各自專屬的顏色,有助於識別記錄類型。記錄項目的優先順序可能是 FATALERRORWARNINGINFODEBUGVERBOSE

舉例來說,以下記錄訊息的優先順序是 DEBUG,並設有 ProfileInstaller 標記:

2022-12-29 04:00:18.823 30249-30321 ProfileInstaller        com.google.samples.apps.sunflower    D  Installing profile for com.google.samples.apps.sunflower

設定記錄檢視畫面

標準的記錄檢視畫面會顯示每筆記錄的日期、時間、程序與執行緒 ID、標記、套件名稱、優先順序,以及相關聯的訊息。根據預設,訊息行不會納入記錄檢視畫面中,但您可以使用「Logcat」工具列中的「Soft-Wrap」「Soft-Wrap」圖示 選項調整這項設定。

您也可以點選「Logcat」工具列中的「Configure Logcat Formatting Options」圖示 ,切換至預設顯示資訊較少的「Compact」檢視畫面。

如要進一步設定想要顯示的資訊量,請選取「Modify Views」,然後選擇是否要顯示時間戳記、標記、程序 ID 或套件名稱。

變更色彩配置

如要變更色彩配置,請依序前往「Android Studio」>「Settings」>「Editor」>「Color Scheme」。如要變更記錄檢視畫面的色彩配置,請選取「Android Logcat」。如要變更篩選器的色彩配置,請選取「Logcat Filter」

其他設定選項

如需其他設定選項,請依序前往「Android Studio」>「Settings」>「Tools」>「Logcat」。您可在此選擇 Logcat 週期緩衝區空間、新 Logcat 視窗的預設篩選器,以及是否要新增歷史記錄中的篩選器來支援自動完成功能。

在多個視窗中使用 Logcat

您可利用分頁輕鬆在不同裝置或查詢之間切換。只要點選「New Tab」圖示 「New Tab」圖示 即可建立多個 Logcat 分頁。在分頁標籤上按一下滑鼠右鍵,則可重新命名及重新排列分頁。

此外,您可以在分頁中分割檢視畫面,方便比較兩組記錄。如要建立分割畫面,請在記錄檢視畫面中按一下滑鼠右鍵,或按一下工具列中的「Split Panels」選項,然後選取「Split Right」或「Split Down」。如要關閉分割畫面,請按一下滑鼠右鍵,然後選取「Close」。每個分割畫面都可讓您設定專屬的裝置連線、檢視選項和查詢。

多個 Logcat 視窗 圖 2. 在 Android Studio 中分割「Logcat」視窗。

您可以從「Logcat」工具列中捲動到記錄的尾端,也可以點選特定行以持續顯示該行。

在 Android Studio 中,您可以直接透過主查詢欄位產生鍵/值搜尋。這個查詢系統可提供精準的查詢結果,也能根據鍵/值排除記錄。雖然您可以選擇使用規則運算式,但這在查詢時並非必要。如要查看建議,請在查詢欄位中按下 Ctrl + Space 鍵。

查詢欄位中的建議清單 圖 3. 在查詢欄位中按下 Ctrl + Space 鍵,即可顯示建議的查詢清單。

以下列舉幾個可在查詢中使用的鍵:

  • tag:比對記錄項目的 tag 欄位。
  • package:比對記錄應用程式的套件名稱。
  • process:比對記錄應用程式的程序名稱。
  • message:比對記錄項目的訊息部分。
  • level:比對指定或更嚴重的記錄層級,例如 DEBUG
  • age:比對項目的時間戳記是否為近期。值的指定方式是在數字後面加上代表時間單位的字母:s 代表秒數、m 代表分鐘數、h 代表小時數,d 則代表天數。例如,age: 5m 只會篩選出過去 5 分鐘內記錄下來的訊息。

否定和規則運算式

以下欄位支援否定和規則運算式比對功能:tagpackagemessageline

只要在欄位名稱前方加上 -,即可表示否定。例如,-tag:MyTag 會比對 tag 不含 MyTag 字串的記錄項目。

如要表示以規則運算式比對,則請在欄位名稱後方加上 ~,例如 tag~:My.*Tag

您可以合併使用否定和規則運算式修飾符,例如 -tag~:My.*Tag

邏輯運算子和括號

查詢語言支援以 &| 與括號表示的 ANDOR 運算子。例如:

(tag:foo | level:ERROR) & package:mine

請注意,系統會強制執行一般運算子的優先順序,因此以下運算式:

tag:foo | level:ERROR & package:mine

會評估為:

tag:foo | (level:ERROR & package:mine)

隱式邏輯運算子

如未套用邏輯運算子,查詢語言會自動將多個具有相同鍵的非否定 key-value 篩選字詞評估為 OR,而其他所有字詞則評估為 AND

例如:

tag:foo tag:bar package:myapp

會評估為:

(tag:foo | tag:bar) & package:myapp

但是:

tag:foo -tag:bar package:myapp

會評估為:

tag:foo & -tag:bar & package:myapp

如果多個查詢字詞以空白字元分隔,而且沒有邏輯運算子,系統會以低優先順序 AND 運算這些字詞。例如,字詞 foo bar tag:bar1 | tag:bar2 等同於 'foo bar' & (tag: bar1 | tag: bar2)

特殊查詢

package:mine

package 鍵支援特殊值 mine。這個特殊值會比對開放專案內的所有套件名稱。

level

level 查詢會比對 Logcat 訊息的記錄層級,這些記錄項目的層級大於或等於查詢層級。

舉例來說,level:INFO 會比對記錄層級為 INFOWARNERRORASSERT 的任何記錄項目。請注意,層級沒有大小寫之分,有效層級包括:VERBOSEDEBUGINFOWARNERRORASSERT

age

age 查詢會根據項目的時間戳記比對項目,格式為 age:<number><unit>,其中

  • <number> 為整數
  • <unit>smhd (秒、分、小時和天) 之一。

以下列清單為例,age 查詢會比對時間戳記落在其值所指範圍內的記錄訊息。例如,查詢 age:5m 會比對時間戳記落在前 5 分鐘內的項目。

age:30s
age:5m
age:3h
age:1d

請注意,時間戳記會與主機的時間戳記比較,而不是已連線的裝置。如果裝置的時間設定有誤,這項查詢可能無法正常運作。

is

您可以透過以下方式使用 is 鍵:

  • is:crash 會比對代表應用程式當機 (原生或 Java) 的記錄項目。
  • is:stacktrace 會比對代表任何類似 Java 堆疊追蹤的記錄項目,無論記錄層級為何都一樣。

name

name 鍵可讓您為已儲存的篩選器提供專屬名稱,方便在篩選記錄下拉式選單中加以識別。儘管多次指定 name 不會導致發生錯誤,但 IDE 在查詢中只會使用最後指定的 name 值。

查看查詢記錄

按一下查詢欄位旁邊的「Show history」圖示 篩選器圖示 即可查看查詢記錄。如要將特定查詢設為常用項目,使其持續顯示在所有 Studio 專案的清單頂端,請按一下該查詢旁邊的星號。您也可以使用 name: 鍵,讓常用查詢更易於辨識。詳情請參閱「特殊查詢」一節。

可將查詢設為常用項目的 UI

圖 4. 按一下查詢旁邊的星號即可將其設為常用項目。

追蹤應用程式當機和重新啟動的記錄

如果 Logcat 偵測到應用程式程序已停止並重新啟動,就會在輸出內容中顯示訊息,例如 PROCESS ENDEDPROCESS STARTED。重新啟動 Logcat 會保留工作階段設定,例如分頁分割、篩選器和檢視選項,方便您繼續執行工作階段。

顯示應用程式當機記錄的「Logcat」視窗

圖 5. 應用程式程序重新啟動時,Logcat 會顯示訊息,說明該程序結束後接著啟動。