1. 程式人生 > >Slf4j與log4j及log4j2的關係及使用方法

Slf4j與log4j及log4j2的關係及使用方法

Slf4jlog4jlog4j2的關係及使用方法

 

slf4j

slf4j僅僅是一個為Java程式提供日誌輸出的統一介面並不是一個具體的日誌實現方案就比如JDBC一樣,只是一種規則而已,所以單獨的slf4j是不能工作的,必須搭配其他具體的日誌實現方案,比如log4j或者log4j2,要在系統中使用slf4j,我們需要引入的核心包為:slf4j-api-1.6.4.jar。

如果不想每次都寫private  final Logger logger = LoggerFactory.getLogger(XXX.class); 可以在方法前用註解@Slf4j,然後直接使用log.info去列印日誌。如果註解@Slf4j注入後找不到變數log,那就給IDE安裝lombok外掛(idea中:1、File  → settings →  Plugins,  然後點選“Browse repositories”;2、輸入 lombok 搜尋外掛, 點install安裝,安裝完重啟idea)。

 

log4j

如果在我們系統中單獨使用log4j的話,我們只需要引入log4j的核心包就可以了,我這裡用的是:log4j-1.2.17.jar,然後在系統中使用如下程式碼輸出日誌:

private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Log4jTest.class);

在系統的src目錄下新增依賴的配置檔案:
 

log4j2
  如果在我們系統中單獨使用log4j2的話,我們只需要引入log4j2的核心包就可以了,我這裡用的是:log4j-api-2.7.jar和log4j-core-2.7.jar,然後在系統中使用如下程式碼輸出日誌:

private static org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class);

 在系統的src目錄下新增依賴的配置檔案。

關於log4j2的官方文件介紹,請檢視:http://logging.apache.org/log4j/2.x/index.html

關於log4j2相關配置檔案,大家可以從官方文件中瞭解,也可以參考:http://java12345678.iteye.com/blog/2382929

 

log4j

log4j2的區別:

1.獲取Logger的api不一樣,log4j的api為org.apache.log4j.Logger,而log4j2的api為org.apache.logging.log4j.Logger
2.配置方式不一樣,log4j2對properties的配置支援不是很好,它的格式一般為xml格式或者yaml格式,這種格式的可讀性比較好,各種配置一目瞭然
3.Log4j2.0基於LMAX Disruptor的非同步日誌在多執行緒環境下效能會遠遠優於Log4j 1.x和logback(官方資料是10倍以上)。

 

slf4j+log4j
如果我們在系統中需要使用slf4j和log4j來進行日誌輸出的話,我們需要引入下面的橋接jar包:
log4j核心jar包:log4j-1.2.17.jar
slf4j核心jar包:slf4j-api-1.6.4.jar
slf4j與log4j的橋接包:slf4j-log4j12-1.6.1.jar,這個包的作用就是使用slf4j的api,但是底層實現是基於log4j.

         private static final Logger logger = LoggerFactory.getLogger(Slf4jTest2.class);

 

slf4j+log4j2
如果我們在系統中需要使用slf4j和log4j2來進行日誌輸出的話,我們需要引入下面的jar包:
log4j2核心jar包:log4j-api-2.7.jar和log4j-core-2.7.jar
slf4j核心jar包:slf4j-api-1.6.4.jar
slf4j與log4j2的橋接包:log4j-slf4j-impl-2.7.jar,這個包的作用就是使用slf4j的api,但是底層實現是基於log4j2.

  private static final Logger logger = LoggerFactory.getLogger(Slf4jTest2.class);

 

slf4j+log4j不修改程式碼升級到log4j2
如果我們系統中剛開始用的是slf4j和log4j,然後出於效能考慮,要升級到slf4j和log4j2,並且不需要改動任何程式碼的話(因為我們系統可能是一個大工程,然後基本上每個類都會有日誌輸出,改動程式碼可能牽一髮而動全身),出於這個考慮,我們可以這樣來進行修改(修改依賴):
1、刪除專案中存在的Log4j1.x所必須的log4j和slf4j-log4j12等依賴,例如從我們上面做的去升級的話,需要刪除log4j-1.2.17.jar和slf4j-log4j12-1.6.1.jar
2、新增log4j2和slf4j橋接包:log4j-slf4j-impl-2.7.jar替換log4j和slf4j橋接包:slf4j-log4j12-1.6.1.jar
3、如果我們在系統中使用了log4j的api去獲取Logger的話:

org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Log4jTest.class);

我們需要新增log4j-1.2-api-2.7.jar去替換log4j-1.2.17.jar
4、將log4j的properties檔案修改為log4j2的xml檔案
然後,同樣在系統中使用slf4j的方式獲取日誌:

org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(Self4jTest.class);