Windows環境下Android Studio系列5—日誌調試

1. 定製Logcat調試日誌字體顏色

    Logcat是Android開發調試中最經常使用的一個工具,Android Studio 1.2.2中默認對Logcat調試的顏色已經有所區分,但若是你想要定製本身的調試日誌對應的字體顏色,以便更好地區分verbose、debug、error、info、warning等分類信息,那麼下面看看如何來自定義Logcat的提示信息。html

    經過菜單File-->Setting-->Editor->Colors & Fonts->Android Logcat進入,因爲咱們在以前的[2] 「編輯字體設置」中已經設置了myDarcula Scheme,所以會看到以下界面:android

    這裏能夠看到有6種調試級別:Assert、Debug、Error、Info、Verbose、Warning。app

    注意須要先將右邊Use inherited attributes選項去掉打鉤,而後才能夠自定義顏色,此時雙擊右邊Foregound圖標就能夠爲每種分類設定特定的顏色了:ide

                  

    選擇好顏色後在下方該調試級別文字會當即發生變化,很是直觀。工具

2. Logcat過濾選項

    在[3]的第6部分,初次認識了Logcat,下面仔細看看如何來使用Logcat來快速查找關心的日誌信息:字體

    

   左側可看到Logcat對話窗口,右上方可依次看到Log Level過濾選項、搜索過濾輸入框、以及Filter Configuration選項。ui

    

    選擇Edit Filter Configuration,出現「Create New Logcat Filter」窗口,其中可設置一個或多個選項來過濾日誌,併爲這一組過濾參數指定一個Filter Name:spa

     . 可經過正則編寫的Log TAG.net

    . 可經過正則編寫的Log Messagedebug

    . Package Name

    . PID

    . Log Level   

               

   這裏咱們根據TAG和Level設置兩個過濾項,分別命名爲firstActivity與secondActivity:

            

   設置完成後,在右側下拉列表中就能夠看到設置好的兩個過濾項: firstActivity與secondActivity了。

   

3. 代碼中輸出日誌信息

     爲了在代碼中輸出日誌信息,須要使用Log類(import android.util.Log)。一個好的實踐是針對每一個類/活動定義一個TAG常量,例如取當前類/活動的名稱做爲TAG,而後利用log.v, log.d, log.i, log.w, log.e方法輸出日誌。

     這幾個方法的最基本調用方式爲第一個參數爲@tag, 用於標識log消息的sorce,一般使用類或者活動名稱做爲tag, 可在Logcat中基於tag快速過濾。第二個參數爲日誌串@msg,返回值int表示發送日誌消息的字節數。

public static int v(String tag, String msg)
public static int d(String tag, String msg)
public static int i(String tag, String msg)
public static int w(String tag, String msg)
public static int e(String tag, String msg)

注意:當調用

Log.v(TAG, "index=" + i);

時,編譯器使用一個StringBuilder, 至少涉及3次分配操做:StringBuilder自身,buffer, 以及String對象。實際上還有另一次buffer分配與複製,將對垃圾回收GC形成更大的壓力。這也就意味着若是你的log消息被過濾掉,則這裏會對系統有較大的負荷-不斷地作buffer的分配與釋放(That means that if your log message is filtered out, you might be doing significant work and incurring significant overhead.)

   日誌調用舉例,判斷activity建立時以前是否存在狀態信息:

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
    }
}

        代碼中還能夠捕獲異常並輸出調用棧到日誌中:

void someOtherMethod() {
   
try {
       
...
   
} catch (SomeException e) {
       
Log.d(TAG, "someOtherMethod()", e);
   
}
}

注意: 當準備發佈app時須要將debug log消息以及調用棧輸出信息刪除。能夠設置一個DEBUG flag,而後將調試日誌輸出都放在條件語句中。

4. 在Debugger模式下運行應用程序

    待續


參考資料:

[1] Android Studio使用小技巧:自定義Logcat, http://www.jb51.net/article/65515.htm

[2] Windows環境下Android Studio系列3—簡單設置. http://my.oschina.net/1pei/blog/469674

[3] Windows環境下Android Studio系列4—界面介紹, http://my.oschina.net/1pei/blog/469845

[4] Debugging with Android Studio, https://developer.android.com/intl/zh-cn/tools/debugging/debugging-studio.html

[5] class log, https://developer.android.com/intl/zh-cn/reference/android/util/Log.html

[6] 第一行代碼——Android, 郭霖著, 人民郵電出版社, 2014.08.

相關文章
相關標籤/搜索