如何選擇Logger:Android日志系統分析與比較

:## 為什么

為什么要尋找單獨的logger庫?用Andorid原生的Log不好嗎?原生Log長得這樣:

Android Log

先分級,再打上TAG,然后直接輸出。功能很基礎,平時基本夠用。但是在長期的Android開發實踐中,我們會發現,這個功能太基礎了,當:

  • 每次打TAG都要寫下雷同的代碼,太不DRY了。
  • 想打印的數據各種打不出,要么就是打出來一長串看的發暈。
  • 為了找某條log是從哪里打出來的,還要花點功夫。
  • 即使找到了,怎么知道運行時是在哪個線程?
  • 日志去了不再來。在未連接調試的手機上,或者調試中不小心重啟App了,日志就沒了。

不多說了,光這幾個問題就夠我們有充分的理由去尋找一個新的Log系統了。先從最常用的下手,從網上能搜到最常用的Android logger有兩個。

看簡介幫助不大,我們還是真刀真槍用一下,看看這兩個開源庫為什么這么受歡迎,有沒有解決我們的問題。

好Logger應該長什么樣?

動手分析之前,我們要先想想清楚,我們要的好Logger,應該是什么樣的?

打印日志是一門傳統藝術,歷史悠久,打從有編程那年就開始有了。它與單步調試并稱程序調試兩大神技,程序員們因為擁護不同的調試方法,分裂成了兩大陣營:日志派和調試派,兩派互相看不起。調試派說打印日志太沒技術含量,還要到處做標記,看我們調試派,想停哪里點哪里,想看什么看什么,調試器能帶我飛。日志派也不服氣,你能離線調試嗎?你能調試多線程錯誤嗎?你能xxx調試嗎?

好程序員兩種技能都要掌握,現在調試工具越來越好用,單步調試沒有任何困難。但是打印日志仍然是不可或缺的必殺技,尤其是查活系統(運行中軟件)的問題時,如果沒有后臺日志或者用戶手機日志,真是打死也不知道哪里出了問題。

扯完日志的重要性,認真說說我們對日志系統的需求:

  1. 容易打印:無論什么格式的數據,上到自定義類,下到字節流,都能單行代碼給打出來,不用為了打日志寫一堆額外的代碼邏輯。
  2. 格式漂亮:對格式化數據做打印美化,必要時適當做點排版。
  3. 容易篩選:給日志分級和打標簽,就是為了達到這個目的。
  4. 立即定位:每條日志都有兩個位置,代碼中的位置和運行時位置(所在線程)。這兩個位置對快速定位問題很重要。
  5. 靈活設置:日志數量和日志詳細程度是一對矛盾體。大多數情況下,普通的日志就夠我們分析問題了。但是某些情況下,如多線程問題,異步問題,需要打印盡量詳細的信息,這個要能靈活設置。
  6. 日志留存:日志打到屏幕上,說沒就沒。有沒有辦法屏幕上打一份,SD卡上存一份,崩潰信息網站上留一份?這有點類似linux上的tee命令。
  7. 容易上手:本來沒想寫這條,也沒想到上面會列出這么多特性,沒辦法,還是加上個容易上手的指標吧。就是說上邊這些特性,

能做到上面幾點,我們就認為這個日志系統非常好了。注意,我為什么沒提性能要求?因為正式發布版本里,是不會有日志的,起碼不會大量存在,所以性能也就無所謂了,別太差就行。尺子有了,我們就用它來衡量一下Timber和Logger。

Logger分析

這個項目在github上有3000+ star,必有過人之處。

  1. 容易打印:除了普通字符串和含變量字符串,還能直接打印json、xml、異常,通過。
  2. 格式漂亮:的確漂亮,但是過分漂亮了。本來一行的日志給打成了8行,真超值。結果贈品太多,都找不到我想看的那條了。
Logger截圖
  1. 容易篩選:能分級,能自動打tag,能自定義tag。等等,為什么tag不是類名?難道用類名當tag不是普世價值觀嗎?明白了,它的類名和方法名都在日志內容中有了,tag中不用再放一個了。但是有Android Monitor依賴癥的我表示,這讓我怎么篩選一眼望不到頭的日志呀,差評。
  2. 立即定位:能跳轉到文件位置,能看函數名、線程號,通過。
  3. 靈活設置:可以設置,但是設置項似乎不太豐富呀。
  4. 日志留存:不支持。
  5. 容易上手:一行代碼就能用,通過。

