1、以前進行日誌操做通常都是在一個類中加入以下代碼:
java
import org.apache.log4j.Logger; //引入的是log4j的包 private static final Logger LOG = Logger.getLogger(Test.class);
2、後來看見別人的代碼是這樣寫的:sql
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; //引入的是commons-logging的包 private static Log logger = LogFactory.getLog(AccountAction.class);
3、後來想起使用log4j要把mybatis的sql語句輸出還須要添加slf4j-api-x.x.x.jar和slf4j-log4j12-x.x.x.jar兩個包。看到這麼多日誌,亂七八糟的,因此就度娘了一下,稍微的瞭解了下這些日誌之間的關係。這裏順便給出我的較爲膚淺的總結,看官有更好的理解能夠留言,你們一塊兒學習進步。
apache
1)commons-logging和slf4j-apiapi
這兩個日誌包,都是提供出一個標準接口。相似於JDBC同樣,給出一個接口,具體怎麼實現大家本身去玩。不一樣點在於commons-logging本身有一個簡單的實現。因此,在(二)的代碼中,若是引入了commons-logging沒有引入log4j的架包的話,日誌能正常打印,打印效果以下:mybatis
若是加入log4j的架包的話(須要配置log4j.properties或者log4j.xml),日誌效果以下:學習
簡單而言,commons-logging會先去查找commons-logging.properties配置文件,查找指定的實現日誌,若是沒有,默認去查找log4j(畢竟都是自家作的東西嘛),若是沒有指定,也沒有找到log4j的架包實現,那麼,commons-logging就本身上,結果就是圖片一中的效果。而slf4j就沒有默認實現。spa
二、slf4j-api和slf4j-log4j12日誌
slf4j-api和commons-logging的接口確定存在不一致的地方。有的日誌實現可能沒有遵守slf4j-api的接口來,因此,中間轉換一層。因此slf4j-log4j12就是一個相似於一個轉換器的味道。這裏轉換以後使用的是log4j。固然還有其餘的,好比sli4j-slf4j-logback。code
4、總結xml
1)本身的項目使用建議引入commons-logging和log4j兩個架包,而後使用(二)中的代碼;
2)有的項目使用的多是slf4j,好比mybatis,若是還要繼續使用log4j就須要在引入slf4j-log4j12;
3)即便用log4j兩個組合:【commons-logging+log4j】和【slf4j+slf4j-log4j12+log4j】;
本文只針對log4j,其餘的開源日誌未涉及。菜鳥的看法,大牛勿噴。