天天看點

Android的logcat日志工具使用詳解一、環境描述二、logcat指令的基本用法三、過濾日志輸出四、指定日志輸出格式五、檢視可用的日志緩沖區六、檢視标準輸出和标準錯誤七、logcat指令選項八、在kvm環境中使用logcat

logcat是android中一個指令行工具,可以用于得到程式的log資訊。android日志系統提供了記錄和檢視系統調試資訊的功能。日志都是從各種軟體和一些系統的緩沖區中記錄下來的,緩沖區可以通過 logcat 指令來檢視和使用。

主控端os:centos 6.6 x86_64

主控端ip:192.168.1.119

虛拟機os:android-x86 4.4-r2

虛拟機ip:192.168.1.126

網絡方式:bridge

android sdk版本:android-sdk_r24.2-linux

kvm版本:qemu pc emulator version 0.12.1 (qemu-kvm-0.12.1.2-2.448.el6_6.3)

在主控端上使用:

在虛拟機或手機上使用:

每一條輸出的android日志資訊都有一個标簽和優先級。

日志的标簽是系統部件原始資訊的一個簡要的标志。(比如:“view”就 是檢視系統的标簽)。

日志優先級有下列幾種,按照從低到高順序排列:

<code>v</code> — verbose(最詳細的日志,最低優先級)

<code>d</code> — debug(調試)

<code>i</code> — info(資訊)

<code>w</code> — warning(警告)

<code>e</code> — error(錯誤)

<code>f</code> — fatal(緻命錯誤)

<code>s</code> — silent(靜默,最高優先級,不會輸出任何資訊)

在運作logcat的時候在前兩列的資訊中你就可以看到 logcat 的标簽清單和優先級别,它是這樣标出的:<code>&lt;priority&gt;/&lt;tag&gt;</code>。

下面是一個logcat輸出的例子,它的優先級是<code>i</code>,标簽是<code>activitymanage</code>:

為了讓日志輸出能夠展現管理的級别,你還可以用過濾器來控制日志輸出,過濾器可以幫助你描述系統的标簽等級。

過濾器語句按照下面的格式描述:

其中,<code>tag</code>表示标簽,<code>priority</code>表示相應标簽日志的最低優先級。

從上面的tag的中可以得到日志的标簽和優先級。你可以在過濾器中多次描述<code>tag:priority</code>。

請檢視以下使用執行個體:

上述執行個體表示支援所有的日志資訊,除了标簽為<code>“activitymanager”</code>和優先級為<code>“info”</code>以上的日志,以及标簽為<code>“myapp”</code>和優先級為<code>“debug”</code>以上的日志。上述執行個體中的最後的元素<code>*:s</code>,意味着将所有其他标簽的優先級設定為<code>“silent”</code>,所有日志隻顯示有<code>“activitymanager”</code>和<code>“myapp”</code>标簽的。<code>*:s</code>的另一個用處是能夠確定日志輸出的時候是按照過濾器的說明限制的,也讓過濾器作為一項輸出到日志中。

下面的過濾語句隻顯示優先級為“warning”或更高優先級的日志資訊:

如果你在主控端上運作logcat,相比起在遠端adb shell端,你還可以為環境變量<code>android_log_tags</code>指定一個參數來設定預設的過濾器:

注意,如果通過遠端shell運作<code>logcat</code>指令,或者運作<code>adb shell logcat</code>指令,那麼将不能使用<code>android_log_tags</code>中設定的過濾器。

日志資訊包括很多中繼資料域,例如标簽和優先級。可以修改日志的輸出格式,指定顯示特定的中繼資料域。可以通過<code>-v</code> 選項得到格式化輸出日志的相關資訊:

<code>brief</code> — 顯示源程序的優先級/标簽和pid(預設格式)。

<code>process</code> — 隻顯示pid。

<code>tag</code> — 隻顯示優先級/标簽。

<code>thread</code> — 隻顯示程序 : 線程和優先級/标簽。

<code>raw</code> — 顯示原始的日志消息,沒有其他的中繼資料域。

<code>time</code> — 顯示源程序的日期、調用時間、優先級/标簽和pid。

<code>long</code> — 顯示所有的中繼資料域和單獨的消息,帶有一個空行。

