A. 如何過濾 adb logcat 命令的輸出
1. 只顯示需要的輸出,白名單
最方便的當然是通過管道使用 grep 過濾了,這樣可以使用 grep 強大的正則表達式匹配。簡單的匹配一行當中的某個字元串,例如 MyApp:
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小寫。
adb logcat | grep --color=auto -i myapp #設置匹配字元串顏色。更多設置請查看 grep 幫助。
進階一點可以使用 grep 的正則表達式匹配。例如上一個例子會匹配一行中任意位置的 MyApp,可以設置為僅匹配 tag。默認的 log 輸出如下,如果修改過輸出格式相應的表達式也要修改。
I/CacheService( 665): Preparing DiskCache for all thumbnails.
可以看出 tag 是一行開頭的第三個字元開始,根據這點寫出表達式:
adb logcat | grep "^..MyApp"
根據這個格式也可以設置只顯示某個優先順序的 log,再匹配行首第一個字元即可。例如僅顯示 Error 級別 tag 為 MyApp 的輸出:
adb logcat | grep "^E.MyApp"
當然也可以匹配多個,使用 | 分割多個匹配表達式,要加轉義符。例如要匹配 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep "^..MyApp\|^..MyActivity"
adb logcat | grep -E "^..MyApp|^..MyActivity" #使用 egrep 無須轉義符
2. 過濾不需要的輸出,黑名單
還是使用 grep,用法也跟上面的一樣,加一個 -v 即可。例如要過濾 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep -v "^..MyApp\|^..MyActivity"
adb logcat | grep -vE "^..MyApp|^..MyActivity" #使用 egrep 無須轉義符
3. 顯示同一個進程的所有輸出
有時一個程序裡面的 tag 有多個,需要輸出該程序(同一個 PID)的所有 tag;僅使用 tag 過濾有時也會漏掉一些錯誤信息,而一般錯誤信息也是和程序同一個 PID。還是通過 grep 實現,思路是先根據包名找到 pid 號,然後匹配 pid。寫成 shell 腳本如下,參數是程序的 java 包名(如 com.android.mEdia)。
查看源代碼列印幫助
1 #!/bin/bash
2 packageName=$1
3 pid=`adb shell ps | grep $packageName | awk '{print $2}'`
4 adb logcat | grep --color=auto $pid
4. 從當前開始顯示
logcat 有緩存,如果僅需要查看當前開始的 log,需要清空之前的。
adb logcat -c && adb logcat
5. 過濾 log 文件
有時需要分析 log 文件,過濾 log 文件還是使用 grep。例如 log 文件為 myapp.log,要匹配 tag 為 MyApp 和 MyActivity 的輸出,然後輸出到 newmyapp.log:
cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log
Windows 下推薦使用 Notepad++,一個免費強大的記事本,支持正則表達式查找替換。可以高亮顯示匹配內容,也可以刪除不需要的內容。
以上的技巧主要用到了 grep,其實 logcat 本身也有過濾功能,可以根據 tag、優先順序過濾 log,具體請參考 Android 官方文檔 Reading and Writing Logs。如果喜歡使用圖形界面,請參考 Using DDMS,DDMS 裡面的 logcat 也可以同樣過濾。
B. 如何在eclipse里添加logcat,以及添加過濾器
logcat里信息繁多,用過濾器可以方便快捷的找到我們要查找的信息。
我們可以在打開Eclipse之後,選擇Window–>ShowView->Other菜單,然後在Android->LogCat中選擇LogCat,這樣LogCat便會在Eclipse的下方區域出現了。
其中,在LogCat的右上方的5個字母分別表示了5種不同類型的日誌信息(並以不同顏色加以區分,級別越高,顏色越突出):
1.[V]:詳細(Verbose)信息,輸出顏色為黑色
2.[D]:調試(Debug)信息,輸出顏色是藍色
3.[I]:通告(Info)信息,輸出顏色為綠色
4.[W]:警告(Warn)信息,輸出顏色為橙色
5.[E]:錯誤(Error)信息,輸出顏色為紅色,這里錯誤信息的級別最高,其次是警告信息,然後是通知信息和調試信息,級別最低的是詳細信息。
程序運行後,LogCat捕獲得到應用程序發送的日誌信息,顯示結果如下圖:
註:如果不能正常顯示,最好重啟一下eclipse。
C. catlog日誌工具怎麼使用
首先討論一下為什麼使用Logcat而不使用Java中的System.out.println()方法來輸出日誌。
System.out.println()方法的優點就是使用很方便,只需要在Eclipse中輸入syso,接著按下代碼提示,這個方法就自動出來了。但是相比較Logcat,它的缺點也很明顯,比如列印時間無法確定、列印內容無法控制、不能添加過濾器、日誌級別沒有區分等等。
今天重點討論下log的級別區分,Android中的日誌工具類Logcat(android.util.Log)提供了5種方法(對應5種級別),當然如有需要也可以進行重載,這里暫時不談。先看這五種方法:
1.Log.v()
對應級別verbos,屬於Android日誌裡面級別最低的一種。從名字可以看出,這中方法用於列印哪些瑣碎的的、意義最小的日誌信息(顯然數量較多)。
2.Log.d()
對應級別debug,比verbose高一級。這種方法用於列印調試的相關信息,對調試程序和分析問題用很大幫助。
3.Log.i()
對應級別info,又比debug高一級。該方法用於列印一些比較重要的信息,這些信息有助於幫助分析用戶行為。
4.Log.w()
對應級別warn,比info高一級。這個方法用於列印一些警告信息,提示程序在某些部分可能存在潛在的風險,例如程序流會堵死之類。最好將這些部分修復一下。
5.Log.e()
對應級別error,是級別最高的日誌信息。這個方法用於列印程序中的錯誤信息,例如程序進入了catch語句當中(異常處理機制)。當出現E級別的日誌信息的時候表示程序出現了很嚴重的錯誤,需要盡快修復。
細想一下,Log和Logcat配合之下會有怎樣的效果,今天先說下給Logcat添加過濾器的方法。
正常剛打開Eclipse會有一個All message過濾器(其實就是沒過濾),他會把所有的五種日誌全部列印出來。另外當我們創建項目的時候,會產生一個com.xxx.xxx的過濾器,這是運行項目時自動創建的,點擊這個過濾器就能看到這個項目的日誌信息。這里我們嘗試添加一個自定義的過濾器。
當前我們選擇的級別是verbose,是前面講過的五種級別中最低的等級,也就是說無論我們用Log.v()、Log.d()、Log.i()、Log.w()、log.e()當中的哪一種方法,這條日誌都會被列印出來。以此類推,如果我們選擇的控制級別是debug的話,那麼使用Log.v是無法列印出這條語句的,只有用debug及以上的方法才可以。換個角度說,如果我們將當前的等級控制選擇在info、warn或者error,那麼上面的語句也不會列印出來,因為代碼中我們使用的列印方法是Log.d()。通過日誌控制可以很快的定位到我們需要的信息,有效地提高解決問題的效率,確實比System.out.println()好用多了。
D. android 怎麼使用應用的包名通過logcat命令來過濾某個應用的日誌
本文介紹如何在 shell 命令行中過濾 adb logcat 輸出的幾個小技巧。 開發當中經常看到別人的 log 如洪水般瞬間刷滿了屏幕,對自己有用的信息都被淹沒了,影響心情也影響效率。下面是幾個我所知道的過濾方法。 1. 只顯示需要的輸出,白名單 最方便的當然是通過管道使用 grep 過濾了,這樣可以使用 grep 強大的正則表達式匹配。簡單的匹配一行當中的某個字元串,例如 MyApp: adb logcat grep MyApp adb logcat grep -i myapp #忽略大小寫。 adb logcat grep --color=auto -i myapp #設置匹配字元串顏色。更多設置請查看 grep 幫助。 進階一點可以使用 grep 的正則表達式匹配。例如上一個例子會匹配一行中任意位置的 MyApp,可以設置為僅匹配 tag。默認的 log 輸出如下,如果修改過輸出格式相應的表達式也要修改。 I/CacheService( 665): Preparing DiskCache for all thumbnails. 可以看出 tag 是一行開頭的第三個字元開始,根據這點寫出表達式: adb logcat grep "^..MyApp" 根據這個格式也可以設置只顯示某個優先順序的 log,再匹配行首第一個字元即可。例如僅顯示 Error 級別 tag 為 MyApp 的輸出: adb logcat grep "^E.MyApp" 當然也可以匹配多個,使用 分割多個匹配表達式,要加轉義符。例如要匹配 tag 為 MyApp 和 MyActivity 的輸出: adb logcat grep "^..MyApp\^..MyActivity" adb logcat grep -E "^..MyApp^..MyActivity" #使用 egrep 無須轉義符 2. 過濾不需要的輸出,黑名單 還是使用 grep,用法也跟上面的一樣,加一個 -v 即可。例如要過濾 tag 為 MyApp 和 MyActivity 的輸出: adb logcat grep -v "^..MyApp\^..MyActivity" adb logcat grep -vE "^..MyApp^..MyActivity" #使用 egrep 無須轉義符 3. 顯示同一個進程的所有輸出 有時一個程序裡面的 tag 有多個,需要輸出該程序(同一個 PID)的所有 tag;僅使用 tag 過濾有時也會漏掉一些錯誤信息,而一般錯誤信息也是和程序同一個 PID。還是通過 grep 實現,思路是先根據包名找到 pid 號,然後匹配 pid。寫成 shell 腳本如下,參數是程序的 java 包名(如 com.android.media)。 查看源代碼列印幫助 1 #!/bin/bash 2 packageName=$1 3 pid=`adb shell ps grep $packageName awk '{print $2}'` 4 adb logcat grep --color=auto $pid 4. 從當前開始顯示 logcat 有緩存,如果僅需要查看當前開始的 log,需要清空之前的。 adb logcat -c && adb logcat 5. 過濾 log 文件 有時需要分析 log 文件,過濾 log 文件還是使用 grep。例如 log 文件為 myapp.log,要匹配 tag 為 MyApp 和 MyActivity 的輸出,然後輸出到 newmyapp.log: cat myapp.log grep "^..MyApp\^..MyActivity" > newmyapp.log Windows 下推薦使用 Notepad++,一個免費強大的記事本,支持正則表達式查找替換。可以高亮顯示匹配內容,也可以刪除不需要的內容。 以上的技巧主要用到了 grep,其實 logcat 本身也有過濾功能,可以根據 tag、優先順序過濾 log,具體請參考 Android 官方文檔 Reading and Writing Logs。如果喜歡使用圖形界面,請參考 Using DDMS,DDMS 裡面的 logcat 也可以同樣過濾。 android的logcat詳細用法 Android日誌系統提供了記錄和查看系統調試信息的功能。日誌都是從各種軟體和一些系統的緩沖區中記錄下來的,緩沖區可以通過 logcat 命 令來查看和使用. 使用logcat命令 你可以用 logcat 命令來查看系統日誌緩沖區的內容: [adb] logcat [<option>] ... [<filter-spec>] ... 請查看Listing of logcat Command Options ,它有對logcat命 令有詳細的描述 . 你也可以在你的電腦或運行在模擬器/設備上的遠程adb shell端來使用logcat命 令,也可以在你的電腦上查看日誌輸出。 $ adb logcat 你也這樣使用: # logcat 過濾日誌輸出 每一個輸出的Android日誌信息都有一個標簽和它的優先順序. 日誌的標簽是系統部件原始信息的一個簡要的標志。(比如:「View」就 是查看系統的標簽). 優先順序有下列集中,是按照從低到高順利排列的: V — Verbose (lowest priority) D — Debug I — Info W — Warning E — Error F — Fatal S — Silent (highest priority, on which nothing is ever printed) 在運行logcat的時候在前兩列的信息中你就可以看到 logcat 的標簽列表和優先順序別,它是這樣標出的:<priority>/<tag> . 下面是一個logcat輸出的例子,它的優先順序就似乎I,標簽 就是ActivityManage: I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...} 為了讓日誌輸出能體現管理的級別,你還可以用過濾器來控制日誌輸出,過濾器可以幫助你描述 系統的標簽等級. 過濾器語句按照下面的格式描tag:priority ... , tag 表 示是標簽,priority 是表示標簽的報告的最低等級. 從上面的tag的中可以得到日誌的優先順序. 你可以在過濾器中多次寫tag:priority . 這些說明都只到空白結束。下面有一個列子,例子表示支持所有的日誌信息,除了那些標簽 為」ActivityManager」和優先順序為」Info」以上的和標簽為」 MyApp」和優先順序為」 Debug」以上的。 小等級,優先權報告為tag. adb logcat ActivityManager:I MyApp:D *:S 上面表達式的最後的元素 *:S ,,是設置所有的標 簽為」silent」,所有日誌只顯示有」View」 and 「MyApp」的,用 *:S 的另一個用處是 能夠確保日誌輸出的時候是按照過濾器的說明限制的,也讓過濾器也作為一項輸出到日誌中. 下面的過濾語句指顯示優先順序為warning或更高的日誌信息: adb logcat *:W 如果你電腦上運行logcat ,相比在遠程adbshell端,你還可以 為環境變數ANDROID_LOG_TAGS :輸入一個參數來設置默認的過濾 export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S" 需要注意的是ANDROID_LOG_TAGS 過濾器如果 通過遠程shell運行logcat 或 用adb shell logcat 來 運行模擬器/設備不能輸出日誌. 控制 日誌輸出格式 日誌信息包括了許多元數據域包括標簽和優先順序。可以修改日誌的輸出格式,所以可以顯示出特 定的元數據域。可以通過 -v 選項得到格式化輸出日誌的相關信息. brief — Display priority/tag and PID of originating process (the default format). process — Display PID only. tag — Display the priority/tag only. thread — Display process:thread and priority/tag only. raw — Display the raw log message, with no other metadata fields. time — Display the date, invocation time, priority/tag, and PID of the originating process. long — Display all metadata fields and separate messages with a blank lines. 當啟動了logcat ,你可以通過-v 選 項來指定輸出格式: [adb] logcat [-v <format>] 下面是用 thread 來產生的日誌格式: adb logcat -v thread 需要注意的是你只能-v 選項來規定輸出格式 option. 查看 可用日誌緩沖區 Android日誌系統有循環緩沖區,並不是所有的日誌系統都有默認循環緩沖區。為了得到 日誌信息,你需要通過-b 選項來啟動logcat 。如果要使用循環緩沖區,你需要查看剩餘的 循環緩沖期: radio — 查看緩沖區的相關的信息. events — 查看和事件相關的的緩沖區. main — 查看主要的日誌緩沖區 -b 選項使用方法: [adb] logcat [-b <buffer>] 下面的例子表示怎麼查看日誌緩沖區包含radio 和 telephony信息: adb logcat -b radio 查看 stdout 和stderr 在默認狀態下,Android系統有stdout 和 stderr (System.out和System.err ) 輸出到/dev/null , 在運行Dalvik VM的進程中,有一個系統可以備份日誌文件。在這種情況下,系統會用stdout 和stderr 和 優先順序 I.來記錄日誌信息 通過這種方法指定輸出的路徑,停止運行的模擬器/設備,然後通過用setprop 命 令遠程輸入日誌 $ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start 系統直到你關閉模擬器/設備前設置會一直保留,可以通過添加/data/local.prop 可 以使用模擬器/設備上的默認設置 Logcat命令列表 Option Description -b <buffer> 載入一個可使用的日誌緩沖區供查看,比如event 和radio . 默認值是main 。具體查看Viewing Alternative Log Buffers. -c 清楚屏幕上的日誌. -d 輸出日誌到屏幕上. -f <filename> 指定輸出日誌信息的<filename> , 默認是stdout . -g 輸出指定的日誌緩沖區,輸出後退出. -n <count> 設置日誌的最大數目<count> ., 默認值是4,需要和 -r 選 項一起使用。 -r <kbytes> 每<kbytes> 時 輸出日誌,默認值為16,需要和-f 選 項一起使用. -s 設置默認的過濾級別為silent. -v <format> 設置日誌輸入格式,默認的是brief 格 式,要知道更多的支持的格式,參看Controlling Log Output Format .
E. 怎麼用eclipse還有logcat命令的過濾log信息
1. 只顯示需要的輸出,白名單
最方便的當然是通過管道使用 grep 過濾了,這樣可以使用 grep 強大的正則表達式匹配。簡單的匹配一行當中的某個字元串,例如 MyApp:
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小寫。
adb logcat | grep --color=auto -i myapp #設置匹配字元串顏色。更多設置請查看 grep 幫助。
進階一點可以使用 grep 的正則表達式匹配。例如上一個例子會匹配一行中任意位置的 MyApp,可以設置為僅匹配 tag。默認的 log 輸出如下,如果修改過輸出格式相應的表達式也要修改。
I/CacheService( 665): Preparing DiskCache for all thumbnails.
可以看出 tag 是一行開頭的第三個字元開始,根據這點寫出表達式:
adb logcat | grep "^..MyApp"
根據這個格式也可以設置只顯示某個優先順序的 log,再匹配行首第一個字元即可。例如僅顯示 Error 級別 tag 為 MyApp 的輸出:
adb logcat | grep "^E.MyApp"
當然也可以匹配多個,使用 | 分割多個匹配表達式,要加轉義符。例如要匹配 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep "^..MyApp\|^..MyActivity"
adb logcat | grep -E "^..MyApp|^..MyActivity" #使用 egrep 無須轉義符
2. 過濾不需要的輸出,黑名單
還是使用 grep,用法也跟上面的一樣,加一個 -v 即可。例如要過濾 tag 為 MyApp 和 MyActivity 的輸出:
adb logcat | grep -v "^..MyApp\|^..MyActivity"
adb logcat | grep -vE "^..MyApp|^..MyActivity" #使用 egrep 無須轉義符
3. 顯示同一個進程的所有輸出
有時一個程序裡面的 tag 有多個,需要輸出該程序(同一個 PID)的所有 tag;僅使用 tag 過濾有時也會漏掉一些錯誤信息,而一般錯誤信息也是和程序同一個 PID。還是通過 grep 實現,思路是先根據包名找到 pid 號,然後匹配 pid。寫成 shell 腳本如下,參數是程序的 java 包名(如 com.android.media)。
查看源代碼列印幫助\
#!/bin/bash
packageName=$1
pid=`adb shell ps | grep $packageName | awk '{print $2}'`
adb logcat | grep --color=auto $pid
4. 從當前開始顯示
logcat 有緩存,如果僅需要查看當前開始的 log,需要清空之前的。adb logcat -c && adb logcat
5. 過濾 log 文件
有時需要分析 log 文件,過濾 log 文件還是使用 grep。例如 log 文件為 myapp.log,要匹配 tag 為 MyApp 和 MyActivity 的輸出,然後輸出到 newmyapp.log:cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log
Windows 下推薦使用 Notepad++,一個免費強大的記事本,支持正則表達式查找替換。可以高亮顯示匹配內容,也可以刪除不需要的內容。
以上的技巧主要用到了 grep,其實 logcat 本身也有過濾功能,可以根據 tag、優先順序過濾 log,具體請參考 Android 官方文檔 Reading and Writing Logs。如果喜歡使用圖形界面,請參考 Using DDMS,DDMS 裡面的 logcat 也可以同樣過濾。
F. android studio的logcat怎麼過濾出來調試信息
打開 LogCat在搜索框右側的No Filters中選擇 Edit Filter Configuration選項
然後在Name中輸入回過濾器的名稱,在by Package Name中輸入你的應用的Package Name就可以了。答
如下圖
然後在搜索框右側的過濾器選項中選擇你剛選擇過濾器就可以了。
G. 如何獲取 android 的系統日誌 logcat
讀取日誌需要的許可權
<uses-permission android:name="android.permission.READ_LOGS"/>
主要代碼
package mt.fzgh;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class MyLog
{
public static class MLog //靜態類
{
public static void getLog()
{
System.out.println("--------func start--------"); // 方法啟動
try
{
ArrayList<String> cmdLine=new ArrayList<String>(); //設置命令 logcat -d 讀取日誌
cmdLine.add("logcat");
cmdLine.add("-d");
ArrayList<String> clearLog=new ArrayList<String>(); //設置命令 logcat -c 清除日誌
clearLog.add("logcat");
clearLog.add("-c");
Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕獲日誌
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //將捕獲內容轉換為BufferedReader
// Runtime.runFinalizersOnExit(true);
String str=null;
while((str=bufferedReader.readLine())!=null) //開始讀取日誌,每次讀取一行
{
Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日誌....這里至關重要,不清理的話,任何操作都將產生新的日誌,代碼進入死循環,直到bufferreader滿
System.out.println(str); //輸出,在logcat中查看效果,也可以是其他操作,比如發送給伺服器..
}
if(str==null)
{
System.out.println("-- is null --");
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("--------func end--------");
}
}
}
這里比較令人糾結的一點就是日誌的清理 logcat -c 如果不加入 清理 在buffer滿為止,代碼自身能夠迭代6~7次....
附帶一份logcat的 命令...不過好像 過濾器 指令有問題....慎用
選項 說明
-s 默認設置過濾器
- f 文件 輸出到日誌文件
-c 清除日誌
-d 獲取日誌
-g 獲取日誌的大小
- v 格式 設置日誌(見下面的格式列印格式)
- v 格式 例
brief W/tag ( 876): message
process W( 876) message (tag)
tag W/tag : message
thread W( 876:0x37c) message
raw message
time 09-08 05:40:26.729 W/tag ( 876): message
threadtime 09-08 05:40:26.729 876 892 W tag : message
long [09-08 05:40:26.729 876:0x37c W/tag ] message
H. logcat是啥意思
log cat
日誌貓
log
[英][lɒg][美][lɔ:g]
n.日誌; 記錄; 原木;
v.伐木; 把…載入正式記錄; 行駛
例句
1 These records must be successfully written to the queue manager log for the application to correctly commit its updates.
這些記錄必須成功寫入到隊列管理器日誌,以便應用程序能夠正確地提交其更新。
2 Imagine the hours users may log uploading photos and labeling events from the lost decades B.F. ( before Facebook).
我們不妨設想一下,假如用戶要補上個人在Facebook誕生之前數十年間的生活片段,他們將要花多少時間上傳照片,整理活動記錄。
3 The original log cabin where Lincoln was born
林肯誕生的原來那座原木小屋
I. Android中如何通過logcat追蹤生命周期事件
使用 logcat 命令 查看和跟蹤系統日誌緩沖區的命令logcat的一般用法是:[adb] logcat [] ... [] ... 下文介紹過濾器和命令選項,詳細內容可參見Listing of logcat Command Options。 可以在開發機中通過遠程shell的方式使用logcat命令查看日誌輸出: $ adb logcat如果是在遠程shell中可直接使用命令:# logcat過濾日誌輸出每一條日誌消息都有一個標記和優先順序與其關聯。 標記是一個簡短的字元串,用於標識原始消息的來源 (例如"View" 來源於顯示系統)。 優先順序是下面的字元,順序是從低到高: V — 明細 (最低優先順序) ,D — 調試I — 信息,W — 警告,E — 錯誤,F — 嚴重錯誤S — 無記載 (最高優先順序,沒有什麼會被記載) 通過運行logcat ,可以獲得一個系統中使用的標記和優先順序的列表,觀察列表的前兩列,給出的格式是/。 這里是一個日誌輸出的消息,優先順序是「I」,標記是「ActivityManager」: I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...} 如果想要減少輸出的內容,可以加上過濾器表達式進行限制,過濾器可以限制系統只輸出感興趣的標記-優先順序組合。 過濾器表達式的格式是tag:priority ... ,其中tag是標記, priority是最小的優先順序, 該標記標識的所有大於等於指定優先順序的消息被寫入日誌。也可以在一個過濾器表達式中提供多個這樣的過濾,它們之間用空格隔開。 下面給出的例子是僅輸出標記為「ActivityManager」並且優先順序大於等於「Info」和標記為「MyApp」並且優先順序大於等於「Debug」的日誌: adb logcat ActivityManager:I MyApp:D *:S 上述表達式最後的 *:S 用於設置所有標記的日誌優先順序為S,這樣可以確保僅有標記為「View」(譯者註:應該為ActivityManager,原文可能是筆誤)和「MyApp」的日誌被輸出,使用 *:S 是可以確保輸出符合指定的過濾器設置的一種推薦的方式,這樣過濾器就成為了日誌輸出的「白名單」。 下面的表達是顯示所有優先順序大於等於「warning」的日誌: adb logcat *:W如果在開發用電腦上運行 logcat (相對於運行運程shell而言),也可以通過ANDROID_LOG_TAGS環境變數設置默認的過濾器表達式: export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S" 需要注意的是,如果是在遠程shell或是使用adb shell logcat 命令運行logcat , ANDROID_LOG_TAGS不會導出到模擬器或手機設備上。 控制日誌格式 日誌消息在標記和優先順序之外還有很多元數據欄位,這些欄位可以通過修改輸出格式來控制輸出結果, -v 選項加上下面列出的內容可以控制輸出欄位: brief — 顯示優先順序/標記和原始進程的PID (默認格式) process — 僅顯示進程PID tag — 僅顯示優先順序/標記 thread — 僅顯示進程:線程和優先順序/標記 raw — 顯示原始的日誌信息,沒有其他的元數據欄位 time — 顯示日期,調用時間,優先順序/標記,PID long —顯示所有的元數據欄位並且用空行分隔消息內容 可以使用 -v啟動 logcat來控制日誌格式: [adb] logcat [-v ] 例如使用 thread 輸出格式: adb logcat -v thread注意只能在 -v 選項中指定一種格式。 Viewing Alternative Log Buffers Android日誌系統為日誌消息保持了多個循環緩沖區,而且不是所有的消息都被發送到默認緩沖區,要想查看這些附加的緩沖區,可以使用-b選項,以下是可以指定的緩沖區:radio — 查看包含在無線/電話相關的緩沖區消息events — 查看事件相關的消息main — 查看主緩沖區 (默認緩沖區)b 選項的用法:[adb] logcat [-b ] 例如查看radio緩沖區:adb logcat -b radio adb logcat簡單舉例:1、導入日誌到sd卡 $ adb shell monkey -p your.package.name -v 500 一些常用的參數信息:v命令行的每一個-v將增加反饋信息的級別。Level 0(預設值)除啟動提示、測試完成和最終結果之外,提供較少信息。Level1提供較為詳細的測試信息,如逐個發送到Activity的事件。Level 2提供更加詳細的設置信息,如測試中被選中的或未被選中的Activity。 事件s偽隨機數生成器的seed值。如果用相同的seed值再次運行Monkey,它將生成相同的事件序列。 throttle在事件之間插入固定延遲。通過這個選項可以減緩Monkey的執行速度。如果不指定該選項,Monkey將不會被延遲,事件將盡可能快地被產成。 pct-touch調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置)。 pct-motion調整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的偽隨機事件和一個up事件組成)。 pct-trackball調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊)。 pct-nav調整「基本」導航事件的百分比(導航事件由來自方向輸入設備的up/down/left/right組成)。 pct-majornav調整「主要」導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵) pct-syskeys調整「系統」按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵)。 pct-appswitch調整啟動Activity的百分比。在隨機間隔里,Monkey將執行一個startActivity()調用,作為最大程度覆蓋包中全部Activity的一種方法。 pct-anyevent調整其它類型事件的百分比。它包羅了所有其它類型的事件,如:按鍵、其它不常用的設備按鈕、等等。 約束限制p 如果用此參數指定了一個或幾個包,Monkey將只允許系統啟動這些包里的Activity。如果你的應用程序還需要訪問其它包里的Activity(如選擇取一個聯系人),那些包也需要在此同時指定。如果不指定任何包,Monkey將允許系統啟動全部包里的Activity。要指定多個包,需要使用多個p選項,每個-p選項只能用於一個包。 c如果用此參數指定了一個或幾個類別,Monkey將只允許系統啟動被這些類別中的某個類別列出的Activity。如果不指定任何類別,Monkey將選擇下列類別中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多個類別,需要使用多個-c選項,每個-c選項只能用於一個類別。 調試dbg-no-events設置此選項,Monkey將執行初始啟動,進入到一個測試Activity,然後不會再進一步生成事件。為了得到最佳結果,把它與-v、一個或幾個包約束、以及一個保持Monkey運行30秒或更長時間的非零值聯合起來,從而提供一個環境,可以監視應用程序所調用的包之間的轉換。 hprof設置此選項,將在Monkey事件序列之前和之後立即生成profiling報告。這將會在data/misc中生成大文件(~5Mb),所以要小心使用它。 ignore-crashes通常,當應用程序崩潰或發生任何失控異常時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。 ignore-timeouts通常,當應用程序發生任何超時錯誤(如「Application NotResponding」對話框)時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。 ignore-security-exceptions通常,當應用程序發生許可錯誤(如啟動一個需要某些許可的Activity)時,Monkey將停止運行。如果設置了此選項,Monkey將繼續向系統發送事件,直到計數完成。 kill-process-after-error通常,當Monkey由於一個錯誤而停止時,出錯的應用程序將繼續處於運行狀態。當設置了此選項時,將會通知系統停止發生錯誤的進程。注意,正常的(成功的)結束,並沒有停止啟動的進程,設備只是在結束事件之後,簡單地保持在最後的狀態。 monitor-native-crashes監視並報告Android系統中本地代碼的崩潰事件。如果設置了--kill-process-after-error,系統將停止運行。
J. 在Android開發中,Logcat是什麼
最後介紹一下Android的Log工具LogCat。
首先在Eclipse中選擇Windows > Show View > Other... > Android > LogCat,確定後會出現LogCat顯示框,用戶添加的Log將會在這里顯示。使用時直接在代碼中插入「Log.i("info","this is a log");」,那麼在執行到該語句時,LogCat顯示框中將出現「this is a log」。
在Eclipse中安裝ADT和android sdk包之後,運行以開發的android程序時,在LogCat窗口中會顯示出一系列的信息,這些信息是每一個程序通過Dalvik虛擬機所傳出的實時信息,可以方便我們對程序的了解。
在log窗口中,每條信息都包含五個部分,Time,標題空白,pid,tag和Message。
1、Time
表示執行的時間,這個信息對於學習生命周期,分析程序運行的先後順序特別有用。
2、標題空白的列
表示的是信息的種類,分為V,D,I,W,E五種。
V:verbose,顯示全部信息
D:Debug,顯示調試信息
I:Info,顯示一般信息
W:Warming,顯示警告信息
E:Error,顯示錯誤信息
可以通過點擊LogCat上面的用圓圈括起來的V,D,I,W,E來改變顯示的范圍。比如選擇了W,那就只有警告信息和錯誤信息可以顯示出來了。
3、pid
表示程序運行時的進程號
4、tag
標簽,通常表示系統中的一些進程名,比如我們運行helloworld程序的話,就會看到activitymanager在運行。
5、Message
表示進程運行時的一些具體信息,比如我們運行helloworld程序的話,就會看到starting activity...helloWorld的字樣
可以輸出LogCat的信息到文本文件中,以方便分析。在下拉框中選擇輸出選擇的信息就可以了。
下面是輸出到文件中的啟動helloWorld程序時的一條信息的例子,分別用5個下劃線標出了上面介紹的內容:
05-20 15:46:10.129: INFO/ActivityManager(60): Starting activity: Intent { act=android.intent.action.MAIN cat=
[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.android.helloworld/.HelloWorld }
6、Filter的使用
可以在Filter中輸入篩選信息,使LogCat中只現實我們需要分析的信息。比如我們只想看和HelloWorld相關的信息,就可以在
Filter中輸入HelloWorld,這樣只有Message 中包含HelloWorld的內容才會顯示出來。
7、LogCat中信息不能顯示
上面說了這么多關於logCat的使用,可能LogCat中根本就什麼信息都沒有顯示!沒關系,只要在Eclipse中選擇window-
>show view->other->android->devices就可以 了。
8、在LogCat中輸出程序的運行信息
a、在程序中導入相應的包:import android.util.Log;
b、在需要輸出信息的函數中增加相關的調試代碼:Log.i("hi world","oncreate");
方法i是Log類的靜態方法,可以直接使用,我們看著各類的定義可以看到,它提供了多種輸出方法,分別對應我們上面提到的V,D,I,W,E。用哪個方法就決定了輸出的類型,這里用i,表示輸出的是information。
這個方法中的第一個參數就是要顯示在Tag那一欄的內容,把這條語句加到OnCreate方法中,執行時LogCat中就會顯示如下的信息: 05-22 21:58:22.894 I 3910 hi world onCreate
9、創建新的Filter
有時候只想看我們程序中用Log類的相關方法輸出的各種信息,這時就可以考慮新建一個過濾器。點擊LogCat的右上角的「+」號,可以創建一個新的過濾器。比如我們在by Log Tag的選項中填入上面程序輸出的"hi world"這個tag。這樣再運行時在我們新創建的Filter中就只顯示hi world這個tag標記出來的信息了。
Android開發中的logcat工具使用詳解--------
logcat是Android中一個命令行工具,可以用於得到程序的log信息。
logcat使用方法如下所示:
logcat [options] [filterspecs]
logcat的選項包括:
-s 設置過濾器,例如指定 '*:s'
-f <filename> 輸出到文件,默認情況是標准輸出。
-r [<kbytes>] Rotate log every kbytes. (16 if unspecified). Requires -f
-n <count> Sets max number of rotated logs to <count>, default 4
-v <format> 設置log的列印格式, <format> 是下面的一種:
brief process tag thread raw time threadtime long
-c 清除所有log並退出
-d 得到所有log並退出 (不阻塞)
-g 得到環形緩沖區的大小並退出
-b <buffer> 請求不同的環形緩沖區 ('main' (默認), 'radio', 'events')
-B 輸出log到二進制中。
過濾器的格式是一個這樣的串:
<tag>[:priority]
其中 <tag> 表示log的component, tag (或者使用 * 表示所有) , priority 如下所示:
V Verbose
D Debug
I Info
W Warn
E Error
F Fatal
S Silent
事實上logcat的功能 是由Android的類android.util.Log決定的,在程序中log的使用方法如下所示:
Log.v() -------------------- VERBOSE
Log.d() -------------------- DEBUG
Log.i() -------------------- INFO
Log.w() -------------------- WARN
Log.e() -------------------- ERROR
以上log的級別依次升高,DEBUG信息應當只存在於開發中,INFO, WARN,ERROR這三種log將出現在發布版本中。
對於JAVA類,可以聲明一個字元串常量TAG,Logcat可以根據他來區分不同的log,例如在計算器(Calculator)的類中,定義如下所示:
public class Calculator extends Activity {
/* ...... */
private static final String LOG_TAG = "Calculator";
private static final boolean DEBUG = false;
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
/* ...... */
由此,所有在Calculator中使用的log,均以"Calculator"為開頭。
例如使用方法如下所示:
# logcat &
< 得到一個log片段 >
W/KeyCharacterMap( 130): No keyboard for id 0
W/KeyCharacterMap( 130): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
I/ActivityManager( 52): Displayed activity com.android.contacts/.: 983 ms
I/ARMAsse mbler( 52): generated scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) at [0x25c978:0x25ca44] in 1764174 ns
I/ARMAssembler( 52): generated scanline__00000077:03515104_00000001_00000000 [ 46 ipp] (65 ins) at [0x25d1c8:0x25d2cc] in 776789 ns
D / dalvikvm ( 130 ): GC freed 834 objects / 81760 bytes in 63ms
D/dalvikvm( 52): GC freed 10588 objects / 425776 bytes in 94ms
其中W/I/D 表示log的級別,「dalvikvm 」「ARMAssembler 」等是不同組件(component)的名稱,後面括弧裡面的數字 表示了發出log的進程號。
使用技巧:
1.使用logcat &在後台運行
2.使用-d得到所有log
3.使用-f或者重定向(>和>>)輸出到文件
4.使用-s設置過濾器,得到想要的log。
當然,最重要的還是在程序中加入恰當的log.
許多初次接觸Android開發的朋友會遇到調試的問題,如何能夠根據錯誤提示迅速的找到「出事地點呢」?在Eclipse+ADT的開發環境中沒有好的直接跟蹤對象內容的方法,通過使用android.util.Log類可以幫助你自己查找錯誤和列印系統日誌消息。它是一個進行日誌輸出的API,我們在Android 程序中可以隨時為某一個對象插入一個Log,然後在DDMS中觀察Logcat的輸出是否正常。
android.util.Log常用的方法有以下5個:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根據首字母對應VERBOSE,DEBUG,INFO, WARN,ERROR。當我們在DDMS進行調試時他們的區別並不大,只是顯示的顏色不同,但通過Logcat的過濾器我們可以過濾顯示某類的,一般對於執行錯誤的斷點,下在Log.e比較合適。但是Android開發網根據規范建議VERBOSE,DEBUG信息應當只存在於開發中,最終版本只可以包含 INFO, WARN,ERROR這三種日誌信息。在實際使用中,我們最好為每一個類聲明一個字元串常量TAG,這樣在Logcat中我們可以容易區分不同的類的日誌。例如:
private static final String TAG = "MyActivity";
接下來我們就可以用Log隨心所欲的觀察Android代碼中的每個細節:Log.e(TAG, "android123.com.cn"); 但是要記住這個Log類的參數都是String類型的。