Logcat 是一種指令列工具,可轉儲系統訊息的記錄,包括
您從應用程式寫入的訊息,並使用
Log 類別。
本頁面主要說明指令列 logcat 工具,但您也可以查看記錄
來自 Android Studio「Logcat」視窗的訊息。適用對象
瞭解如何在 Android Studio 中查看及篩選記錄。
請參閱查看及寫入記錄:
Logcat。
記錄系統總覽
    Android 記錄系統是一組由系統維護的結構化環形緩衝區
    程序 logd。這組緩衝區結構受到系統規範,十分穩定。最相關的緩衝區如下:
    
- main:儲存大部分的應用程式記錄。
- system:儲存來自 Android 作業系統的訊息。
-  crash:儲存當機記錄。每個記錄項目都有優先順序、識別 記錄來源以及實際記錄訊息
    記錄系統的主要 C/C++ 介面是共用資料庫 liblog
    和標題 <android/log.h>
    所有語言專用的記錄設備
    (包括android.util.Log)
    最後呼叫
    __android_log_write。根據預設,它會呼叫函式
    __android_log_logd_logger:將記錄項目傳送至 logd
    或是透過通訊端建立連線從 API 級別 30 開始,您可以透過呼叫
    __android_set_log_writer。如需更多資訊,請前往
    NDK 說明文件。
  
    adb logcat 顯示的記錄會經過四次不同等級的篩選:
- 編譯時間篩選
- 視編譯設定而定,部分記錄可能會完整顯示
      就會從二進位檔移除例如,您可以設定 ProGuard 移除呼叫
      來自 Java 程式碼的 Log.d。
- 系統屬性篩選
- liblog會查詢一組系統屬性, 決定要傳送到- logd的最小嚴重性等級。如果您的記錄檔 「- MyApp」代碼,已檢查下列屬性,該屬性應包含 最小嚴重性的第一個字母 (- V、- D、- I、- W、- E或- S以停用所有記錄):
- log.tag.MyApp
- persist.log.tag.MyApp
- log.tag
- persist.log.tag
- 應用程式篩選
- 如未設定任何屬性,liblog會使用__android_log_set_minimum_priority。預設設定為INFO。
- 顯示器篩選
- adb logcat支援額外的可減少篩選器數量- logd顯示的記錄檔量請參閱 篩選記錄輸出。
指令列語法
    如要透過 adb 殼層執行 logcat,一般會使用:
  
[adb] shell logcat [<option>] ... [<filter-spec>] ...
另外也有 adb logcat 的簡寫,完整寫法為
    adb shell logcat。
選項
logcat 有許多選項。可用選項會因作業系統而異
    目前使用的作業系統版本如要查看 logcat 的專屬說明,
    請執行下列動作:
    
    adb logcat --help
    請注意,由於 logcat 是供 OS 開發人員和應用程式開發人員使用的工具
      其中許多選項都只
      可用做 root
篩選記錄輸出
記錄訊息的標記是一簡短字串,指出 訊息。例如「View」以及檢視系統
優先順序是下列字元代表的其中一層意義,由低至高排序:
- V:詳細 (優先度最低)
- D:偵錯
- I:資訊
- W:警示
- E:錯誤
- F:嚴重
- S:靜音 (優先度最高,不顯示任何記錄)
如要取得系統內使用、設有優先順序的代碼清單,請執行
  logcat 並觀察每則訊息的前兩欄,表示:
  <priority>/<tag>。
    以下是使用下列指令取得的 logcat 輸出內容簡短範例。
    logcat -v brief output 指令。輸出結果顯示訊息與
    優先順序等級「I」並標記「ActivityManager」:
  
I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
想將記錄輸出量縮減至可管理的程度,請使用篩選器來限制記錄輸出 運算式。您可以透過篩選運算式向系統指出標記優先順序 相關聯的組合系統會在 指定的標記。
篩選運算式符合以下格式:tag:priority ...,其中 tag
  表示利益標記;priority 則表示
  回報該代碼的優先順序系統會將屬於該標記、且優先度在設定值以上的訊息寫入記錄檔。請在以下位置提供任意數量的 tag:priority 規格:
  單一篩選運算式。這些設定值之間設有空格來分隔。
以下的篩選器運算式示例會隱藏所有記錄訊息,但不包含 設有「ActivityManager」標記的事件優先順序為「Info」或以上具有廣告代碼的廣告 「我的應用程式」優先順序為「Debug」以上:
adb logcat ActivityManager:I MyApp:D *:S
上述運算式中的最後一個元素 *:S 會為
    所有標記都會設為「靜音」,確保只會記錄訊息中包含「ActivityManager」以及「MyApp」是
  高度。使用 *:S 可確保記錄輸出內容僅限於
  您明確指定的篩選器*:S 能讓您篩選資料
  記錄輸出的許可清單。
    注意:在某些殼層中,「*」字元由殼層保留。如果發生以下情況:
    請使用這類殼層,請在篩選器運算式前後加上引號:adb logcat
    "ActivityManager:I MyApp:D *:S"
  
