android中的Log問題

摘要(Abstract)

必備技能,使用日誌工具 LogCat,並嘗試解決真機調試沒有日誌的問題。

日誌工具(LogCat)

日誌在任何項目的開發過程中都會起到非常重要的作用,在 Android 項目中如果你想要查看日誌則必須要使用 LogCat 工具。

在 Android Studio 最下方的 Status Bar 中找到 6:Android,點擊她。如下圖

LogCat 出現了,如下圖

  1. 這裏選擇 Devices,當然一般來說不需要選擇,如果只連接了一個設備的話。
  2. 這裏選擇 Log level,日誌級別。包括:Verbose、Debug、Info、Warn、Error、Assert。以上級別依次升高。
  3. 這裏選擇過濾器,默認會自動生成一個過濾條件是 Package name 是項目包名的過濾器。

使用 LogCat

Android 中的日誌工具類是 Log(android.util.Log),提供瞭如下的幾個方法供我們打印日誌。

  1. Log.v() 對應 Verbose
  2. Log.d() 對應 Debug
  3. Log.i() 對應 Info
  4. Log.w() 對應 Warn
  5. Log.e() 對應 Error
  6. Log.wtf() 在輸出日誌的同時,會把此處代碼此時的執行路徑(調用棧)打印出來。

介紹完畢,我們來演戲一下吧。打開 HelloWorldActivity,在 onCreat()方法中添加一行打印日誌的語句,爲了讓日誌明顯一點我加了一些下劃線,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hello_world);
    Log.d("HelloWorldActivity","______________onCreate execute______________");
}

Log.d() 方法中傳入了兩個參數,第一個參數是 tag,一般傳入當前的類名就好,主要用於對打印信息進行過濾。第二個參數是 msg,即想要打印的具體內容。

現在重新運行一下項目,點擊工具欄中的綠色小箭頭,或者按 Shift+F10。等程序運行完畢,使用模擬器的戰友可能已經能看到日誌了,如下圖

使用真機的戰友,可能看到的還是空蕩蕩的LogCat。需要做這麼一件事,菜單欄 Tools → Android → Enable ADB Integration 把這個勾上,然後再次運行。

這次應該能看到日誌了吧?看看能不能找到我們想要打印出來日誌信息。過濾器中一定要選中 app:com.xxxx.helloworld 哦。如果有日誌,但是找不到我們想要打印的日誌 HelloWorldActivity: ______________onCreate execute______________,那麼恭喜你,你用的真機貌似跟我的一樣比較高端,是不是有什麼黑科技。

我們來嘗試解決這個問題。

  1. 手機的開發人員選項打開了麼,其中的 USB 調試打開了麼?搞定他們並重新運行,是否能找到我們的日誌?否,轉到 2。
  2. 日誌中是否有這樣 could not disable core file generation for pid 3963: Operation not permitted 的信息麼? 是,轉到 3;否,那我也不知道怎麼搞,或者你可以把日誌貼到評論中我看看。
  3. 是華爲手機麼?是,轉到 4;否,你可以參考 4 自己 Google Baidu 一下。
  4. 在撥號界面輸入:*#*#2846579#*#* 進入測試菜單界面,然後
    Project Menu → 後臺設置 → LOG設置
    LOG 開關 → LOG 打開        LOG 級別設置 → VERBOSE
    Dump&Log → 全部選中
    重啓手機,重啓 Android Studio。
    PS:根據系統版本的不同,可能會有些許差異。

重啓完畢,打開 Android Studio,運行項目,這下應該能找到我們的日誌了。如果還沒找到,對不起洗洗睡吧,我只能幫到這兒了。(或者你可以換個手機)

定製過濾器(Filter)

點擊過濾器那個下拉框,選擇 Edit Filter Configuration,在彈出的對話框中點擊左上角的加號新創建一個 Filter。如下圖

含義如下:

  • Name:Filter 名稱
  • by Log Tag: 通過日誌的 tag 過濾
  • by Log Message:通過日誌的 msg 內容過濾
  • by Package Name:通過包名過濾
  • by PID:通過PID過濾
  • by Log Level:通過日誌等級過濾
  • regex:表示可以使用正則表達式進行匹配

以上過濾條件可以組合。

我建了一個data的過濾器,過濾條件是 tag 等於 data。將 Filter 選擇爲 data,我們的日誌不見了,因爲匹配不到 tag 等於 data 的日誌。

現在去把我們在 onCreate() 方法中的日誌的 tag 改爲 data。如下所示:

Log.d("data","______________onCreate execute______________");

然後重新運行,將 Filter 選擇爲 data,我們的日誌出現了。當然還可能會有一些奇奇怪怪的日誌也出現了,仔細看看 tag 中都包含有 data。

抑制不住的好奇心

看看這個 Android Studio 最下方的 Status Bar,我們找到 LogCat 的地方,如下圖

難道你們不好奇爲什麼 Android 前面有個 6 麼?難道是因爲用了 LogCat 你的 Android 開發水平就會 666666666?

不管發生什麼事件,我相信真相只有一個,如下圖:

OK,收工了。

http://blog.csdn.net/copy_yuan/article/details/51460718

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章