adb軟體自動化測試底層學習(4)---Log
Android日誌記錄系統是系統程序logd維護的一組結構化環形緩衝區。這組快取是固定的,由系統定義(main,system,crash)
- main : 儲存大多數應用日誌
- system : 用於儲存源自Android作業系統訊息
- crash : 用於儲存崩潰日誌
每個日誌條目都包含一個優先順序(VERBOSE、DEBUG、INFO、WARNING、ERROR 或 FATAL)、一個標識日誌來源的標記以及實際的日誌訊息。
命令語法
[adb] logcat [<option>] [<filter-spec>]
同時也可以在shell環境下執行
$ adb shell # logcat [<option>] [<filter-spec>]
常用選項(option)
選項 | 說明 |
---|---|
-b <buffer> | 載入可供檢視的備用日誌緩衝區,例如 events 或 radio。預設使用 main、system 和 crash 緩衝區集 |
-c | 清除(清空)所選的緩衝區並退出。預設緩衝區集為 main、system 和 crash。如需清除所有緩衝區,請使用 -b all -c。 |
-e <expr> | 只輸出日誌訊息與 <expr> 匹配的行,其中 |
-m<count> | 輸出 <count> 行後退出。這樣是為了與 --regex 配對,但可以獨立執行。 |
-d | 將日誌轉儲到螢幕並退出。 |
-v <format> | 置日誌訊息的輸出格式。預設格式為 threadtime。 檢視日誌輸出格式 |
--pid | 僅輸出來自給定 PID 的日誌。 |
檢視備用日誌緩衝區
Android 日誌記錄系統為日誌訊息保留了多個環形緩衝區,而且並非所有的日誌訊息都會發送到預設的環形緩衝區。如要檢視其他日誌訊息,您可以使用 -b 選項執行 logcat 命令,以請求檢視備用的環形緩衝區。您可以檢視下列任意備用緩衝區:
- radio:檢視包含無線裝置/電話相關訊息的緩衝區。
- events:檢視已經過解譯的二進位制系統事件緩衝區訊息。
- main:檢視主日誌緩衝區(預設),不包含系統和崩潰日誌訊息。
- system:檢視系統日誌緩衝區(預設)。
- crash:檢視崩潰日誌緩衝區(預設)。
- all:檢視所有緩衝區。
- default:報告 main、system 和 crash 緩衝區
adb logcat -b radio //指定radio
adb logcat -b main,radio,system //指定main,radio,system
adb logcat -b main -b radio -b system //指定main,radio,system
檢視日誌輸出格式
除標記和優先順序外,日誌訊息還包含許多元資料欄位。您可以修改訊息的輸出格式,以便它們顯示特定的元資料欄位。為此,您可以使用 -v 選項,並指定下列某一受支援的輸出格式。
- brief:顯示優先順序、標記以及發出訊息的程序的 PID。
- long:顯示所有元資料欄位,並使用空白行分隔訊息。
- process:僅顯示 PID。
- raw:顯示不包含其他元資料欄位的原始日誌訊息。
- tag:僅顯示優先順序和標記。
- thread::舊版格式,顯示優先順序、PID 以及發出訊息的執行緒的 TID。
- threadtime(預設值):顯示日期、呼叫時間、優先順序、標記、PID 以及發出訊息的執行緒的 TID。
- time:顯示日期、呼叫時間、優先順序、標記以及發出訊息的程序的 PID。
adb logcat -v brief//顯示優先順序標記&pid
過濾日誌輸出
- 日誌訊息的標記(tag)是一個簡短的字串,指示訊息所源自的系統元件(例如,“View”表示檢視系統)。
- 優先順序(priority)是以下字元值之一(按照從最低到最高優先順序的順序排列):
- V:詳細(最低優先順序)
- D:除錯
- I:資訊
- W:警告
- E:錯誤
- F:嚴重錯誤
- S:靜默(最高優先順序,絕不會輸出任何內容)
通過執行 Logcat 並觀察每條訊息的前兩列,可以獲取系統中使用的帶有優先順序的標記列表,格式為<priority>/<tag>。
$ adb logcat -v brief --pid 707
$ I/tify.tv.androi( 707): Background concurrent copying GC freed 6351(355KB) AllocSpace objects, 14(280KB) LOS objects, 24% free, 2766KB/3688KB, paused 608us total 189.894ms
如要將日誌輸出降低到可管理的水平,您可以使用過濾器表示式限制日誌輸出。通過過濾器表示式,您可以向系統指明您感興趣的標記/優先順序組合,系統會針對指定的標記抑制其他訊息。
過濾器表示式採用 tag:priority ... 格式,其中 tag 指示您感興趣的標記,priority 指示可針對該標記報告的最低優先順序。不低於指定優先順序的標記的訊息會寫入日誌。您可以在一個過濾器表示式中提供任意數量的 tag:priority 規範。一系列規範使用空格分隔。
以下是一個過濾器表示式的示例,該表示式會抑制除標記為“ActivityManager”、優先順序不低於“資訊”的日誌訊息,以及標記為“MyApp”、優先順序不低於“除錯”的日誌訊息以外的所有其他日誌訊息:
adb logcat -v brief ActivityManager:I MyApp:D *:S
上述表示式中最後一個元素 *:S 將所有標記的優先順序設為“靜默”,從而確保系統僅顯示標記為“ActivityManager”和“MyApp”的日誌訊息。使用 *:S 是確保日誌輸出受限於您已明確指定的過濾器的絕佳方式,它可以讓過濾器充當日誌輸出的“許可名單”。