如何選擇Logger:Android日志系統(tǒng)分析與比較

:## 為什么

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

Android Log

先分級(jí),再打上TAG,然后直接輸出驹针。功能很基礎(chǔ),平時(shí)基本夠用诀艰。但是在長期的Android開發(fā)實(shí)踐中柬甥,我們會(huì)發(fā)現(xiàn),這個(gè)功能太基礎(chǔ)了涡驮,當(dāng):

  • 每次打TAG都要寫下雷同的代碼暗甥,太不DRY了。
  • 想打印的數(shù)據(jù)各種打不出捉捅,要么就是打出來一長串看的發(fā)暈撤防。
  • 為了找某條log是從哪里打出來的,還要花點(diǎn)功夫棒口。
  • 即使找到了寄月,怎么知道運(yùn)行時(shí)是在哪個(gè)線程?
  • 日志去了不再來无牵。在未連接調(diào)試的手機(jī)上漾肮,或者調(diào)試中不小心重啟App了,日志就沒了茎毁。

不多說了克懊,光這幾個(gè)問題就夠我們有充分的理由去尋找一個(gè)新的Log系統(tǒng)了。先從最常用的下手七蜘,從網(wǎng)上能搜到最常用的Android logger有兩個(gè)谭溉。

看簡(jiǎn)介幫助不大柜与,我們還是真刀真槍用一下,看看這兩個(gè)開源庫為什么這么受歡迎嵌灰,有沒有解決我們的問題弄匕。

好Logger應(yīng)該長什么樣?

動(dòng)手分析之前沽瞭,我們要先想想清楚粘茄,我們要的好Logger,應(yīng)該是什么樣的秕脓?

打印日志是一門傳統(tǒng)藝術(shù)柒瓣,歷史悠久,打從有編程那年就開始有了吠架。它與單步調(diào)試并稱程序調(diào)試兩大神技芙贫,程序員們因?yàn)閾碜o(hù)不同的調(diào)試方法,分裂成了兩大陣營:日志派和調(diào)試派傍药,兩派互相看不起磺平。調(diào)試派說打印日志太沒技術(shù)含量,還要到處做標(biāo)記拐辽,看我們調(diào)試派拣挪,想停哪里點(diǎn)哪里,想看什么看什么俱诸,調(diào)試器能帶我飛菠劝。日志派也不服氣,你能離線調(diào)試嗎睁搭?你能調(diào)試多線程錯(cuò)誤嗎赶诊?你能xxx調(diào)試嗎?

好程序員兩種技能都要掌握园骆,現(xiàn)在調(diào)試工具越來越好用舔痪,單步調(diào)試沒有任何困難。但是打印日志仍然是不可或缺的必殺技锌唾,尤其是查活系統(tǒng)(運(yùn)行中軟件)的問題時(shí)锄码,如果沒有后臺(tái)日志或者用戶手機(jī)日志,真是打死也不知道哪里出了問題晌涕。

扯完日志的重要性滋捶,認(rèn)真說說我們對(duì)日志系統(tǒng)的需求:

  1. 容易打印:無論什么格式的數(shù)據(jù)渐排,上到自定義類炬太,下到字節(jié)流,都能單行代碼給打出來驯耻,不用為了打日志寫一堆額外的代碼邏輯亲族。
  2. 格式漂亮:對(duì)格式化數(shù)據(jù)做打印美化,必要時(shí)適當(dāng)做點(diǎn)排版可缚。
  3. 容易篩選:給日志分級(jí)和打標(biāo)簽霎迫,就是為了達(dá)到這個(gè)目的。
  4. 立即定位:每條日志都有兩個(gè)位置帘靡,代碼中的位置和運(yùn)行時(shí)位置(所在線程)知给。這兩個(gè)位置對(duì)快速定位問題很重要。
  5. 靈活設(shè)置:日志數(shù)量和日志詳細(xì)程度是一對(duì)矛盾體。大多數(shù)情況下涩赢,普通的日志就夠我們分析問題了戈次。但是某些情況下,如多線程問題筒扒,異步問題怯邪,需要打印盡量詳細(xì)的信息,這個(gè)要能靈活設(shè)置花墩。
  6. 日志留存:日志打到屏幕上悬秉,說沒就沒。有沒有辦法屏幕上打一份冰蘑,SD卡上存一份和泌,崩潰信息網(wǎng)站上留一份?這有點(diǎn)類似linux上的tee命令祠肥。
  7. 容易上手:本來沒想寫這條武氓,也沒想到上面會(huì)列出這么多特性,沒辦法搪柑,還是加上個(gè)容易上手的指標(biāo)吧聋丝。就是說上邊這些特性,

