Logger來自log4j自己的套件。如果用Logger.getLogger,需要一個log4j的jar包,用此方式你只能依log4j:
LogFactory來自common-logging套件。如果用LogFactory.getLog,你可以用任何實作了通用日誌介面的日誌記錄器取代log4j,而程式不受影響。 apache的common-logging包是通用日誌接口,透過這個中間層,你可以隨便指定到底用哪個日誌系統。增加系統的靈活性。若log4j它不存在, commons-logging 會另行選擇其它的日誌實作類別。 這樣保證了程式中不一定要使用log4j這個日誌檔了
增強靈活性的理由:
1)先在classpath 下尋找自己的設定檔commons-logging.properties ,如果找到,則使用其中定義的Log 實作類別;
2)如果找不到commons-logging.properties 文件,則在尋找是否已定義系統環境變數org.apache.commons.logging.Log ,找到則使用其定義的Log 實作類別;
3)否則,請查看classpath 中是否有Log4j 的套件,如果發現,則自動使用Log4j 作為日誌實作類別;
4)否則,使用JDK 自身的日誌實作類別( JDK1.4 以後才有日誌實作類別);
5)否則,使用commons-logging 自己提供的一個簡單的日誌實作類別SimpleLog ;
為了簡化配置commons-logging ,一般不使用commons-logging 的配置文件,也不設置與commons-logging 相關的系統環境變量,而只需將Log4j 的Jar 包放置到classpash 中就可以了。這樣就很簡單地完成了commons-logging 與Log4j 的融合。
根據不同的性質,日誌資訊通常被分成不同的級別,從低到高依次是:「調試( DEBUG )」「訊息( INFO )」「警告( WARN )」「錯誤(ERROR )」「致命錯誤( FATAL )」。
基於common-logging的運作方式:
複製代碼代碼如下:
package org;
import org.apache.commons.logging.Log;
import org.apache.log4j.Logger;
public class Test extends TagSupport{
public static Log log=LogFactory.getLog(Test.class);
public static void test()
{
log.debug("111");
log.info("125");
log.warn("485");
log.error("error");
}
public static void main(String[] a)
{
Test.test();
}
}
基於log4j的運行方式
複製代碼代碼如下:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class TestLog4j {
static Logger logger = Logger.getLogger(TestLog4j.class);
public static void main(String args[]) {
PropertyConfigurator.configure("log4j.properties");
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}
commons-logging 僅僅對Log4j( 當然還包括其它LOG 實作) 作了一層包裝,具體的日誌輸出還是在內部轉交給身後的Log4j 來處理,還有log4j會預設的去classes目錄下去尋找log4j.properties 文件