摘要:的橋接器這個橋接器將所有日志委派給的原生實(shí)現(xiàn),直接實(shí)現(xiàn)了的接口,因此使用與的搭配也暗示了嚴(yán)格的零內(nèi)存計(jì)算溢出未完待補(bǔ)充
起手式
忘了什么時候聽老師說過,牛逼的公司只管定義接口,屌絲廠商實(shí)現(xiàn)接口,類似 JDBC 的實(shí)現(xiàn)便是如此,用在 slf4j, 總覺得有些類似,本來 SUN 有機(jī)會在需求產(chǎn)生之前設(shè)計(jì)一套漂亮的日志框架來一統(tǒng)天下,可惜偏偏要拖到 JDK1.4, 而這套原生的日志框架也沒有足夠漂亮,而之前早已經(jīng)經(jīng)過市場考驗(yàn)的日志框架也在不斷持續(xù)的改進(jìn),log4j,logback, common-logging 等等已經(jīng)在許多系統(tǒng)中長久駐足。
翻到Java中的日志框架史,看到下面有趣的文字
正文 Apache user manual 選譯最早出現(xiàn)的日志框架是apache提供的log4j,使用最為廣泛,成為了Java日志的事實(shí)上的標(biāo)準(zhǔn);然而當(dāng)時Sun公司在jdk1.4中增加了JUL(java.util.logging),企圖對抗log4j,于是造成了混亂,當(dāng)然此時也有其它的一些日志框架的出現(xiàn),如simplelog等,簡直是亂上加亂。
解決這種混亂的方案出現(xiàn)了:抽象出一個接口層:于是開源社區(qū)提供了commons-logging,被稱為JCL。抽象時參考了log4j、JUL、simplelog,對它們進(jìn)行了適配或轉(zhuǎn)接,這樣就一統(tǒng)江湖了。
看上去現(xiàn)在已經(jīng)非常完美了,但好景不長,log4j的作者(Ceki Gülcü)覺得JCL不夠優(yōu)秀,他要搞出一套更優(yōu)雅的出來,于是slf4j就出現(xiàn)了,并且親自實(shí)現(xiàn)了一個親子——logback(有點(diǎn),老子又回來了的感覺^_^)。好吧,確實(shí)更優(yōu)雅了,但混亂局面又出現(xiàn)了,之前使用JCL的怎么辦呢,于是Ceki Gülcü在slf4j又對JCL作了橋接轉(zhuǎn)換,然而事情還沒完,Ceki Gülcü又回來拯救自己的“大阿哥”——log4j,于是log4j2就誕生了,同時log4j2也加進(jìn)了slf4j體系中。
PS:SLF4J是在Compile綁定實(shí)現(xiàn)的,而JCL是Runtime時綁定的。
SLF4J ( The simple logging facade for java ) 作為諸多日志框架的門面或者抽象,這些框架包括java.util.logging, logback 和 log4j. slf4j 允許終端用戶在部署系統(tǒng)時想使用插件一樣來選擇使用不同的日志框架。
關(guān)于如何綁定一個日志框架創(chuàng)建工程,將 slf4j-api-1.7.13.jar 加入 class path , 以下程序編譯運(yùn)行
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }
控制臺輸出
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
可見單純的 slf4j 只是定義了一套接口,以及其他日志框架的轉(zhuǎn)接器
現(xiàn)在我們?yōu)?slf4j 綁定最簡單的實(shí)現(xiàn),在 classpath 加入 slf4j-simple-1.7.13.jar
重新編譯運(yùn)行,控制臺輸出:
0 [main] INFO HelloWorld - Hello World可以綁定的日志框架的橋接 jars
log4j 1.2(一個廣泛使用的日志框架)版本的橋接器,你可以將 log4j.jar 加入classpath
java.util.logging 的橋接器,JDK原生日志框架
NOP 橋接器,靜默丟棄一切日志
一個簡單實(shí)現(xiàn)的橋接器,該實(shí)現(xiàn)輸出所有事件到 System.err. 只有INFO以及高于該級別的消息被打印,在小型應(yīng)用中它也許是有用的。
Jakarta Commons Logging 的橋接器. 這個橋接器將SLF4j所有日志委派給 JCL
slf4j 的原生實(shí)現(xiàn),logback 直接實(shí)現(xiàn)了 slf4j 的接口,因此使用 slf4j 與 logback 的搭配也暗示了嚴(yán)格的零內(nèi)存計(jì)算溢出
未完待補(bǔ)充文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65346.html
摘要:深入學(xué)習(xí)系列三那些年我們用過的日志框架目前常見的日志框架和中文似乎不太好翻譯有一下幾種即其中,為同一個作者所寫。如前面所述,在才被引入,在這之前,并沒有官方的日志庫供開發(fā)者使用。 title: 【Java深入學(xué)習(xí)系列】三. 那些年我們用過的日志框架date: 2016-10-16 15:32:50 category: java 目前常見的Java日志框架和facades(中文似乎不太好...
摘要:但是考慮到各不相同,所以出現(xiàn)了等日志框架。日志框架只是統(tǒng)一的,其底層的具體的日志記錄工作還是由等承擔(dān)。如何選擇和搭配日志系統(tǒng)目前來說,新應(yīng)用使用是首選,一些老系統(tǒng)中很可能使用的是等。所以若日志沖突時,使用的三方庫只需要相應(yīng)的實(shí)現(xiàn)庫即可。 日志系統(tǒng)的發(fā)展 我們?nèi)粘=佑|到的日志系統(tǒng)有很多種,log4j,JUL(jdk自帶),logback等,我們可以直接根據(jù)對象的日志API進(jìn)行使用。但是考...
摘要:本文要來分享給大家程序員最常用的日志框架組件。沒有基礎(chǔ)的同學(xué)也不要著急,這套教程覆蓋了目前所有的日志框架,只要你學(xué),就一定用得到,先收藏,以備不時之需。 作為一名Java程序員,我們開發(fā)了很多Java應(yīng)用程序,包括桌面應(yīng)用、WEB應(yīng)用以及移動應(yīng)用。然而日志系統(tǒng)是一個成熟Java應(yīng)用所必不可少的。在開發(fā)和調(diào)試階段,日志可以幫...
摘要:想要看級別的信息,你需要在啟動時傳入這個系統(tǒng)屬性使用與日志現(xiàn)在我們可以試驗(yàn)并更換不同的日志實(shí)現(xiàn),但你的程序代碼可以保持不變。我們要做的是用另一個流行的日志實(shí)現(xiàn)來替換掉,比如。又一次,我們必須對我們選的每一個日志實(shí)現(xiàn)做配置。 使用slf4j庫作為你的Java應(yīng)用日志API層有很多好處,這里我會展示一小部分關(guān)于如何使用和配置它的例子。 你可以把slf4j想成一個Java的接口,然后你需要實(shí)...
閱讀 1859·2019-08-30 15:55
閱讀 1057·2019-08-26 11:57
閱讀 562·2019-08-26 11:29
閱讀 3399·2019-08-26 10:49
閱讀 1957·2019-08-23 18:40
閱讀 1858·2019-08-23 16:04
閱讀 3147·2019-08-23 11:01
閱讀 2324·2019-08-23 10:56