我們在Android開發(fā)中總能看到程序的log日志內(nèi)容充滿了屏幕,而真正對開發(fā)者有意義的信息被淹沒在洪流之中,讓開發(fā)者無所適從,嚴(yán)重影響開發(fā)效率。本文就具體介紹幾種在shell命令行中過濾adb logcat輸出的方法。
1、只顯示需要的輸出(白名單)
最方便的當(dāng)然是通過管道使用 grep 過濾了,這樣可以使用 grep 強(qiáng)大的正則表達(dá)式匹配。簡單的匹配一行當(dāng)中的某個字符串,例如 MyApp:
進(jìn)階一點(diǎn)可以使用 grep 的正則表達(dá)式匹配。例如上一個例子會匹配一行中任意位置的 MyApp,可以設(shè)置為僅匹配 tag。默認(rèn)的 log 輸出如下,如果修改過輸出格式相應(yīng)的表達(dá)式也要修改。
I/CacheService( 665): Preparing DiskCache for all thumbnails.
可以看出 tag 是一行開頭的第三個字符開始,根據(jù)這點(diǎn)寫出表達(dá)式:
adb logcat | grep "^..MyApp"
根據(jù)這個格式也可以設(shè)置只顯示某個優(yōu)先級的 log,再匹配行首第一個字符即可。例如僅顯示 Error 級別 tag 為 MyApp 的輸出:
adb logcat | grep "^E.MyApp"
當(dāng)然也可以匹配多個,使用 | 分割多個匹配表達(dá)式,要加轉(zhuǎn)義符。例如要匹配 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep "^..MyApp/|^..MyActivity"
adb logcat | grep -E "^..MyApp|^..MyActivity" #使用 egrep 無須轉(zhuǎn)義符
2、過濾不需要的輸出(黑名單)
還是使用 grep,用法也跟上面的一樣,加一個 -v 即可。例如要過濾 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep -v "^..MyApp/|^..MyActivity"
adb logcat | grep -vE "^..MyApp|^..MyActivity" #使用 egrep 無須轉(zhuǎn)義符
3、顯示同一個進(jìn)程的所有輸出
有時一個程序里面的 tag 有多個,需要輸出該程序(同一個 PID)的所有 tag;僅使用 tag 過濾有時也會漏掉一些錯誤信息,而一般錯誤信息也是和程序同一個 PID。還是通過 grep 實(shí)現(xiàn),思路是先根據(jù)包名找到 pid 號,然后匹配 pid。寫成 shell 腳本如下,參數(shù)是程序的 java 包名(如 com.android.media)。
#!/bin/bash packageName=$1 pid=`adb shell ps | grep $packageName | awk ‘{print $2}'` adb logcat | grep
主站蜘蛛池模板:
周至县|
洞口县|
浦县|
阿荣旗|
祁阳县|
普格县|
珲春市|
盐边县|
奇台县|
北宁市|
嘉禾县|
聊城市|
东莞市|
邓州市|
焦作市|
永顺县|
福海县|
酒泉市|
夏津县|
绥江县|
泌阳县|
大姚县|
赫章县|
林西县|
定安县|
沾化县|
抚松县|
陇川县|
定安县|
吉首市|
平昌县|
武冈市|
岳西县|
电白县|
德格县|
郸城县|
湖南省|
额济纳旗|
上蔡县|
盐源县|
青海省|