Timber分析

這個庫非常簡潔,準確講,它只有一個文件,是Jake Wharton大神自己用的。大神說嫌拷貝來拷貝去太麻煩,才開源成一個庫。

  1. 容易打印:支持普通字符串和含變量字符串。
  2. 格式漂亮:不支持。
  3. 容易篩選:自動用類名當tag,也可以自定義。
  4. 立即定位:不支持。
  5. 靈活設置:支持,但沒什么設置項。
  6. 日志留存:支持。
  7. 容易上手:還是吐槽一下,這個庫的tree和plant是什么鬼?我是讀完它的代碼才明白的。其實跟樹、種樹、木頭沒一毛錢關系,大神只是借種樹這個形象的方法,說日志可以寫到各種地方去。想寫哪里寫哪里,自己plant一個自己實現的Tree就可以了。不種樹就沒有日志。大神太幽默了。

總結

從總評價看,顯然Logger更好,特性更豐富。但是它的排版我實在接受不了。所以項目實踐中,我還是會用Timber。全劇終。

我去,這個結局太不能讓人滿意了,選了半天選了個不好用的,這世界怎么了?

改進

權衡之下,還是改造一下Logger吧。在github上fork了Logger的代碼,針對Logger不滿的地方,加入我的改動。為了保持Logger自身的特點,新改動通過Settings的形式加入,我給Settings加入mode設置。默認是pretty模式,一切用法與輸出結果與原Logger保持一致,可以通過單元測試。如果對PRETTY模式下日志過多有意見,可以啟用brief模式,去除無用的分割線,把默認日志從8行減為4行,保持可讀性和所有信息。如果還嫌多,可以啟動single模式,默認日志從8行壓縮到1行,保持必要信息。代碼庫見https://github.com/oreofish/logger

對這個改進的版本重新評估如下:

  1. 容易打印:同原作。
  2. 格式漂亮:可以方便的在8行的pretty模式,和4行的簡潔模式,和1行的單行模式中切換。
  3. 容易篩選:能分級,能自動打tag,能自定義tag。單行模式下用Android Monitor過濾日志很方便。通過。
  4. 立即定位:同原作,而且重點保持了"能跳轉到文件位置"這個特性,通過。
  5. 靈活設置:可以設置。
  6. 日志留存:暫不支持(我很喜歡這個特性,有空要加上)。
  7. 容易上手:一行代碼就能用,通過。
  8. 彩蛋:寫代碼時經常會加上一些臨時的日志,例如一大串相同的字符,只是為了在日志堆里容易看到。改進版本中加入了預定義的表情字符串IAMHERE1到IAMHERE6,就是為了容易看到。

開源大法好。這,就是我想要的日志系統。我會嘗試提交代碼給Logger官方,雖然由于思路不同,他們可能不會合并我的代碼:)

結論

  • 如果對日志要求不高,簡單用用而已,Android自帶的Log就不錯。
  • 如果厭煩了Android Log,覺得用著不方便,Timber和Logger都是好選擇,Timber只要一個文件。
  • 如果你覺得日志很重要,特別推薦的我的改進版Logger。
  • 還覺得不好?把你的需求說出來,或者自己動手改進,都歡迎。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,740評論 25 708
  • 本文會不定期更新,推薦watch下項目。如果喜歡請star,如果覺得有紕漏請提交issue,如果你有更好的點子可以...
    天之界線2010閱讀 7,189評論 11 29
  • 一.榜單介紹 排行榜包括四大類: 單一框架:僅提供路由、網絡層、UI層、通信層或其他單一功能的框架 混合開發框架:...
    偉子男閱讀 5,255評論 0 161
  • 文/亦翎 九月 你寡斷優柔 是怕看到秋風掃階 還是怕把日子過老 九月 你雖顯得枯燥 卻允我一季繁華 又該讓我用多少...
    21世紀新文閣閱讀 353評論 4 19
  • 吹拍總乏術,奔走亦無門。 輾轉如浮萍,破冰步難行。 人情難練達,道阻志不窮。 乘桴浮海去,終究意難平。 ~~201...
    九郎問道閱讀 451評論 1 1