不是安卓工程師,也能看logcat日誌
前言
寫這篇部落格的靈感,來自於最近工作的刺激。手上有好幾個專案不定期出現問題,而自己又去不了開發現場看日誌分析問題、做debug操作。
目前比較流行的兩種檢視日誌的方式有:
1. 開發者通過在開發工具的logcat視窗檢視日誌輸出。優點:具備日誌篩選功能,能夠比較容易的找到關鍵資訊。缺點:需要裝備整套的安卓開發環境。
2. 在程式中新增儲存日誌到檔案的功能。優點:能夠捕獲到更完整詳細的日誌。缺點:儲存的日誌太多,幾百上千行,看起來太累。
準備工作
需要具備基礎的計算機技能、Java開發環境和Android sdk。
下載Android SDK
下載地址:Windows
下載完成後,目錄結構截圖如下:(以Mac版本為例,目錄結構差異不大)
通常下載下來的sdk只集成了基礎的開發工具,如:模擬器、點9作圖工具、ddms。看日誌需要的adb工具在platform-tools目錄下,可以執行tools目錄下的android程式下載。
完整下載後,應該有如下檔案:
配置環境變數
不確定adb執行環境是否需要JRE(Java執行環境)支援,因為每次搭建Android開發需要先安裝jdk、下載Android SDK、下載eclipse 或 AndroidStudio,所以未曾驗證。只是提醒下,如果adb 使用有問題,可以考慮是否安裝JRE。
檢查電腦上是否已安裝JRE,可以嘗試著執行如下命令,正確顯示 jdk版本號為正常:
將platform-tools目錄新增到系統環境變數中,以方便在終端操作。
以Mac環境為例,修改使用者目錄下.bash_profile
檔案。之後使用命令source ~/.bash_profile
使修改的配置檔案生效。
依舊使用命令adb -version
檢查配置環境變數是否成功。
開啟手機開發者模式
不同品牌的手機,開啟開發者模式的方式大不相同,因此不做概述。
相關命令
做好一切,就可以將手機連線到電腦除錯。個人覺得,Windows系統有個比較噁心的問題就是usb的驅動。如果在使用中,同樣遇到這個問題,建議使用豌豆莢等PC端的手機管理軟體。他們會只能匹配usb驅動,類似於驅動精靈。開啟開發者模式的方式,也做了相應的引導。
連線裝置
啟動adb服務:adb start-server
檢視連線裝置:adb devices
停止adb服務:adb kill-server
*注:這裡停止adb服務命令只做演示用途,檢視日誌時,在檢查手機成功連線上電腦之後,不能停止adb服務。
檢視日誌
使用adb logcat命令,執行後如下:
這輸出的日誌也是一大坨,而且還不停的輸出,看上去眼花繚亂。主要是因為沒做篩選。
以上輸出的資訊包含了:日期、時間、PID、TID、日誌級別、標籤、日誌內容。
PID:可以看成app執行時,在系統中的唯一的一個標識。
UID:PID可以對應多個TID,主要是由於支援多執行緒。每個執行緒對應一個TID。
日誌級別:Android Log類原始碼中,日誌有6個級別。常用的5個分別是 V(Verbose 明細,最低級別)、D(Debug 除錯)、I(Info 資訊)、W(Warn 警告)、E(Error 錯誤)。
標籤:開發中,標記日誌的一個屬性。如,使用類名,表示是哪個類裡輸出的日誌。
篩選日誌
可以根據PID(同一時刻包名和PID是一一對應關係)、TID、日誌級別、日誌標籤、日誌內容做篩選。考慮到篇幅關係暫且只介紹使用PID、日誌級別、標籤篩選日誌。
根據日誌級別篩選
命令模板:adb logcat 標籤:日誌級別 (*:s)。
篩選Warn級別以上的日誌(包含Error)命令:adb logcat *:W
表示不匹配標籤。
根據標籤篩選
篩選System的日誌命令:adb logcat System:* *:s
第一個星號表示不匹配日誌級別, *:S用於設定所有標記的日誌優先順序為S,這樣可以確保僅輸出符合條件的日誌。
根據PID(應用包名)篩選
由於應用每次啟動後,系統分配的PID都不一樣。因此,需要根據包名或UID篩選日誌時,需要先啟動應用,再使用命令adb shell dumpsys meminfo 包名
檢視到UID資訊,最後根據PID篩選日誌。
根據PID 18270(圖中所示)篩選日誌 ,命令adb logcat | grep 18270
:
圖中可以看出,PID 18270 是唯一的,右邊的TID可以有多個值。橫向匹配的18270 是沒有新增
*:s
導致的。
綜合篩選
儲存日誌
儲存到手機
命令模板:adb logcat -f 手機上檔案目錄 標籤:日誌級別 *:s | grep PID
如:adb logcat -f /sdcard/Download/log.txt JPush:D *:s | grep 18270
儲存到電腦
命令模板:adb logcat > 電腦上檔案目錄 標籤:日誌級別 *:s | grep PID
如:adb logcat > ~/Desktop/log.txt JPush:D *:s | grep 18270
儲存的檔案內容如下: