log4j和commons- logging(好文整理轉載)
Commons-loggin的目的是為“所有的Java日誌實現”提供一個統一的介面,它自身的日誌功能平常弱(只有一個簡單的SimpleLog?),所以一般不會單獨使用它。Log4j的功能非常全面強大,是目前的首選。我發現幾乎所有的Java開源專案都會用到Log4j,但我同時發現,所有用到Log4j的專案一般也同時會用到commons-loggin。我想,大家都不希望自己的專案與Log4j繫結的太緊密吧。另外一個我能想到的“同時使用commons-logging和Log4j”的原因是,簡化使用和配置。
二 :Commons-logging能幫我們做什麼?
提供一個統一的日誌介面,簡單了操作,同時避免專案與某個日誌實現系統緊密a耦合很貼心的幫我們自動選擇適當的日誌實現系統(這一點非常好!)它甚至不需要配置
這裡看一下它怎麼“‘很貼心的’幫我們‘自動選擇’‘適當的’日誌實現系統”:
1) 首先在classpath下尋找自己的配置檔案commons-logging.properties,如果找到,則使用其中定義的Log實現類;
2) 如果找不到commons-logging.properties檔案,則在查詢是否已定義系統環境變數org.apache.commons.logging.Log,找到則使用其定義的Log實現類;
建立一個叫 :CATALINA_OPTS 的環境變數
給他的值 : - Dorg.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog - Dorg.apache.commons.logging.simplelog.defaultlog = warn
3) 否則,檢視classpath中是否有Log4j的包,如果發現,則自動使用Log4j作為日誌實現類;
4) 否則,使用JDK自身的日誌實現類(JDK1.4以後才有日誌實現類);
5) 否則,使用commons-logging自己提供的一個簡單的日誌實現類SimpleLog;
(以上順序不保證完全準確,請參考官方文件)
可見,commons-logging總是能找到一個日誌實現類,並且儘可能找到一個“最合適”的日誌實現類。我說它“很貼心”實際上是因為:
1、可以不需要配置檔案;
2、自動判斷有沒有Log4j包,有則自動使用之;
3、最悲觀的情況下也總能保證提供一個日誌實現(SimpleLog)。
可以看到,commons-logging對程式設計者和Log4j都非常友好。
為了簡化配置commons-logging,一般不使用commons-logging的配置檔案,也不設定與commons-logging相關的系統環境變數,而只需將Log4j的Jar包放置到classpash中就可以了。這樣就很簡單地完成了commons-logging與Log4j的融合。如果不想用Log4j了怎麼辦?只需將classpath中的Log4j的Jar包刪除即可。就這麼簡單!