這世界上不少事情,看起來就像彩虹同樣炫目而神奇,實際上背後蘊含着隨處可見的原理。就好像靜兒幾年前買過一件超貴的防輻射服,當時銷售人員把手機嚴嚴實實的包在防輻射服裏,而後讓我打電話測試,果真沒有信號。前端
直到今天,靜兒爲了寫文章,把本身蒙在空調被裏,額,居然連不上網。因而掀起一個被角,「大象」的巡檢結果噠噠噠的彈出來了。而後我感慨:本身當年何苦買那麼貴一個「圍裙」。java
日誌做爲邏輯跟蹤、線上問題排查、監控報警的有效基礎利器被開發人員所熟知。問題發現、定位到解決,都離不開它,真是如彩虹般絢爛。而從它的演進過程也能看到現代互聯網發展的一個縮影。git
一 最原始的日誌:print、alertgithub
啥?這也算日誌。算法
是的。記得大概十年前,不論是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
關注靜兒公衆號,不按期漫畫技術推送~