摘要:方法會(huì)調(diào)即啟動(dòng)當(dāng)前的,一般就是,若返回為空,則調(diào)。若存在多個(gè)日志框架,則類加載的有多個(gè),所以是為載入。的方法會(huì)調(diào)用,若返回的大小超過,則警告。通過完成初始化,即實(shí)例化具體的賦值給內(nèi)部的,如。
SLF4J(Simple logging Facade for Java)是一個(gè)日志框架的適配器。
如果一個(gè)項(xiàng)目已經(jīng)使用了log4j,而你加載了Apache Active MQ——它依賴于于另外一個(gè)日志類庫(kù)logback,那么你就需要把logback也加載進(jìn)來。但如果Apache Active MQ使用了SLF4J,你可以繼續(xù)使用log4j,而無需加載和維護(hù)一個(gè)新的日志框架?;蛘咛砑覺XX-over-slf4j.jar可以將xxx的日志輸出轉(zhuǎn)向到slf4j,然后slf4j將日志交由真正的日志實(shí)現(xiàn)框架來輸出
幾個(gè)jar提一下:
jcl-over-slf4j 將Commons Logging API輸出轉(zhuǎn)向到slf4j輸出。
log4j-1.2-api 將log4j適配到log4j2,從而程序不用修改。
log4j-jcl 將Commons Logging API輸出轉(zhuǎn)向到log4j2輸出。
關(guān)鍵在于slf4j-api-xxx.jar中org.slf4j.LoggerFactory:
// org/slf4j/impl/StaticLoggerBinder.class為log4j-slf4j-impl-xxxjar中的類,所以用字符串聲明,避免具體依賴。 private static String STATIC_LOGGER_BINDER_PATH = "org/slf4j/impl/StaticLoggerBinder.class"; private static SetfindPossibleStaticLoggerBinderPathSet() { // use Set instead of list in order to deal with bug #138 // LinkedHashSet appropriate here because it preserves insertion order during iteration Set staticLoggerBinderPathSet = new LinkedHashSet (); try { //一般就是AppClassLoader ClassLoader loggerFactoryClassLoader = LoggerFactory.class .getClassLoader(); Enumeration paths; //每一種類加載器加載指定的*.class文件會(huì)得到不同的Class,這里必須要保證LoggerFactory的類加載器與StaticLoggerBinder的類加載是相同的。 //ClassLoader.getSystemResources方法會(huì)調(diào)getSystemClassLoader()即啟動(dòng)當(dāng)前application的classloader,一般就是AppClassLoader,若返回為空,則調(diào)getBootstrapResources()。 //若存在多個(gè)日志框架,則類加載的URL有多個(gè),所以是Enumeration if (loggerFactoryClassLoader == null) {//LoggerFactory為Bootstrap Loader載入。 paths = ClassLoader.getSystemResources(STATIC_LOGGER_BINDER_PATH); } else { paths = loggerFactoryClassLoader .getResources(STATIC_LOGGER_BINDER_PATH); } while (paths.hasMoreElements()) { URL path = (URL) paths.nextElement(); staticLoggerBinderPathSet.add(path); } } catch (IOException ioe) { ...... } return staticLoggerBinderPathSet; }
LoggerFactory的bind()方法會(huì)調(diào)用findPossibleStaticLoggerBinderPathSet(),若返回Set的大小超過1,則警告。通過StaticLoggerBinder.getSingleton()完成初始化,即實(shí)例化具體的factory賦值給內(nèi)部的ILoggerFactory,如 loggerFactory = new Log4jLoggerFactory();。
不同的日志框架有相應(yīng)的不同的xxx-slf4j-impl.jar,不同的StaticLoggerBinder.class決定了slf4j使用哪種日志框架。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67266.html
摘要:日志消息,是換行符如果使用作為日志配置文件,還要使用功能,會(huì)有以下錯(cuò)誤切換日志框架可以按照的日志適配圖,進(jìn)行相關(guān)的切換的方式切換為 三、日志 1、日志框架 小張;開發(fā)一個(gè)大型系統(tǒng); 1、System.out.println();將關(guān)鍵數(shù)據(jù)打印在控制臺(tái);去掉?寫在一個(gè)文件? 2、框架來記錄系統(tǒng)的一些運(yùn)行時(shí)信息;日志框架 ; zhanglogging.jar; 3、高大上的幾個(gè)功能?異步...
摘要:想要看級(jí)別的信息,你需要在啟動(dòng)時(shí)傳入這個(gè)系統(tǒng)屬性使用與日志現(xiàn)在我們可以試驗(yàn)并更換不同的日志實(shí)現(xiàn),但你的程序代碼可以保持不變。我們要做的是用另一個(gè)流行的日志實(shí)現(xiàn)來替換掉,比如。又一次,我們必須對(duì)我們選的每一個(gè)日志實(shí)現(xiàn)做配置。 使用slf4j庫(kù)作為你的Java應(yīng)用日志API層有很多好處,這里我會(huì)展示一小部分關(guān)于如何使用和配置它的例子。 你可以把slf4j想成一個(gè)Java的接口,然后你需要實(shí)...
摘要:但是考慮到各不相同,所以出現(xiàn)了等日志框架。日志框架只是統(tǒng)一的,其底層的具體的日志記錄工作還是由等承擔(dān)。如何選擇和搭配日志系統(tǒng)目前來說,新應(yīng)用使用是首選,一些老系統(tǒng)中很可能使用的是等。所以若日志沖突時(shí),使用的三方庫(kù)只需要相應(yīng)的實(shí)現(xiàn)庫(kù)即可。 日志系統(tǒng)的發(fā)展 我們?nèi)粘=佑|到的日志系統(tǒng)有很多種,log4j,JUL(jdk自帶),logback等,我們可以直接根據(jù)對(duì)象的日志API進(jìn)行使用。但是考...
摘要:日志名的從開始,自動(dòng)遞增就是指拋出的異常,是顯示全部,如果在中寫入數(shù)字,則表示展示多少行重點(diǎn)來了,上邊都是輸出源。 一、簡(jiǎn)介 LogBack是一個(gè)日志框架,它是Log4j作者Ceki的又一個(gè)日志組件。 LogBack,Slf4j,Log4j之間的關(guān)系 slf4j是The Simple Logging Facade for Java的簡(jiǎn)稱,是一個(gè)簡(jiǎn)單日志門面抽象框架,它本身只提供了日志F...
摘要:的橋接器這個(gè)橋接器將所有日志委派給的原生實(shí)現(xiàn),直接實(shí)現(xiàn)了的接口,因此使用與的搭配也暗示了嚴(yán)格的零內(nèi)存計(jì)算溢出未完待補(bǔ)充 起手式 忘了什么時(shí)候聽老師說過,牛逼的公司只管定義接口,屌絲廠商實(shí)現(xiàn)接口,類似 JDBC 的實(shí)現(xiàn)便是如此,用在 slf4j, 總覺得有些類似,本來 SUN 有機(jī)會(huì)在需求產(chǎn)生之前設(shè)計(jì)一套漂亮的日志框架來一統(tǒng)天下,可惜偏偏要拖到 JDK1.4, 而這套原生的日志框架也沒有...
摘要:近期啟動(dòng)時(shí),看到如下輸出信息并伴隨嚴(yán)重錯(cuò)誤警告打開的日志記錄,看到的錯(cuò)誤信息如下唉呀媽呀腦瓜疼,腦瓜疼啊腦瓜疼于是在掙扎了一天之后,頭發(fā)都撓沒了,終于找到一個(gè)靠譜的解決方案,不得不感謝百度的強(qiáng)大這就是包沖突了啊啊啊啊啊 近期啟動(dòng)tomcat時(shí),看到如下輸出信息:SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found...
閱讀 1162·2021-09-22 15:43
閱讀 2358·2021-09-22 15:32
閱讀 4530·2021-09-22 15:11
閱讀 2227·2019-08-30 15:55
閱讀 2599·2019-08-30 15:54
閱讀 995·2019-08-30 15:44
閱讀 1107·2019-08-29 13:26
閱讀 803·2019-08-29 12:54