Logcat是一個命令行工具,用於轉儲系統消息日誌,包括設備拋出錯誤時的堆棧軌跡,以及從您的應用中使用 Log 類寫入的消息。
要通過 adb shell 運行 Logcat,一般用法如下:
[adb] logcat [<option>] ... [<filter-spec>] ...
您可以將 logcat 作為 adb 命令運行,也可以直接在模擬器或關聯設備的 shell 提示中運行。
要使用 adb 查看日誌輸出,請轉到您的 SDK platform-tools/ 目錄並執行以下命令:
adb logcat
要獲取 logcat 在線幫助,請啟動設備,然後執行以下命令:
adb logcat --help
您可以建立與設備的 shell 連接並執行以下命令:
adb shell
logcat
下面介紹了logcat的命令行選項:
-b:加載可供查看的備用日誌緩衝區
例如events或radio。默認使用 main、system 和 crash 緩衝區集。請參閱查看備用日誌緩衝區
-c, –clear:清除(清空)所選的緩衝區並退出
默認緩衝區集為main、system和crash。要清除所有緩衝區,請使用-b all -c。
-e , –regex=:只輸出日誌消息與匹配的行,其中是一個正則表達式
-m , –max-count=:輸出行後退出。這樣是為了與–regex配對,但可以獨立運行
–print:與–regex和–max-count配對,使內容繞過正則表達式過濾器,但仍能夠在獲得適當數量的匹配時停止
-d:將日誌轉儲到屏幕並退出
-f :將日誌消息輸出寫入
默認值為stdout
-g, –buffer-size:輸出指定日誌緩衝區的大小並退出
-n:將輪替日誌的數量上限設置為 默認值為4
需要使用 -r 選項
-r:每輸出時輪替日誌文件
默認值為16。需要使用-f選項
-s:相當於過濾器表達式『*:S』;它將所有標記的優先級設為「靜默」,並用於放在可添加內容的過濾器表達式列表之前
-v:設置日誌消息的輸出格式。
默認格式為threadtime。
-D, –dividers:輸出各個日誌緩衝區之間的分隔線
-c:清空(清除)整個日誌並退出
-t:僅輸出最新的行數。此選項包括-d功能
1、日誌消息的標記是一個簡短的字符串,指示消息所源自的系統組件(例如,「View」表示視圖系統)。
2、優先級是以下字符值之一(按照從最低到最高優先級的順序排列):
V:詳細(最低優先級)
D:調試
I:信息
W:警告
E:錯誤
F:嚴重錯誤
S:靜默(最高優先級,絕不會輸出任何內容)
通過運行 Logcat 並觀察每條消息的前兩列,您可以獲取系統中使用的帶有優先級的標記列表,格式為 /
以下是使用 logcat -v brief output 命令獲取的簡短 Logcat 輸出的示例,它表明消息與優先級「I」和標記「ActivityManager」相關:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
要將日誌輸出降低到可管理的水平,您可以使用過濾器表達式限制日誌輸出。通過過濾器表達式,您可以向系統指明您感興趣的標記/優先級組合,系統會針對指定的標記抑制其他消息。
過濾器表達式採用 tag:priority … 格式:
tag指示您感興趣的標記
priority指示可針對該標記報告的最低優先級
不低於指定優先級的標記的消息會寫入日誌。您可以在一個過濾器表達式中提供任意數量的 tag:priority 規範。一系列規範使用空格分隔。
以下是一個過濾器表達式的示例,該表達式會抑制除標記為「ActivityManager」、優先級不低於「信息」的日誌消息,以及標記為「MyApp」、優先級不低於「調試」的日誌消息以外的所有其他日誌消息。
adb logcat ActivityManager:I MyApp:D *:S
上述表達式中最後一個元素 *:S 將所有標記的優先級設為「靜默」,從而確保系統僅顯示標記為「ActivityManager」和「MyApp」的日誌消息。
使用 *:S 是確保日誌輸出受限於您已明確指定的過濾器的絕佳方式,它可以讓過濾器充當日誌輸出的「白名單」。
以下過濾器表達式顯示了優先級不低於「警告」的所有標記的所有日誌消息:
adb logcat *:W
如果您從開發計算機運行 Logcat(相對於在遠程 adb shell 上運行),則也可以通過導出環境變量 ANDROID_LOG_TAGS 的值設置默認過濾器表達式:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
除標記和優先級外,日誌消息還包含許多元數據欄位。您可以修改消息的輸出格式,以便它們顯示特定的元數據欄位。為此,您可以使用 -v 選項,並指定下列某一受支持的輸出格式。
brief:顯示優先級、標記以及發出消息的進程的 PID
long:顯示所有元數據欄位,並使用空白行分隔消息
process:僅顯示 PID
raw:顯示不包含其他元數據欄位的原始日誌消息
tag:僅顯示優先級和標記
thread:舊版格式,顯示優先級、PID 以及發出消息的線程的 TID
threadtime(默認值):顯示日期、調用時間、優先級、標記、PID 以及發出消息的線程的 TID
time:顯示日期、調用時間、優先級、標記以及發出消息的進程的 PID
啟動 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:顯示日誌緩衝區事件說明。
此修飾符僅影響事件日誌緩衝區消息,不會對其他非二進位文件緩衝區產生任何影響。事件說明取自 event-log-tags 資料庫。
epoch:顯示自 1970 年 1 月 1 日以來的時間(以秒為單位)。
monotonic:顯示自上次啟動以來的時間(以 CPU 秒為單位)。
printable:確保所有二進位日誌記錄內容都進行了轉義。
uid:如果訪問控制允許,則顯示 UID 或記錄的進程的 Android ID。
usec:顯示精確到微秒的時間。
UTC:顯示 UTC 時間。
year:將年份添加到顯示的時間。
zone:將本地時區添加到顯示的時間。
Android 日誌記錄系統為日誌消息保留了多個環形緩衝區,而且並非所有的日誌消息都會發送到默認的環形緩衝區。
要查看其他日誌消息,您可以使用 -b 選項運行 logcat 命令,以請求查看備用的環形緩衝區。您可以查看下列任意備用緩衝區:
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
學習安排上!
▲ 大量企業真實性能調優案例 ▲
50頁獨家實戰性能瓶頸分析及案例總結
關注下方公眾號免費領取
第一步:點擊頂部藍字「自動化軟體測試」,進入公眾號主頁第二步:點擊右上角「···」
第三步:點擊「設為星標」
萬物需要陽光,生活需要方向😁
👇👇👇