Timber: Android日志記錄


前言:Log日志在Android項(xiàng)目開(kāi)發(fā)中的作用非常重要,但項(xiàng)目越做越大,開(kāi)發(fā)者會(huì)面臨很多問(wèn)題,比如管理各種不同的Log,不同版本控制是否輸入Log等。Timber是一個(gè)輕量級(jí)的第三方庫(kù),能夠幫助開(kāi)發(fā)者更好的使用Android Log。


面臨問(wèn)題
  1. 項(xiàng)目使用Log規(guī)范不統(tǒng)一,例如:關(guān)于okhttp的實(shí)現(xiàn)使用了Logging Interceptor輸出log,關(guān)于rxjava的實(shí)現(xiàn)使用了onError,其他使用了Android Log機(jī)制
  2. 項(xiàng)目開(kāi)發(fā)時(shí),為了方便調(diào)試,需要輸出Log,但發(fā)布后,Log中包含很多項(xiàng)目相關(guān)的信息,如果全部暴露會(huì)有安全隱患,但完全刪除也不利于發(fā)生問(wèn)題后的查看調(diào)試,因此需要一個(gè)開(kāi)關(guān),關(guān)閉開(kāi)關(guān)則不能輸出log,打開(kāi)開(kāi)關(guān)則可以輸出log

Timber 介紹

Timeber的使用主要通過(guò)添加Tree實(shí)例,添加Tree實(shí)例可以通過(guò)方法Timber.plant完成。實(shí)例化Tree需要盡量早,推薦在項(xiàng)目Application的```onCreate()````方法中完成。

其中,DebugTree自動(dòng)實(shí)例化,是Timber中已經(jīng)實(shí)現(xiàn)了tree的類(lèi),可直接拿來(lái)用,并在使用他的類(lèi)中以類(lèi)名為其TAG,但是其他的Tree不會(huì)自動(dòng)實(shí)例化,需要進(jìn)行手動(dòng)實(shí)現(xiàn)擴(kuò)展Timber.Tree實(shí)現(xiàn)。

下載

在build.gradle中

compile 'com.jakewharton.timber:timber:4.5.1'
注冊(cè)

在onCreate()中

if (BuildConfig.DEBUG) {
      Timber.plant(new Timber.DebugTree());
 } else {
      Timber.plant(new CrashReportingTree());
}

private static class CrashReportingTree extends Timber.Tree {
    @Override 
     protected void log(int priority, String tag, String message, Throwable t) {

     }
}
使用
Timber.tag("activityName");
Timber.d("Activity Created");
好處
  • 不再重復(fù)使用TAG。之前使用Log方法每次使用都需要定義并傳入一個(gè)TAG,在Timber中,若使用DebugTree,默認(rèn)為當(dāng)前類(lèi)類(lèi)名,若使用自定義Tree,直接定義一次,到處使用,不需重復(fù)設(shè)置
  • 在打Timber調(diào)用處,不僅可以只輸出Log,還可以執(zhí)行其他操作。比如:存到數(shù)據(jù)庫(kù),進(jìn)行輸出,Socket傳輸,甚至顯示到UI界面上等,只需要自定義Tree,并將對(duì)應(yīng)邏輯在log(int priority, String tag, String message, Throwable t)方法中實(shí)現(xiàn)
  • 統(tǒng)一項(xiàng)目Log日志方法,輸出形式,輸出時(shí)間,更加符合面向?qū)ο笏枷?/li>

isLoggable 方法作為開(kāi)關(guān)控制Log輸出

語(yǔ)法
boolean isLoggable (String tag, int level)

通過(guò)指定標(biāo)簽指定級(jí)別,控制日志是否顯示。默認(rèn)級(jí)別為Info,表示高于或等于Info級(jí)別的日志都可以顯示。

設(shè)置
  1. 遠(yuǎn)程設(shè)置系統(tǒng)屬性更改默認(rèn)級(jí)別
adb -d shell setprop log.tag.<YOUR_LOG_CAT> <LEVEL>
  1. 系統(tǒng)目錄/data/local.prop,創(chuàng)建一個(gè)local.prop文件,文件內(nèi)容:
log.tag.<YOUR_LOG_TAG>=<LEVEL>
Level級(jí)別
LEVEL NUMBER
VERBOSE 2
DEBUG 3
INFO 4
WARN 5
ERROR 6
ASSERT 7
例子

在自定義Tree中的log方法中進(jìn)行控制,若為Debug環(huán)境下,可以產(chǎn)出log;若為Release環(huán)境,且打開(kāi)開(kāi)關(guān),則可以產(chǎn)生log;若為Release環(huán)境,且關(guān)閉開(kāi)關(guān),則不可產(chǎn)生log。

  1. Java代碼如下


  2. 命令行中

若執(zhí)行如下命令,則打開(kāi)開(kāi)關(guān),可以產(chǎn)生log

adb -d shell setprop log.tag.MyTag DEBUG

若執(zhí)行如下命令,則關(guān)閉開(kāi)關(guān),不可產(chǎn)生log

adb -d shell setprop log.tag.MyTag WARN
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • 本文會(huì)不定期更新,推薦watch下項(xiàng)目。如果喜歡請(qǐng)star,如果覺(jué)得有紕漏請(qǐng)?zhí)峤籭ssue,如果你有更好的點(diǎn)子可以...
    天之界線(xiàn)2010閱讀 7,345評(píng)論 11 29
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評(píng)論 6 342
  • 那是2014年春節(jié)長(zhǎng)假之后的正月初十,我獨(dú)自在一家小飯店吃飯。臨桌有幾個(gè)年輕人邊吃邊聊,當(dāng)談到節(jié)日期間參加同學(xué)聚會(huì)...
    奇翔閱讀 282評(píng)論 0 1

友情鏈接更多精彩內(nèi)容