slf4j logback commons-logging log4j 衝突解決辦法

首先介紹一下各個日誌組件的作用以及用法,如果想要解決此類衝突的問題,首先要對它們有一定的瞭解,當你瞭解後,對於以後出現的這類問題能夠迎刃而解,本文會用簡單、易懂的語言給大家解釋。

  1. 我們經常用到的日誌組件有哪些?
    commons-logging log4j slf4j logback java.util.logging(JDK自帶)

  2. 各個組件介紹
    commons-logging 是apache最早提供的日誌的門面接口,記住這是定義的接口,使用者可以使用不同的 日誌實現,面向接口編程,如果需要更換具體的實現,成本很低。
    log4j 這是具體的日誌實現,最經典的日誌組件,不過目前使用的越來越少。
    slf4j 這也是日誌的門面接口,是目前比較流行的日誌門面組件。
    logback 具體日誌的實現,目前使用比較廣泛,是log4j的作者又一頂力之作,性能較log4j有較大提升。
    java.util.logging JDK自帶的日誌實現,用的人比較少,就不多做概述。

  3. 各組件之間如何使用
    ①.commons-logging和slf4j是java中的日誌門面,即它們提供了一套通用的接口,具體的實現可以由開發者自由選擇。log4j和logback則是具體的日誌實現方案。
    ②.通常情況commons-logging和log4j 配套使用,因爲它們是最早出現的日誌組件;slf4j和logback配套使用。
    ③.那麼commons-logging和logback可以配套使用嗎?slf4j和log4j可以配套使用嗎?
    答案是不可以,因爲他們是兩套不同日誌組件,slf4j和logback和log4j相比無論在設計、性能上都有很大升級。logback並不是log4j的升級版,而是作者覺得log4j寫的太爛,不想在原來基礎上升級了。所以他們各自之間想配套使用必須需要一個適配器,也就是下面講到的橋接器。

  4. 橋接器
    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
    給排除掉

    常用的橋接包就上面幾種。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章