啟動logcat時,你可以通過<code>-v</code>選項來指定日志輸出格式:

以下執行個體使用<code>thread</code>來指定日志輸出格式:

注意,你隻能使用<code>-v</code>選項來指定日志輸出格式的選項。

我們在使用logcat抓取日志的時候,可以指定buffer,來請求不同的環形緩沖區 ('main', 'system', 'radio', 'events',預設為"<code>-b main -b system</code>"),因為android日志系統為日志消息保持了多個循環緩沖區,而且不是所有的消息都被發送到預設緩沖區,要想檢視這些附加的緩沖區,可以使用<code>-b</code>選項,以下是可以指定的緩沖區:

<code>radio</code> — 檢視包含在無線/電話相關的緩沖區消息。

<code>events</code> — 檢視事件相關的日志消息。

<code>main</code> — 檢視主緩沖區(預設緩沖區)。

<code>system</code> — 檢視系統相關的日志消息。

<code>-b</code>選項的使用方法如下所示:

以下執行個體表示如何檢視包含無線和電話的日志消息:

在預設狀态下,android系統會将标準輸出和标準錯誤(<code>system.out</code>和<code>system.err</code>)輸出到<code>/dev/null</code>,在運作dalvik vm的程序中,有一個系統可以備份日志檔案。在這種情況下,系統會用标準輸出和标準錯誤,以及優先級 i 來記錄日志消息。

通過以下方法可以指定日志輸出的路徑,停止運作的模拟器/裝置,然後使用<code>setprop</code>指令遠端輸入日志:

選項

描述

-b &lt;buffer&gt;

請求可選擇的環形緩沖區,main、system、radio或events。可以使用多個-b參數,輸出的結果是交錯的。預設值為-b main -b system。

-c

清除全部日志,然後退出。

-d

轉儲日志,然後退出(不會阻塞)。

-f &lt;filename&gt;

将日志輸出至檔案。預設為标準輸出(stdout)。

-g

擷取日志環形緩沖區的大小,然後退出。

-n &lt;count&gt;

通過指定輪轉日志的最大數量,預設為4。

-r &lt;kbytes&gt;

每千位元組就輪轉一次日志。若沒有指定,則預設值為16。需要使用-f選項。

-s

"将預設的過濾器設定為靜默。

就像是指定過濾器描述符“*:s”。

-v &lt;format&gt;

"設定日志的輸出格式,其中&lt;format&gt;是下面其中之一:

brief、process、tag、thread、raw、time、threadtime、long"

-t &lt;count&gt;

隻輸出最近幾行的日志,行數由&lt;count&gt;指定(隐含-d選項)。

-b

以二進制方式輸出日志。

在virt-manager的圖形界面中啟動android-x86虛拟機,如下圖所示:

Android的logcat日志工具使用詳解一、環境描述二、logcat指令的基本用法三、過濾日志輸出四、指定日志輸出格式五、檢視可用的日志緩沖區六、檢視标準輸出和标準錯誤七、logcat指令選項八、在kvm環境中使用logcat

在shell中運作<code>ps aux | grep kvm</code>指令,可以看到這個虛拟機的程序詳情,如下圖所示:

Android的logcat日志工具使用詳解一、環境描述二、logcat指令的基本用法三、過濾日志輸出四、指定日志輸出格式五、檢視可用的日志緩沖區六、檢視标準輸出和标準錯誤七、logcat指令選項八、在kvm環境中使用logcat

在shell中運作以下指令:

若指令傳回如下圖所示,則表示連接配接成功:

Android的logcat日志工具使用詳解一、環境描述二、logcat指令的基本用法三、過濾日志輸出四、指定日志輸出格式五、檢視可用的日志緩沖區六、檢視标準輸出和标準錯誤七、logcat指令選項八、在kvm環境中使用logcat

若指令傳回和下圖中類似,則表明已經看到android虛拟機中的日志消息:

Android的logcat日志工具使用詳解一、環境描述二、logcat指令的基本用法三、過濾日志輸出四、指定日志輸出格式五、檢視可用的日志緩沖區六、檢視标準輸出和标準錯誤七、logcat指令選項八、在kvm環境中使用logcat

繼續閱讀