今天做數(shù)據(jù)修復(fù)的時候利术,需要將處理過的跟未處理過的數(shù)據(jù)記錄到文件中,突然想到低矮,這不就是日志系統(tǒng)嘛印叁,所以就花點(diǎn)時間將接觸過的日志框架組件類包整理總結(jié)一下,之前也沒這么靜下來認(rèn)真的做過總結(jié)商佛,只是一味的拿來主義喉钢。其實寫這篇博客也借鑒了好多大神的博客姆打,感謝他們的無私分享良姆。
OK,開始吧幔戏,日志記錄其實就是文件操作玛追。所以,自己寫了個小方法闲延,簡易實現(xiàn)了一下痊剖,如下
上面這方法陆馁,一個文件追加滿足日常日志記錄叮贩,但太過于粗糙益老,也因此激發(fā)了我對日志記錄框架的興趣寸莫,想一探究竟膘茎。
自己接觸過的日志類包或框架:commons-logging酷誓、log4j呛牲、logback娘扩、logstash琐旁,我們都來看看猜绣。
1. commons-logging
簡介
commons-logging 應(yīng)該是學(xué)習(xí)日志系統(tǒng)最早接觸到類庫掰邢,是Apache commons類庫中的一員。
commons Logging(JCL)提供的是一個日志(Log)接口(interface)掰伸,同時兼顧輕量級和不依賴于具體的日志實現(xiàn)工具狮鸭。它提供給中間件/日志工具開發(fā)者一個簡單的日志操作抽象歧蕉,允許開發(fā)人員使用不同的具體日志實現(xiàn)工具康铭。
commons-logging 本身日志功能很弱,只一個簡單的SimpeLog催跪,所以一般結(jié)合log4j使用叠荠。
commons-logging 提供了一個統(tǒng)一的日志接口扫责,配置文件可缺省,簡化操作者娱,將項目與環(huán)境中日志系統(tǒng)解耦黄鳍。
加載配置機(jī)制
commons-logging可以自動掃描classpath下文件:按以下順序匹配選擇實現(xiàn)類(官網(wǎng)翻譯,可能有誤藏古,歡迎指正)
(1) 找一個叫org.apache.commons.logging.Log的工廠屬性拧晕。
可以通過Java代碼顯示設(shè)置配置屬性---classpath下放一個commons-logging.properties配置文件即可梅垄。
當(dāng)找到不止一個properties文件時候队丝,使用第一個找到的文件。在文件中定義所需屬性
(2) 當(dāng)(1)未找到臭墨,則繼續(xù)查找是否有org.apache.commons.logging.Log類裙犹,在類中定義屬性
(3) 當(dāng)classpach中有Log4j包時衔憨,使用相應(yīng)的wrapper類(Log4JLogger)
(4) 當(dāng)應(yīng)用程序運(yùn)行在jdk1.4上面践图,貌似只能使用jdk自己的包裝(wrapper)類(jdk14Logger)
(5) 若以上步驟都未能匹配到码党,則只能使用自己提供的日志包裝類 SimpeLog
commons-logging能夠選擇使用Log4j還是JDK Logging揖盘,但不依賴Log4j,JDK Logging的API兽狭。使用commons-logging能夠靈活的選擇使用那些日志方式箕慧,而且不需要修改源代碼颠焦。
源碼詳解剖析參考,要感謝下面這些博主:
ref:?http://blog.csdn.net/u011794238/article/details/50749260
ref:?http://blog.csdn.net/wiker_yong/article/details/23551209
2. log4j
官方介紹---why log4j ?
使用log4j可以在運(yùn)行時啟用日志記錄粉渠,而無需修改應(yīng)用程序二進(jìn)制文件渣叛。log4j包的設(shè)計是為了使這些語句淳衙,能保留在附帶的代碼中饺著,不產(chǎn)生很大的性能損失⊙ヵ耍可在配置文件中調(diào)整日志記錄級別debug-info梢睛,無需重啟應(yīng)用识椰。... ...
log4j 的一個顯著特點(diǎn)就是在日志記錄器繼承的概念腹鹉。使用到日志層次機(jī)構(gòu),讓日志可以在更細(xì)的任務(wù)中輸出... ...
結(jié)合commons-logging 集成 log4j 配置
(1) log4j.configuration = log4j.properties 使用該配置Log4j屬性文件名愉阎,默認(rèn)名為log4j.properties
(2) log4j.rootCategory = priority[,appender]* 設(shè)置缺省日志記錄器優(yōu)先級
(3) log4j.log.logger.name = priority 設(shè)置日志記錄器優(yōu)先級榜旦,所有日志記錄器級別都低于指定的日志記錄器景殷。
通過LogFactory.getLog(logger.name) 獲取指定名字的實例澡屡,優(yōu)先級可:DEBUG/INFO/WARN/ERROR/FATAL
通過log4j.logger.org.apache.component = DEBUG挪蹭,可讓所有Component類輸出日志梁厉,別的Apache項目除外
(4) log4j.appender.appender.Threshold = priority 可以將日志輸出到指定不同的設(shè)備词顾,日志類型《= 指定優(yōu)先級
配置參考資料肉盹,要感謝下面這些博主
ref:?http://www.codeceo.com/article/log4j-usage.html
ref:?https://my.oschina.net/zimingforever/blog/98048
ref:?http://blog.csdn.net/u011794238/article/details/50742658
ref:?http://blog.csdn.net/u011794238/article/details/50747953
3. logback + SLF4J
簡介
logback是log4j的升級版上忍,有點(diǎn)太多太多窍蓝,而SLF4J和LogBack還都是出自Log4J的創(chuàng)始人Ceki Gülcü之手吓笙,貌似現(xiàn)在好多項目都用到logback巾腕,需要結(jié)合slf4j一塊使用尊搬。
算啦毁嗦,此部分狗准,找到兩篇博客茵肃,詳細(xì)完美到佩服验残,不再贅述了,反正就是棒胆绊,實現(xiàn)了自動壓縮歸檔等等欧募。
不過,使用slf4j(java簡單日志門面)种冬,使用的時候娱两,注意選擇正確的橋接包十兢。
ref:?http://blog.csdn.net/yycdaizi/article/details/8276265
參考資料旱物,感謝下面這些博主
ref:?http://www.cnblogs.com/warking/p/5710303.html
ref:?https://www.oschina.net/translate/reasons-to-prefer-logbak-over-log4j
ref:?http://blog.csdn.net/liubo2012/article/details/46337063Slf4j MDC+logback分析
ref:?http://blog.csdn.net/sunzhenhua0608/article/details/29175283
ref:?https://logback.qos.ch/manual/mdc.html#autoMDC官網(wǎng)MDC教程
下面是自己使用logback + slf4j 實現(xiàn)自定義日志屬性輸出及心得
先將 logback.xml 配置貼上來
4. logstash 分布式日志收集
這個就厲害了礁竞,但是我還不太了解捶朵,不過蜘矢,穩(wěn)住品腹,我們能贏红碑,后面我先學(xué)習(xí)一下舞吭,再來更新,^_^句喷、先看看下面的教程吧......
ref:?http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html