logcat命令詳解

来源:互联网 发布:db2数据库的一些操作 编辑:程序博客网 时间:2024/05/07 13:31
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有以下幾種,按照從低到高順利排列如下:
— 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日志文件 。系統默認的是systemmain 。該選項可以出現多次,以指定多個日志緩沖去。
比如:
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.SQLiteDatabaselogTimeStat()函數就是使用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 選項來設置輸出格式.

原创粉丝点击