能做到上面幾點(diǎn)工碾,我們就認(rèn)為這個(gè)日志系統(tǒng)非常好了弱睦。注意,我為什么沒提性能要求渊额?因?yàn)檎桨l(fā)布版本里况木,是不會(huì)有日志的,起碼不會(huì)大量存在旬迹,所以性能也就無所謂了火惊,別太差就行。尺子有了奔垦,我們就用它來衡量一下Timber和Logger屹耐。

Logger分析

這個(gè)項(xiàng)目在github上有3000+ star,必有過人之處椿猎。

  1. 容易打踊塘搿:除了普通字符串和含變量字符串,還能直接打印json犯眠、xml按灶、異常,通過筐咧。
  2. 格式漂亮:的確漂亮鸯旁,但是過分漂亮了噪矛。本來一行的日志給打成了8行,真超值铺罢。結(jié)果贈(zèng)品太多艇挨,都找不到我想看的那條了。
Logger截圖
  1. 容易篩選:能分級(jí)畏铆,能自動(dòng)打tag雷袋,能自定義tag。等等辞居,為什么tag不是類名?難道用類名當(dāng)tag不是普世價(jià)值觀嗎蛋勺?明白了瓦灶,它的類名和方法名都在日志內(nèi)容中有了,tag中不用再放一個(gè)了抱完。但是有Android Monitor依賴癥的我表示贼陶,這讓我怎么篩選一眼望不到頭的日志呀,差評(píng)巧娱。
  2. 立即定位:能跳轉(zhuǎn)到文件位置碉怔,能看函數(shù)名、線程號(hào)禁添,通過撮胧。
  3. 靈活設(shè)置:可以設(shè)置,但是設(shè)置項(xiàng)似乎不太豐富呀老翘。
  4. 日志留存:不支持芹啥。
  5. 容易上手:一行代碼就能用,通過铺峭。

Timber分析

這個(gè)庫非常簡(jiǎn)潔墓怀,準(zhǔn)確講,它只有一個(gè)文件卫键,是Jake Wharton大神自己用的傀履。大神說嫌拷貝來拷貝去太麻煩,才開源成一個(gè)庫莉炉。

  1. 容易打拥稣恕:支持普通字符串和含變量字符串。
  2. 格式漂亮:不支持呢袱。
  3. 容易篩選:自動(dòng)用類名當(dāng)tag官扣,也可以自定義。
  4. 立即定位:不支持羞福。
  5. 靈活設(shè)置:支持惕蹄,但沒什么設(shè)置項(xiàng)。
  6. 日志留存:支持。
  7. 容易上手:還是吐槽一下卖陵,這個(gè)庫的tree和plant是什么鬼遭顶?我是讀完它的代碼才明白的。其實(shí)跟樹泪蔫、種樹棒旗、木頭沒一毛錢關(guān)系,大神只是借種樹這個(gè)形象的方法撩荣,說日志可以寫到各種地方去铣揉。想寫哪里寫哪里,自己plant一個(gè)自己實(shí)現(xiàn)的Tree就可以了餐曹。不種樹就沒有日志逛拱。大神太幽默了。

總結(jié)

從總評(píng)價(jià)看台猴,顯然Logger更好朽合,特性更豐富。但是它的排版我實(shí)在接受不了饱狂。所以項(xiàng)目實(shí)踐中曹步,我還是會(huì)用Timber。全劇終休讳。

我去讲婚,這個(gè)結(jié)局太不能讓人滿意了,選了半天選了個(gè)不好用的衍腥,這世界怎么了磺樱?

改進(jìn)

權(quán)衡之下,還是改造一下Logger吧婆咸。在github上fork了Logger的代碼竹捉,針對(duì)Logger不滿的地方,加入我的改動(dòng)尚骄。為了保持Logger自身的特點(diǎn)块差,新改動(dòng)通過Settings的形式加入,我給Settings加入mode設(shè)置倔丈。默認(rèn)是pretty模式憨闰,一切用法與輸出結(jié)果與原Logger保持一致,可以通過單元測(cè)試需五。如果對(duì)PRETTY模式下日志過多有意見鹉动,可以啟用brief模式,去除無用的分割線宏邮,把默認(rèn)日志從8行減為4行泽示,保持可讀性和所有信息缸血。如果還嫌多,可以啟動(dòng)single模式械筛,默認(rèn)日志從8行壓縮到1行捎泻,保持必要信息。代碼庫見https://github.com/oreofish/logger

