天天看點

Android Logger架構,“憂秀”碼農列印Log的正确姿勢

日志幾乎是作為碼農的我們每天都要打交道的對象,出bug的時候,刷滿螢幕的Log中排查,這酸爽......整齊規範的Log資訊能夠讓我們快速得定位問題,提高效率,除此之外還看着心情舒服。

Logger GitHub位址:https://github.com/orhanobut/logger

Logger架構提供了很多實用的功能:

  • 輸出線程資訊
  • 輸出類資訊
  • 輸出方法資訊
  • 輸出格式化的List、Map、Json、Xml
  • 快速定位
  • 日志控制,等....

下面來着官方的圖檔:

Android Logger架構,“憂秀”碼農列印Log的正确姿勢

第一眼看到,真心覺得舒服

使用Logger也很簡單,內建使用也隻是一杯茶的事。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

首先導入依賴庫:

// Logger
    implementation 'com.orhanobut:logger:2.2.0'
           

MyApplication當中初始化:

//日志控制
        Logger.addLogAdapter(new AndroidLogAdapter());
           

當然不能忘記AndroidMainfest.xml中配置MyApplication

使用Logger輸出日志:

// 各種列印
        Logger.d("debug");
        Logger.e("error");
        Logger.w("warning");
        Logger.v("verbose");
        Logger.i("information");
        Logger.wtf("What a Terrible Failure");

        // 列印數組對象
        Logger.d(string);
        // 列印list
        Logger.d(list);
        // 列印map
        Logger.d(map);

        // 列印Json
        Logger.json(json);

        // 列印xml
        Logger.xml(xml);
           

Log顯示:

2018-11-30 15:37:33.300 5383-5383 D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.301 5383-5383 D/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.301 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.301 5383-5383 D/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.301 5383-5383 D/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:63)
2018-11-30 15:37:33.302 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.302 5383-5383 D/PRETTY_LOGGER: │ debug
2018-11-30 15:37:33.302 5383-5383 D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:64)
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: │ error
2018-11-30 15:37:33.302 5383-5383 E/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:65)
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: │ warning
2018-11-30 15:37:33.303 5383-5383 W/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:66)
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: │ verbose
2018-11-30 15:37:33.307 5383-5383 V/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.308 5383-5383 I/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.309 5383-5383 I/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.309 5383-5383 I/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.309 5383-5383 I/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.310 5383-5383 I/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:67)
2018-11-30 15:37:33.310 5383-5383 I/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.310 5383-5383 I/PRETTY_LOGGER: │ information
2018-11-30 15:37:33.313 5383-5383 I/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.313 5383-5383 A/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.313 5383-5383 A/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.313 5383-5383 A/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.313 5383-5383 A/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.314 5383-5383 A/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:68)
2018-11-30 15:37:33.314 5383-5383 A/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.314 5383-5383 A/PRETTY_LOGGER: │ What a Terrible Failure
2018-11-30 15:37:33.314 5383-5383 A/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.314 5383-5383 D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.314 5383-5383 D/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.314 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:71)
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: │ [array1, array2, array3]
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.315 5383-5383 D/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:73)
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: │ [item1, item3, item2]
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.316 5383-5383 D/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.328 5383-5383 D/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:75)
2018-11-30 15:37:33.328 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.329 5383-5383 D/PRETTY_LOGGER: │ {key1=value1, key2=value2, key3=value3}
2018-11-30 15:37:33.329 5383-5383 D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.335 5383-5383 D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.336 5383-5383 D/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.336 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.336 5383-5383 D/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.336 5383-5383 D/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:78)
2018-11-30 15:37:33.336 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.336 5383-5383 D/PRETTY_LOGGER: │ {
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │   "status": 200,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │   "message": "success",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │   "data": {
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "year": 2018,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "month": 10,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "day": 1,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "lunarYear": 2018,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "lunarMonth": 8,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "lunarDay": 22,
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "cnyear": "貳零壹捌 ",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "cnmonth": "八",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "cnday": "廿二",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "hyear": "戊戌",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "cyclicalYear": "戊戌",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "cyclicalMonth": "辛酉",
2018-11-30 15:37:33.337 5383-5383 D/PRETTY_LOGGER: │     "cyclicalDay": "丙寅",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "suit": "祭祀,冠笄,會親友,拆卸,起基,除服,成服,移柩,啟鑽,安葬,沐浴,捕捉,開光,塑繪",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "taboo": "作竈,祭祀,入宅,嫁娶",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "animal": "狗",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "week": "Monday",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "festivalList": [
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │       "國慶節"
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     ],
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "jieqi": {
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │       "9": "寒露",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │       "24": "霜降"
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     },
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "maxDayInMonth": 29,
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "leap": false,
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "lunarYearString": "戊戌",
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │     "bigMonth": false
2018-11-30 15:37:33.338 5383-5383 D/PRETTY_LOGGER: │   }
2018-11-30 15:37:33.339 5383-5383 D/PRETTY_LOGGER: │ }
2018-11-30 15:37:33.339 5383-5383 D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.801 5383-5383 D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 15:37:33.804 5383-5383 D/PRETTY_LOGGER: │ Thread: main
2018-11-30 15:37:33.804 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.804 5383-5383 D/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 15:37:33.804 5383-5383 D/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:81)
2018-11-30 15:37:33.805 5383-5383 D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ <?xml version="1.0" encoding="UTF-8"?>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ <!--   Copyright w3school.com.cn  --><note>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ <to>George</to>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ <from>John</from>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ <heading>Reminder</heading>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ <body>Don't forget the meeting!</body>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: │ </note>
2018-11-30 15:37:33.806 5383-5383 D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
           

