首先介紹一下各個日誌組件的作用以及用法,如果想要解決此類衝突的問題,首先要對它們有一定的瞭解,當你瞭解後,對於以後出現的這類問題能夠迎刃而解,本文會用簡單、易懂的語言給大家解釋。
-
我們經常用到的日誌組件有哪些?
commons-logging log4j slf4j logback java.util.logging(JDK自帶) -
各個組件介紹
commons-logging 是apache最早提供的日誌的門面接口,記住這是定義的接口,使用者可以使用不同的 日誌實現,面向接口編程,如果需要更換具體的實現,成本很低。
log4j 這是具體的日誌實現,最經典的日誌組件,不過目前使用的越來越少。
slf4j 這也是日誌的門面接口,是目前比較流行的日誌門面組件。
logback 具體日誌的實現,目前使用比較廣泛,是log4j的作者又一頂力之作,性能較log4j有較大提升。
java.util.logging JDK自帶的日誌實現,用的人比較少,就不多做概述。 -
各組件之間如何使用
①.commons-logging和slf4j是java中的日誌門面,即它們提供了一套通用的接口,具體的實現可以由開發者自由選擇。log4j和logback則是具體的日誌實現方案。
②.通常情況commons-logging和log4j 配套使用,因爲它們是最早出現的日誌組件;slf4j和logback配套使用。
③.那麼commons-logging和logback可以配套使用嗎?slf4j和log4j可以配套使用嗎?
答案是不可以,因爲他們是兩套不同日誌組件,slf4j和logback和log4j相比無論在設計、性能上都有很大升級。logback並不是log4j的升級版,而是作者覺得log4j寫的太爛,不想在原來基礎上升級了。所以他們各自之間想配套使用必須需要一個適配器,也就是下面講到的橋接器。 -
橋接器
jcl-over-slf4j.jar : jcl 代表 java commons logging(commons-logging的簡稱),如果代碼中是基於commons-logging來打印日誌的,想切換成slf4j+logback, 這個jar包必不可少,而且之前的代碼不需要變動。例如:sping中打印日誌就是基於commons-logging+log4j打印日誌的,你的系統用的logback,那麼引入這個jar包就可以。slf4j-jcl.jar : 和上面相反,當系統使用slf4j+logback進行編碼時,如果想切換成commons-logging,引用此jar包,並排除掉logback-classic.jar包,否則會找到兩個綁定。
log4j-over-slf4j.jar :如果你的日誌打印是基於log4j來進行編程的,那麼就引入這個jar, 意思是將log4j橋接到slf4j.
不過要注意要把之前log4j的包給排除掉。slf4j-log4j12.jar : 和上面相反,如果是使用slf4j打印日誌的,如果想切換到log4j則引用此jar包,需要將slf4j-api
給排除掉常用的橋接包就上面幾種。