
這世界上很多事情,看起來就像彩虹一樣炫目而神奇,實際上背后蘊含着隨處可見的原理。就好像靜兒幾年前買過一件超貴的防輻射服,當時銷售人員把手機嚴嚴實實的包在防輻射服里,然后讓我打電話測試,果然沒有信號。
直到今天,靜兒為了寫文章,把自己蒙在空調被里,額,竟然連不上網。於是掀起一個被角,“大象”的巡檢結果噠噠噠的彈出來了。然后我感慨:自己當年何苦買那么貴一個“圍裙”。
日志作為邏輯跟蹤、線上問題排查、監控報警的有效基礎利器被開發人員所熟知。問題發現、定位到解決,都離不開它,真是如彩虹般絢爛。而從它的演進過程也能看到現代互聯網發展的一個縮影。
一 最原始的日志:print、alert

啥?這也算日志。
是的。記得大概十年前,不管是C/S模式(客戶端+服務端模式)還是B/S(瀏覽器+服務端模式)。因為只有前端和后端交互這一層,整個項目都做在一個工程里,大家驗證基本上用的前端就是alert,后台就是System.out.print。需求決定設計。鏈路短,這個基本就夠用。
二 JUL
java有自己的日志框架,細心的朋友可能注意到過:java.util.logging。
由於其API並不完善,對開發者不是很友好,對於日志的級別分類也不是很清晰。所以大家用的很少。
三 Log4j
有人注意到JUL的一些缺陷,做出了Log for Java。就是曾經風靡一時的Log4j。
Log4j是Apache的一個開源項目,通過使用Log4j,可控制日志信息輸送的目的地是控制台、文件、數據庫等。也可以控制每一條日志的輸出格式,通過定義每一條日志信息的級別,能夠更加細致的控制日志的生成過程。
Log4j有7中不同的log級別,按照等級從低到高依次為trace
Log4j支持兩種格式的配置文件:properties和xml。包含三個主要的組件:Logger、appender、Layout。

四 JCL
Jakarta對於java開發人員來說,第一反應不是印度尼西亞的首都,而是Jakarta Commons。而JCL就是Jakarta Commons-Logging的縮寫。
JakartaCommons是Jakarta的一個子項目,目的是創建和維護獨立與其他框架和產品的程序包。
JCL的初衷是:java自身的一些包都用自己的JUL,而Log4j又那么好用。怎么讓他們愉快的相處呢?
它就提供了一套API門面來掩蓋真正的Logger實現。這就是設計模式里常用的門面模式,可以進行不同Logger實現的切換。它的缺點是算法復雜,出了異常很難修復。
五 SLF4J
SLF4J=Simple Logging Facade for Java,中文叫:簡單日志門面。他的作者就是Log4j的作者。
SLF4J為了解決JCL的缺點而生,簡單易用。

六 Logback
Log4j的作者是對技術有着執着的追求的技術學者。他為了實現一個可靠、通用、快速而又靈活的Java日志框架這一目標,又發明了Logback。
Logback有三個模塊
1.logback-core:日志處理核心組件
2.logback-classic:完整的實現了SLF4j API,用於切換日志實現。
3.logback-access:與Servlet容器集成提供通過http來訪問日志的功能。
因為logback比log4j大約快10倍、消耗更少的內存,遷移成本也很低,自動壓縮日志、支持多樣化配置、不需要重啟就可以恢復I/O異常等優勢,又名噪一時。反正靜兒是用了很多年。

七 Log4j2
Log4j2與Logback非常類似,但是它有自己的亮點:如插件式結構、配置文件優化、異步日志。

八 日志系統
上面所說的日志都是代碼層面。但是實際使用時由於線上都是多個節點並行在跑。為了看日志,不得不登錄多個服務器。所以聰明的技術人員就想到了使用RSA授權來集中多個服務的操作於一個終端,這樣的工具代表是:polysh。
但是這樣,工具使用之前的操作還是挺麻煩的,不如使用界面做一個系統。
Scribe是Facebook開源的日志收集系統。它從各種日志源收集日志,存儲在中央存儲系統,進行集中的分析處理。
業界比較流行的做法是使用Scribe+ES。Scribe收集上來的日志放入搜索引擎,用戶使用搜索引擎來靈活的查看自己感興趣的日志,如同訪問一個網站。

關於作者
靜兒,20歲時畢業於東北大學計算機系。在畢業后的第一家公司由於出眾的語言天賦,在1年的時間里從零開始學日語並以超高分通過了國際日語一級考試,擔當兩年日語翻譯的工作。后就職於人人網,轉型做互聯網開發。中國科學院心理學研究生。有近百個技術發明專利,創業公司合伙人。有日本東京,美國硅谷技術支持經驗。目前任美團點評技術專家(歡迎關注靜兒的個人技術公眾號:編程一生),心法文章可參考我的《自動化管理之新人培養》
技術交流可關注我的github:https://github.com/xiexiaojing
關注靜兒公眾號,不定期漫畫技術推送~