還可以占位符輸出:

// 占位符輸出
        Logger.e("message: %s", "hello");
           
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: │ Thread: main
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: │ MainActivity.onCreate  (MainActivity.java:57)
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: │    MainActivity.showLog  (MainActivity.java:84)
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: │ message: hello
2018-11-30 18:56:35.432 6995-6995 E/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
           

日志控制,日常開發調試,日志的輸出對問題定位,快速掌握程式運作情況起到作用是很重要的;但是,對于釋出的上線軟體,輸出了程式内部日志則會暴露程式内部資訊,嚴重則會遭受到不可逆轉的後果:如資訊洩露,技術暴露,Bug,成為黑客入侵的切入點。

Logger提供日志控制,在Logger初始化的時候進行設定, 重寫AndroidLogAdapter的isLoggable方法,傳回值為BuildConfig.DEBUG(編譯生成,調試為true,打包release版本後為false),也可以傳回自定義的config檔案配置的IS_DEBUG變量值:

// 日志控制
        Logger.addLogAdapter(new AndroidLogAdapter() {

            @Override
            public boolean isLoggable(int priority, @Nullable String tag) {
                // 此處傳回項目配置的日志控制變量
                return BuildConfig.DEBUG;
            }
        });
           

Logger自定義,官方給出來的具體說明:

FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
      .showThreadInfo(false)  // (Optional) Whether to show thread info or not. Default true
      .methodCount(0)         // (Optional) How many method line to show. Default 2
      .methodOffset(7)        // (Optional) Hides internal method calls up to offset. Default 5
      .logStrategy(customLog) // (Optional) Changes the log strategy to print out. Default LogCat
      .tag("My custom tag")   // (Optional) Global tag for every log. Default PRETTY_LOGGER
      .build();

    Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
           

對于Android Studio3.1的小夥伴們,Logger輸出是不整齊的,網上說這是3.1版本的bug,3.2版本已經修複,上面是使用的是3.2版本。

當然,官網也有給出一些IDE設定優化的建議:過濾篩選,取消設定自動換行,以及設定顯示内容

Android Logger架構,“憂秀”碼農列印Log的正确姿勢

類型的Log架構還有

KLog:https://github.com/ZhaoKaiQiang/KLog,

XLog:https://github.com/elvishew/xLog,

LogUtils:https://github.com/pengwei1024/LogUtils

Logger的使用就暫且到這裡了,謝謝!

Android Logger架構,“憂秀”碼農列印Log的正确姿勢