摘要:方法會調即啟動當前的,一般就是,若返回為空,則調。若存在多個日志框架,則類加載的有多個,所以是為載入。的方法會調用,若返回的大小超過,則警告。通過完成初始化,即實例化具體的賦值給內部的,如。
SLF4J(Simple logging Facade for Java)是一個日志框架的適配器。
如果一個項目已經使用了log4j,而你加載了Apache Active MQ——它依賴于于另外一個日志類庫logback,那么你就需要把logback也加載進來。但如果Apache Active MQ使用了SLF4J,你可以繼續使用log4j,而無需加載和維護一個新的日志框架。或者添加XXX-over-slf4j.jar可以將xxx的日志輸出轉向到slf4j,然后slf4j將日志交由真正的日志實現框架來輸出
幾個jar提一下:
jcl-over-slf4j 將Commons Logging API輸出轉向到slf4j輸出。
log4j-1.2-api 將log4j適配到log4j2,從而程序不用修改。
log4j-jcl 將Commons Logging API輸出轉向到log4j2輸出。
關鍵在于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文件會得到不同的Class,這里必須要保證LoggerFactory的類加載器與StaticLoggerBinder的類加載是相同的。 //ClassLoader.getSystemResources方法會調getSystemClassLoader()即啟動當前application的classloader,一般就是AppClassLoader,若返回為空,則調getBootstrapResources()。 //若存在多個日志框架,則類加載的URL有多個,所以是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()方法會調用findPossibleStaticLoggerBinderPathSet(),若返回Set的大小超過1,則警告。通過StaticLoggerBinder.getSingleton()完成初始化,即實例化具體的factory賦值給內部的ILoggerFactory,如 loggerFactory = new Log4jLoggerFactory();。
不同的日志框架有相應的不同的xxx-slf4j-impl.jar,不同的StaticLoggerBinder.class決定了slf4j使用哪種日志框架。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67266.html
摘要:日志消息,是換行符如果使用作為日志配置文件,還要使用功能,會有以下錯誤切換日志框架可以按照的日志適配圖,進行相關的切換的方式切換為 三、日志 1、日志框架 小張;開發一個大型系統; 1、System.out.println();將關鍵數據打印在控制臺;去掉?寫在一個文件? 2、框架來記錄系統的一些運行時信息;日志框架 ; zhanglogging.jar; 3、高大上的幾個功能?異步...
摘要:想要看級別的信息,你需要在啟動時傳入這個系統屬性使用與日志現在我們可以試驗并更換不同的日志實現,但你的程序代碼可以保持不變。我們要做的是用另一個流行的日志實現來替換掉,比如。又一次,我們必須對我們選的每一個日志實現做配置。 使用slf4j庫作為你的Java應用日志API層有很多好處,這里我會展示一小部分關于如何使用和配置它的例子。 你可以把slf4j想成一個Java的接口,然后你需要實...
摘要:但是考慮到各不相同,所以出現了等日志框架。日志框架只是統一的,其底層的具體的日志記錄工作還是由等承擔。如何選擇和搭配日志系統目前來說,新應用使用是首選,一些老系統中很可能使用的是等。所以若日志沖突時,使用的三方庫只需要相應的實現庫即可。 日志系統的發展 我們日常接觸到的日志系統有很多種,log4j,JUL(jdk自帶),logback等,我們可以直接根據對象的日志API進行使用。但是考...
摘要:日志名的從開始,自動遞增就是指拋出的異常,是顯示全部,如果在中寫入數字,則表示展示多少行重點來了,上邊都是輸出源。 一、簡介 LogBack是一個日志框架,它是Log4j作者Ceki的又一個日志組件。 LogBack,Slf4j,Log4j之間的關系 slf4j是The Simple Logging Facade for Java的簡稱,是一個簡單日志門面抽象框架,它本身只提供了日志F...
摘要:的橋接器這個橋接器將所有日志委派給的原生實現,直接實現了的接口,因此使用與的搭配也暗示了嚴格的零內存計算溢出未完待補充 起手式 忘了什么時候聽老師說過,牛逼的公司只管定義接口,屌絲廠商實現接口,類似 JDBC 的實現便是如此,用在 slf4j, 總覺得有些類似,本來 SUN 有機會在需求產生之前設計一套漂亮的日志框架來一統天下,可惜偏偏要拖到 JDK1.4, 而這套原生的日志框架也沒有...
摘要:近期啟動時,看到如下輸出信息并伴隨嚴重錯誤警告打開的日志記錄,看到的錯誤信息如下唉呀媽呀腦瓜疼,腦瓜疼啊腦瓜疼于是在掙扎了一天之后,頭發都撓沒了,終于找到一個靠譜的解決方案,不得不感謝百度的強大這就是包沖突了啊啊啊啊啊 近期啟動tomcat時,看到如下輸出信息:SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found...
閱讀 1158·2021-09-22 15:43
閱讀 2355·2021-09-22 15:32
閱讀 4522·2021-09-22 15:11
閱讀 2216·2019-08-30 15:55
閱讀 2588·2019-08-30 15:54
閱讀 991·2019-08-30 15:44
閱讀 1105·2019-08-29 13:26
閱讀 801·2019-08-29 12:54