打造最好用的日志庫:Android-PLog

KirCollazo 9年前發布 | 7K 次閱讀 安卓開發 Android開發 移動開發

做Android開發自然離不開日志的打印,從第一個Hello World程序到幾十萬行的大型App,開發用的IDE從Eclipse到Android Studio,編譯系統從ant到gradle,LogCat要算最常用的又最不離不棄的一個工具了。那么日志工具類呢?用什么好?

我只是說標題

好,這篇文章主要是要給我的一個類庫做廣告: Android-PLog

下面有請小明同學與他的老師為我們講解這個庫的需求和使用說明。

引入依賴

小明:老師, Log.d(tag, msg) 好麻煩啊,我只是要打印一個msg看看而已,不想要tag怎么辦啊?

老師:很簡單啊,用 PLog.d(msg) 就好了。

小明:老師, 我這里找不到PLog這個類啊?

老師:在你的build.gradle里加上 compile 'org.mym.plog:android-plog:1.3.0' 就好啦。

小明:build.gradle是什么?

老師:滾出去!

PLog支持JCenter依賴,因此只要加上這么一行依賴就好啦。相信大家對build.gradle文件應該比小明熟悉吧?

初始化和配置

PLog.init(PLogConfig.newBuilder()
.forceConcatGlobalTag(true)
.useAutoTag(true)
//保持內部類信息
.keepInnerClass(true) 
//保持行號信息,點擊可以跳轉源文件
.keepLineNumber(true) 
//單行180,超過自動換行
.maxLengthPerLine(180) 
//release版本自動關閉日志
.controller(new EasyController(BuildConfig.DEBUG, BuildConfig.DEBUG))
.build());
小明:老師,這些配置代碼我得放哪里啊?

老師:當然是 Application 的 onCreate 里面。

小明:不可以在別的地方么?

老師: 當然可以,不過在你調用之前就不會使用你自己的配置啦 。

小明:我為什么需要這樣做配置呢?

老師: 配置都是可選的 ,至于為什么推薦這么寫,后面你就知道了。

空消息打印

小明同學已經很喜歡用不帶tag的打印方式了。

小明:老師,我只想看看某個地方是不是執行了,每次都得去打印一句"PLog.d("Here")"或者"PLog.d("main activity method A executed")",好麻煩啊!

老師:你可以使用 PLog.empty() 方法,什么參數也不用傳。

小明:哇,好方便!可是它只會輸出為 "Here executed" ,我想改成 "我說要有光" ,怎么辦?

老師:你在初始化的時候設置一下 emptyMsg(String) 就好了,順便還可以通過 emptyMsgLevel 修改日志等級哦。

小明:嗯,可是我想讓它在兩個類當中輸出的東西不一樣怎么辦?

老師:滾出去!

PLog的 empty() 方法主要是設計來觀察程序執行路徑的,因此輸出內容一般不需要動態改變哦~~~~

Tips:其實也是可以的,只要重新init一下就好了。

Loggable控制

小明同學用PLog越來越順手了,忽然有一天發現日志太多了。

小明:老師,我忽然不想要這些日志在release版本打出來了怎么辦?

老師:以前你是怎么做的?

小明:搞一個封裝類,release的時候把標記位設置為false就好了。

老師:你回頭看看你的 controller 配置是什么?

小明: EasyController 啰,不是你讓我寫的嘛。參數還傳遞的是 BuildConfig.DEBUG ……啊,我知道了。

小明:不過還有個問題,我想只關閉WARN以下級別的日志怎么辦?

老師:自己去實現 LogController 接口。

無限長字符串打印

小明同學有天收到了個8K的大JSON字符串。

小明:老師你看這個JSON完全沒打印完嘛!

老師:誰讓你以前用的 Log.d ,還不趕緊改過來,用 PLog.d 。

小明:可是這是LogCat的限制啊,超過4K會被截斷, PLog 能解決?

老師: PLog 有個 maxLengthPerLine 選項,超出這個值可以自動換行。 別說超過4K了,就算是2K,你把滾動條從左拖到右不嫌累么?

小明:那傳個什么值給它呢?

老師:一般給個140~220就可以了,看你屏幕顯示得了多少唄。

小明:回頭我就買個寬屏。

參數格式化和Throwable

小明:老師我今天什么消息都不想打印,就想打印一個Exception。以前用的 Log.e(tag, msg, Throwable) ,現在 PLog 里找不到這個方法。

老師:用 Log.objects(Object...) 或者 Log.e(msg, Object...) 都可以。 不僅可以自動格式化參數,如果參數包含Throwable還可以打印堆棧 。

小明的試用報告

  • 支持JCenter, 輕巧零依賴

  • 支持空消息打印(通常用于觀察某處是否執行)

  • 支持無Tag、全局/局部Tag、自動Tag打印

  • 支持變長參數和自動格式化

  • 支持打點計時日志(TimingLog)

  • 可打印Throwable參數, 不影響過濾器

  • 支持顯示行號,Android Studio控制臺點擊可跳轉到源文件對應行, 還可以通過棧幀偏移控制跳轉位置

  • 支持粒度可控的的loggable控制

  • 支持重定向Logger(通常用于本地文件打印、第三方日志接入等)

  • 無限長字符串打印, 同時支持自動換行

ScreenShot.png

 

 

來自:http://www.jianshu.com/p/cf3b749b9efb

 

 本文由用戶 KirCollazo 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!