對(duì)這個(gè)改進(jìn)的版本重新評(píng)估如下:

  1. 容易打勇裼础:同原作笆豁。
  2. 格式漂亮:可以方便的在8行的pretty模式,和4行的簡(jiǎn)潔模式赤赊,和1行的單行模式中切換闯狱。
  3. 容易篩選:能分級(jí),能自動(dòng)打tag砍鸠,能自定義tag扩氢。單行模式下用Android Monitor過濾日志很方便。通過爷辱。
  4. 立即定位:同原作,而且重點(diǎn)保持了"能跳轉(zhuǎn)到文件位置"這個(gè)特性朦肘,通過饭弓。
  5. 靈活設(shè)置:可以設(shè)置。
  6. 日志留存:暫不支持(我很喜歡這個(gè)特性媒抠,有空要加上)弟断。
  7. 容易上手:一行代碼就能用,通過趴生。
  8. 彩蛋:寫代碼時(shí)經(jīng)常會(huì)加上一些臨時(shí)的日志阀趴,例如一大串相同的字符,只是為了在日志堆里容易看到苍匆。改進(jìn)版本中加入了預(yù)定義的表情字符串IAMHERE1到IAMHERE6刘急,就是為了容易看到。

開源大法好浸踩。這叔汁,就是我想要的日志系統(tǒng)。我會(huì)嘗試提交代碼給Logger官方检碗,雖然由于思路不同据块,他們可能不會(huì)合并我的代碼:)

結(jié)論

  • 如果對(duì)日志要求不高,簡(jiǎn)單用用而已折剃,Android自帶的Log就不錯(cuò)另假。
  • 如果厭煩了Android Log,覺得用著不方便怕犁,Timber和Logger都是好選擇边篮,Timber只要一個(gè)文件己莺。
  • 如果你覺得日志很重要,特別推薦的我的改進(jìn)版Logger苟耻。
  • 還覺得不好篇恒?把你的需求說出來,或者自己動(dòng)手改進(jìn)凶杖,都?xì)g迎胁艰。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市智蝠,隨后出現(xiàn)的幾起案子腾么,更是在濱河造成了極大的恐慌,老刑警劉巖杈湾,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件解虱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漆撞,警方通過查閱死者的電腦和手機(jī)殴泰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浮驳,“玉大人悍汛,你說我怎么就攤上這事≈粱幔” “怎么了离咐?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奉件。 經(jīng)常有香客問我宵蛀,道長,這世上最難降的妖魔是什么县貌? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任术陶,我火速辦了婚禮,結(jié)果婚禮上窃这,老公的妹妹穿的比我還像新娘瞳别。我一直安慰自己,他們只是感情好杭攻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布祟敛。 她就那樣靜靜地躺著,像睡著了一般兆解。 火紅的嫁衣襯著肌膚如雪馆铁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天锅睛,我揣著相機(jī)與錄音埠巨,去河邊找鬼历谍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辣垒,可吹牛的內(nèi)容都是我干的望侈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勋桶,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脱衙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起例驹,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捐韩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鹃锈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤胁,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年屎债,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仅政。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盆驹,死狀恐怖已旧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情召娜,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布惊楼,位于F島的核電站玖瘸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏檀咙。R本人自食惡果不足惜雅倒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弧可。 院中可真熱鬧蔑匣,春花似錦、人聲如沸棕诵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽校套。三九已至价脾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笛匙,已是汗流浹背侨把。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工犀变, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秋柄。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓获枝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骇笔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子省店,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • 本文會(huì)不定期更新,推薦watch下項(xiàng)目蜘拉。如果喜歡請(qǐng)star萨西,如果覺得有紕漏請(qǐng)?zhí)峤籭ssue,如果你有更好的點(diǎn)子可以...
    天之界線2010閱讀 7,173評(píng)論 11 29
  • 一.榜單介紹 排行榜包括四大類: 單一框架:僅提供路由旭旭、網(wǎng)絡(luò)層谎脯、UI層、通信層或其他單一功能的框架 混合開發(fā)框架:...
    偉子男閱讀 5,243評(píng)論 0 161
  • 文/亦翎 九月 你寡斷優(yōu)柔 是怕看到秋風(fēng)掃階 還是怕把日子過老 九月 你雖顯得枯燥 卻允我一季繁華 又該讓我用多少...
    21世紀(jì)新文閣閱讀 349評(píng)論 4 19
  • 吹拍總乏術(shù)持寄,奔走亦無門源梭。 輾轉(zhuǎn)如浮萍,破冰步難行稍味。 人情難練達(dá)废麻,道阻志不窮。 乘桴浮海去模庐,終究意難平烛愧。 ~~201...
    九郎問道閱讀 441評(píng)論 1 1