logcat命令詳解【一】


Android日志系統提供了記錄和查看系統調試信息的功能。日志都是從各種軟件和一些系統的緩沖區中記錄下來的,緩沖區可以通過logcat命令來查看和使用.

在使用 logcat之前,請確保手機的 USB調試模式已經開啟,可以通過" Setting->Application->Development->USB debugging"來開啟。
logcat本身是android的 shell的一個命令,你可以通過“ adb shell”進入 shell后執行logcat命令,也可以通過" adb logcat"直接運行。
語法:
[adb] logcat [<option>] ... [<filter-spec>] ...
選項:
-b <buffer> 指定要查看的日志緩沖區,可以是system,events ,radio,main . 默認值是system和main 。
-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 
參數<filter-spec>
參數<filter-spec>用於對某類的tag的日志輸出進行過濾。每一個輸出的Android日志信息都有一個tag和它的優先級.
日志的標簽是系統部件原始信息的一個簡要的標志。這個tag就是Log.i,Log.d,Log.i,Log.w,Log.e,Log.wtf系列函數中的tag.
對於System.out.print系列函數所對於的tag,其實就是"System.out"
<filter-spec>以“tag:priority”的形式來對日志輸出進行過濾的
優先級priority有以下幾種,按照從低到高順利排列如下:
V — Verbose (lowest priority) 對應於Log.i()系列函數
D — Debug 對應於Log.d()系列函數
I — Info 對應於Log.i()系列函數
W — Warning 對應於Log.w()系列函數
E — Error 對應於Log.e()系列函數
F — Fatal 對應於Log.wtf()系列函數
S — Silent (highest priority, on which nothing s ever printed)
在運行logcat的時候在前兩列的信息中你就可以看到 logcat 的標簽列表和優先級別,它是這樣標出的:<priority>/<tag> .
<filter-spec>中的優先級是指顯示該優先級即其以上優先級得日志。比如對於robin:D表示顯示tag為robin的所有Debug及其以上優先級的日志。<filter-spec>只是的針對某類的tag的日志進行過濾,如果有多個針對同一個tag的過濾的話,以最后一個為准。另外對於tag,可以使用通配符。對於在tag中沒有使用統配符的<filter-spec>,我稱它為顯式的日志過濾器;而對於在tag中使用統配符的,我稱它它為隱式的日志過濾器。如果這兩種過濾器有對着同一個tag的過濾的話,以顯示的日志過濾器為准。如果是同一種的話(顯式/隱式),以后一個為准。
因為<filter-spec>只是指明了對某一類tag應該進行如何過濾,它沒說明的其他tag,將采用系統默認的方式(*:V),即全部輸出。我們可以通過選項"-s"來設置<filter-spec>中沒有說明的tag來都不輸出,相當於"*.S"
實例1:
adb logcat -s robin:i
這樣將顯現tag為robin的Info及以上優先級的所有的日志。該命令等同於 adb logcat robin:i *:S
-b 選項
該選項用於指定要操作的日志緩沖區,可以是system,events ,radio,main .它們分別對應/dev/log文件夾下的system,events ,radio,main日志文件 。系統默認的是system和main 。該選項可以出現多次,以指定多個日志緩沖去。
比如:
adb logcat -b system -b main -b events -b radio -s robin:i
日志輸出的開頭幾行說明了你當前查看的哪些日志緩沖區,比如上面的語句的前幾行就是:
--------- beginning of /dev/log/radio
--------- beginning of /dev/log/events
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
其實“ adb logcat -s robin:i”相當於“ adb logcat -b system -b main -s robin:i”。我們的Log.i,Log.d,Log.i,Log.w,Log.e,Log.wtf系列函數及System.out.print系列函數以及System.erro.print系列都輸出到了main緩沖區。因此我們一般用默認的就足夠了。
events緩沖區對應的日志文件/system/etc/event-log-tags,使用 android.util.EventLog生成的日志就輸出到該緩沖區。
android.database.sqlite.SQLiteDatabase的logTimeStat()函數就是使用EventLog來進行日志輸出的
-c 選項
該選項用於清空你所指定的日志緩沖區。應該就是清除其對應的日志文件
-s 選項
該選項將把tag的默認過濾級別設置為silent,這樣tag默認就不顯示。系統把tag的默認過濾級別是設置為Verbose,這樣其tag默認就是要顯示的。
-f 選項
該選項指定輸出日志信息的<filename> ,默認是stdout . 但是這里的文件是指android系統上的文件。如果我們想把日志輸出到本地window系統的話,請采用如下形式的命令:
adb logcat -s robin:i>1.log
這樣日志就輸出了你的window的當前目錄的1.log文件中。
-v 選項
日志信息包括了許多元數據域包括標簽和優先級。可以通過-v選項可以用來指定日志的輸出格式,以顯示出特定的元數據域。
brief — Display priority/tag and PID of originating process (the default format).顯示prority/tag,產生日志的進程的id,和日志消息本身。它是日志默認的輸出格式。
process — Display PID only.顯示priority,產生日志的進程的id,和日志消息本身
tag — Display the priority/tag only.顯示prority/tag,和消息本身
thread — Display process:thread and priority/tag only.顯示priority,線程和日志消息本身
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.顯示產生日志的時間,prority/tag,產生日志的進程Id,和日志消息本身。
long — Display all metadata fields and separate messages with a blank lines.顯示產生日志的時間,prority/tag,產生日志的進程Id,和日志消息本身。但是日志消息本身另其一行進行顯示。每個日志之間空一行。
當啟動了logcat ,你可以通過-v 選項來指定輸出格式:
[adb] logcat [-v <format>]
實例2:
adb logcat -v time -s robin:v
注意是通過-v 選項來設置輸出格式.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM