J2SE - 關於Commons-Logging、Slf4j、Log4j、Logback的整理

襲冷發表於2018-08-27

一、Commons-Logging

    是Apache提供的一個通用的日誌介面。使用者可以自由選擇第三方的日誌框架如Log4j作為具體實現。Commons-Logging通過動態查詢的機制,在程式執行時自動找出真正使用的日誌庫。好處就是程式碼依賴是Common-Logging而Log4j,避免了和具體的日誌方案直接耦合

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class Tst {
	private static Log logger = LogFactory.getLog(Tst.class);

    public void test(){
        logger.info("order. id=" + o.getId() + ".");
    }
}

二、Slf4j

    即簡單日誌門面(Simple Logging Facade for Java),類似於Commons-Logging,是對不同日誌框架提供的一個門面封裝,不同的是它是在編譯時靜態繫結真正的Log庫。任何一種基於Slf4j的實現都要有一個繫結org.slf4j.impl.StaticLoggerBinder的類。如果有任意兩個實現Slf4j的包同時出現就可能出現問題

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Tst {
	private static final Logger logger = LoggerFactory.getLogger(Tst.class);

    public void test(){
        logger.info("order. id={}.", o.getId());
    }
}

三、Log4j

    是Apache的一個開放源日誌框架,通過使用Log4j可以控制日誌資訊輸送地是控制檯、檔案、GUI元件、套介面伺服器等,也可以控制每一條日誌的輸出格式、定義每一條日誌資訊的級別等,這些都僅通過一個配置檔案就可以靈活地進行配置而不需要修改程式程式碼

四、Logback

    是由Log4j創始人設計的又一個開源日記框架,將作為Log4j的替代和Slf4j組成新的日誌系統的完整實現。Logback當前分成三個模組:Logback-Core是其它兩個模組的基礎模組;Logback-Classic是一個完整實現Slf4j Api的Log4j的改良版本;Logback-Access模組與Servlet容器整合提供通過Http來訪問日誌的功能

五、最後

    1、Commons-Logging 和 Slf4j只是一種日誌抽象門面,不是具體的日誌框架;Log4j 和 Logback是具體的日誌框架 

    2、Slf4j支援引數化的Log字串,避免了字串拼接的麻煩和效能損耗;Logback的整體效能也比Log4j更佳

    3、一般首選使用Slf4j+Logback,或者Slf4j+Log4j、Commons-Logging+Log4j

 

 

 

 

 

相關文章