1. 程式人生 > >log4j和commons- logging(好文整理轉載)

log4j和commons- logging(好文整理轉載)

一 :為什麼同時使用commons-logging和Log4j?為什麼不僅使用其中之一? 

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包刪除即可。就這麼簡單!