? ? ? ?這世界上很多事情昼激,看起來就像彩虹一樣炫目而神奇拖陆,實(shí)際上背后蘊(yùn)含著隨處可見的原理障本。就好像靜兒幾年前買過一件超貴的防輻射服教届,當(dāng)時銷售人員把手機(jī)嚴(yán)嚴(yán)實(shí)實(shí)的包在防輻射服里,然后讓我打電話測試驾霜,果然沒有信號案训。
直到今天,靜兒為了寫文章粪糙,把自己蒙在空調(diào)被里强霎,額,竟然連不上網(wǎng)猜旬。于是掀起一個被角,“大象”的巡檢結(jié)果噠噠噠的彈出來了倦卖。然后我感慨:自己當(dāng)年何苦買那么貴一個“圍裙”洒擦。
????日志作為邏輯跟蹤、線上問題排查怕膛、監(jiān)控報警的有效基礎(chǔ)利器被開發(fā)人員所熟知熟嫩。問題發(fā)現(xiàn)、定位到解決褐捻,都離不開它掸茅,真是如彩虹般絢爛。而從它的演進(jìn)過程也能看到現(xiàn)代互聯(lián)網(wǎng)發(fā)展的一個縮影柠逞。
一 最原始的日志:print昧狮、alert
????????啥?這也算日志板壮。
是的逗鸣。記得大概十年前,不管是C/S模式(客戶端+服務(wù)端模式)還是B/S(瀏覽器+服務(wù)端模式)绰精。因?yàn)橹挥星岸撕秃蠖私换ミ@一層撒璧,整個項(xiàng)目都做在一個工程里,大家驗(yàn)證基本上用的前端就是alert笨使,后臺就是System.out.print卿樱。需求決定設(shè)計。鏈路短硫椰,這個基本就夠用繁调。
二 JUL
java有自己的日志框架萨蚕,細(xì)心的朋友可能注意到過:java.util.logging。
由于其API并不完善涉馁,對開發(fā)者不是很友好门岔,對于日志的級別分類也不是很清晰。所以大家用的很少烤送。
三 Log4j
有人注意到JUL的一些缺陷寒随,做出了Log for Java。就是曾靜風(fēng)靡一時的Log4j帮坚。
Log4j是Apache的一個開源項(xiàng)目妻往,通過使用Log4j,可控制日志信息輸送的目的地是控制臺试和、文件讯泣、數(shù)據(jù)庫等。也可以控制每一條日志的輸出格式阅悍,通過定義每一條日志信息的級別好渠,能夠更加細(xì)致的控制日志的生成過程。
Log4j有7中不同的log級別节视,按照等級從低到高依次為trace
Log4j支持兩種格式的配置文件:properties和xml拳锚。包含三個主要的組件:Logger、appender寻行、Layout霍掺。
四 JCL
Jakarta對于java開發(fā)人員來說,第一反應(yīng)不是印度尼西亞的首都拌蜘,而是Jakarta Commons杆烁。而JCL就是Jakarta Commons-Logging的縮寫。
JakartaCommons是Jakarta的一個子項(xiàng)目简卧,目的是創(chuàng)建和維護(hù)獨(dú)立與其他框架和產(chǎn)品的程序包兔魂。
JCL的初衷是:java自身的一些包都用自己的JUL,而Log4j又那么好用举娩。怎么讓他們愉快的相處呢入热?
它就提供了一套API門面來掩蓋真正的Logger實(shí)現(xiàn)。這就是設(shè)計模式里常用的門面模式晓铆,可以進(jìn)行不同Logger實(shí)現(xiàn)的切換勺良。它的缺點(diǎn)是算法復(fù)雜,出了異常很難修復(fù)骄噪。
五 SLF4J
?????SLF4J=Simple Logging Facade for Java尚困,中文叫:簡單日志門面。他的作者就是Log4j的作者链蕊。
SLF4J為了解決JCL的缺點(diǎn)而生事甜,簡單易用谬泌。
六 Logback
????Log4j的作者是對技術(shù)有著執(zhí)著的追求的技術(shù)學(xué)者。他為了實(shí)現(xiàn)一個可靠逻谦、通用掌实、快速而又靈活的Java日志框架這一目標(biāo),又發(fā)明了Logback邦马。
????Logback有三個模塊
1.logback-core:日志處理核心組件
2.logback-classic:完整的實(shí)現(xiàn)了SLF4j API贱鼻,用于切換日志實(shí)現(xiàn)。
3.logback-access:與Servlet容器集成提供通過http來訪問日志的功能滋将。
????因?yàn)閘ogback比log4j大約快10倍邻悬、消耗更少的內(nèi)存,遷移成本也很低随闽,自動壓縮日志父丰、支持多樣化配置、不需要重啟就可以恢復(fù)I/O異常等優(yōu)勢掘宪,又名噪一時蛾扇。反正靜兒是用了很多年。
七 Log4j2
????Log4j2與Logback非常類似魏滚,但是它有自己的亮點(diǎn):如插件式結(jié)構(gòu)镀首、配置文件優(yōu)化、異步日志栏赴。
八?日志系統(tǒng)
????上面所說的日志都是代碼層面蘑斧。但是實(shí)際使用時由于線上都是多個節(jié)點(diǎn)并行在跑靖秩。為了看日志须眷,不得不登錄多個服務(wù)器。所以聰明的技術(shù)人員就想到了使用RSA授權(quán)來集中多個服務(wù)的操作于一個終端沟突,這樣的工具代表是:polysh花颗。
但是這樣,工具使用之前的操作還是挺麻煩的惠拭,不如使用界面做一個系統(tǒng)扩劝。
Scribe是Facebook開源的日志收集系統(tǒng)。它從各種日志源收集日志职辅,存儲在中央存儲系統(tǒng)棒呛,進(jìn)行集中的分析處理。
????業(yè)界比較流行的做法是使用Scribe+ES域携。Scribe收集上來的日志放入搜索引擎簇秒,用戶使用搜索引擎來靈活的查看自己感興趣的日志,如同訪問一個網(wǎng)站秀鞭。