iOS如何實時檢視App執行日誌
前言
可能大數人看到這個標題覺得DEBUG時在Xcode裡就能看到App執行時的列印在控制檯裡的日誌,這還需要專門寫篇文章介紹下嗎?其實不然,有些場景下我們還是需要實時檢視App執行時的日誌的,比如測試人員拿著測試機發現問題了過來找你,這時候要看執行時日誌,又不能重新DEBUG安裝版本,怎麼辦?再比如,收到並點選推送的通知後啟動App,這時候要檢視我們列印的日誌,怎麼辦?還有,弄過VoIP推送同學的都知道,這個推送可以直接啟動我們的App,如果要觀察啟動過程中的日誌,這該怎麼辦?總不能只能連著Xcode執行時,我們才能看到日誌吧。有同學可能會說,把日誌寫入檔案,啟動完成後,再把檔案拷貝出來看不就完了,好了,這篇文章你一定要認真看完。
檢視日誌的幾種方式
這裡我們說的日誌是輸出到控制檯的日誌,就是我們常用的NSLog輸出的日誌。其實大部分App會整合日誌模組,比如CocoaLumberjack,還有以前筆者學習Runloop時也造過這樣的輪子SSLogger。利用第三方日誌模組檢視日誌不在本文討論範圍內,本文只討論如何實時檢視輸出在console控制檯的日誌。
大致有以前幾種方式檢視日誌,一種是連著Xcode除錯時,可以直接在Xcode下面的控制檯輸出面板上看到我們App的日誌。如圖:
還一種也是Xcode,通過Window->Devices開啟devices介面,選擇我們的手機,也能看到手機中執行的程序輸出的日誌。如圖:
上面這兩種方式大部分iOS開發應該都知道,不知道的就該檢討下了。
本文重點介紹另外兩種檢視執行時日誌的方式: libimobiledevice 和 Console.app(控制檯應用)
使用libimobiledevice工具檢視日誌
libimobiledevice是一系列工具集,有很多實用的工具,截圖,安裝ipa檔案等等。我們要介紹的是idevicesyslog這個工具,這個工具可以把手機中的日誌輸出到我們指定的檔案裡。
如何安裝libimobiledevice
安裝libimobiledevice很簡單,在命令列輸入:
brew instll libimobiledevice --HEAD
注意,需要加上 –HEAD 選項,如果不加,安裝是老版本,不支援iOS10的手機,所以安裝時,需要加上 –HEAD 選項, 如圖:
如果電腦上沒有brew,請看這裡:brew安裝傳送門
如何使用idevicesyslog
很簡單,在命令列輸入:
idevicesyslog
就可以在螢幕上看見手機上所有的日誌了。 idevicesyslog
如何檢視我們想要的日誌
1)將裝置日誌重定向到檔案
idevicesyslog >> iphone.log &
該命令是將日誌匯入到iphone.log這個檔案,並且是在後臺執行。
2)用tail -f和grep檢視log
tail -f iphone.log tail -f iphone.log | grep 'QQ’ # 檢視包含QQ的行
如圖:
使用Mac自帶的控制檯應用檢視iOS日誌
在用過各種辦法檢視App日誌後,還是覺得蘋果系統自帶的工具用起來最方便,不用安裝,不用命令列,傻瓜式操作,非常方便。但是還有好多同學不知道怎麼用,這裡簡單的給大家介紹下。
連上手機,在LaunchPad其他檔案中開啟控制檯應用,或者搜尋Console.app開啟控制檯應用,可以看到左側一欄中有我們的手機裝置,選擇就可以,如圖
右側輸出的日誌不僅有我們自己的App還有其他程序的日誌,怎麼過濾?非常簡單,選中一條我們的日誌,在程序名字上右鍵,選擇顯示程序名,然後就只會顯示我們App的日誌。如果顯示的列名中沒有程序名,我們可以在其他列名上右鍵,在彈出的選單中勾選上程序就可以了。如圖顯示QQ列印出的日誌:
日誌還是有點多,看不清,怎麼辦,在右上方輸入自己想要過濾出的日誌,然後就會只顯示你想要的,如圖顯示QQ列印出的日誌中所有帶有“***”的行
是不是很簡單方便
其實這個控制檯應用功能還是很多的,本文只是介紹下簡單用法,大家快去試試其他功能吧。
總結
本文介紹的兩種實時檢視日誌的方法能讓我們在一些不能連上Xcode除錯的場景下檢視日誌,對於定位解決問題很有幫助。idevicesyslog 工具使用方法更靈活,可以用grep查詢更符合自己想要的日誌;控制檯應用檢視日誌更方便一點。