以下篩選運算式會顯示所有優先度為「warning」的記錄訊息。和 所有標記的權重值:
adb logcat *:W
如果您是透過開發電腦執行 logcat,而不是在
  遠端 adb 殼層也可以設定預設的篩選運算式,方法是匯出
  環境變數 ANDROID_LOG_TAGS:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
ANDROID_LOG_TAGS 篩選器不會匯出至模擬器/裝置
  執行個體 (如果您是透過遠端殼層或使用 adb shell
  logcat 執行 logcat)。
控制記錄輸出格式
記錄訊息除了標記和優先度之外,還附有多個中繼資料欄位。您可以修改訊息的輸出格式,讓訊息顯示特定的中繼資料欄。方法如下
  請使用 -v 選項,並指定下列其中一種支援的輸出格式:
  
- brief:顯示優先度、標記,和發布 撰寫新的電子郵件訊息
- long:顯示所有中繼資料欄位,並以空白欄位分隔訊息 即可
- process:僅顯示 PID。
- raw:顯示不含其他中繼資料欄位的原始記錄訊息。
- tag:僅顯示優先度和標記。
- thread:為一舊版格式。會顯示優先度、PID,以及發布該訊息的緒 ID(TID)。
- threadtime(預設):顯示日期、叫用時間、優先順序 標記、PID 和 TID。
- time:顯示 也就是訊息的發布程序
啟動 logcat 時,使用
  -v 個選項:
[adb] logcat [-v <format>]
以下範例將呈現如何產生 thread 輸出格式的訊息:
adb logcat -v thread
您只能使用 -v 選項指定一種輸出格式。不過,
    您可以視需要指定任意數量的修飾符。logcat
    會忽略不合適的修飾符。
  
格式修飾符
    格式修飾符會變更 logcat 輸出內容。如何指定格式修飾符:
    使用 -v 選項,如下所示:
  
adb logcat -b all -v color -d
每一則 Android 記錄訊息都有相關的標記和優先順序。 任何格式修飾符皆可與下列任一格式選項搭配使用:
- brief
- long
- process
- raw
- tag
- thread
- threadtime
- time
  如要設定下列修飾符詳細資料的格式,請在以下位置輸入 logcat -v --help:
  指令列:
  
- color:以不同顏色表示不同優先度。
- descriptive:顯示記錄緩衝區的事件說明。這個修飾符會影響事件 僅記錄緩衝區訊息,不會影響其他非二進位緩衝區。事件說明取自事件、記錄檔和標記的集合資料庫。
- epoch:顯示從 1970 年 1 月 1 日開始至今的時間 (以秒為單位)。
- monotonic:顯示從上次啟動以來,CPU 的總運作時間 (以秒為單位)。
- printable:確保所有二進位檔記錄內容均成功逸出。
- uid:如果存取控制允許,顯示 的記錄。
- usec:顯示時間 (單位精確到微秒)。
- UTC:顯示世界協調時間。
- year:於顯示時間中加入年份。
- zone:於顯示時間中加入當地時區。
檢視替代記錄緩衝區
Android 記錄系統會保留多個環形緩衝區來存放記錄訊息,但不是所有的
  記錄訊息傳送到預設的環形緩衝區。如要查看其他記錄訊息,
  執行 logcat 指令,然後使用 -b 選項要求檢視
  替代環形緩衝區。您可以檢視下列任一備用緩衝區:
- radio:檢視內含無線電/電話服務相關的緩衝區 訊息。
- events:檢視已解譯的二進位系統事件緩衝區訊息。
- main:檢視不含 系統和當機記錄訊息
- system:檢視系統記錄緩衝區 (預設)。
- crash:檢視系統當機記錄緩衝區 (預設)。
- all:檢視所有緩衝區。
- default:回報- main、- system,和- crash緩衝區。
      -b 的使用方式為:
[adb] logcat [-b <buffer>]
以下範例說明如何檢視包含無線電和電話服務訊息的記錄緩衝區:
adb logcat -b radio
    如要為您想要顯示的所有緩衝區指定多個 -b 旗標,
    輸入下列指令:
  
logcat -b main -b radio -b events
    針對以半形逗號分隔的緩衝區清單指定一 -b 旗標。
    例如:
  
logcat -b main,radio,events
程式碼記錄
Log 類別可讓您建立
    程式碼中的記錄項目。這些記錄項目會顯示在 logcat 工具中。常見的記錄方式包括:
- Log.v(String, String)(詳細資訊)
- Log.d(String, String)(偵錯)
- Log.i(String, String)(資訊)
- Log.w(String, String)(警示)
- Log.e(String, String)(錯誤)
以下列呼叫模式為例:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
logcat 輸出的內容如以下所示:
I/MyActivity( 1557): MyClass.getView() — get item number 1
