1. 程式人生 > >java日誌框架簡介

java日誌框架簡介

java常用日誌框架類別

​ slf4j和commons logging是java領域常用的日誌框架介面,這兩大框架分別對應一些列日誌具體實現框架,

commons logging 是Apache 開源組織下的框架,陣營中主要包括:

log4j:Apache軟體基金會的 一個java專案,它是由Ceki Gülcü首創的 。

log4j 2:它是log4j的改進版本,Apache的又一個開源產品,不相容log4j,同樣具有log back的全部優點,底層採用Disruptor非同步處理框架,日誌處理效能更好。

slf4j陣營中包括:

log back:當前比較流行的日誌框架,log4j作者創立的框架,比log4j效能有顯著提高。

框架選擇

在使Commons Logging時為了減少構建日誌資訊的開銷,通常的做法是

 if(log.isDebugEnabled()){ 

​	log.debug("User name: " + user.getName() );

 }

​ 如果不進行這樣的判斷列印log需要先進行字串拼接操作,如果這樣的操作比較頻繁會影響效能,加入判斷之後能夠避免不必要的字串拼接操作,但是如果輸出的日誌級別比預設日誌級別高會產生兩次判斷,這樣也不是很理想。

​ 在Slf4j中,你只需這麼做:

 log.debug("User name:{} ", user.getName(
);

也就是說,Slf4j把構建日誌的開銷放在了它確認需要顯示這條日誌之後,減少記憶體和Cup的開銷,使用佔位符號,程式碼也更為簡潔。

Slf4j用法

​ slf4j只是一個日誌的門面,提供日誌訪問介面,沒有日誌具體實現,提供了其他日誌實現框架的橋接,這樣可以很好的接入其他的日誌框架,具體橋接關係見下圖:

slf4j接入方式只需要加入slf4j-api-version.jar,不需要任何實現。

<dependencies> <!--只有slf4j-api依賴--> 
<dependency> 
<groupId>org.
slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency> </dependencies

slf4j的實現採用Logback和採用其他元件接入方式一樣,

<dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.13</version>
    </dependency>
    <!--logback-classic依賴logback-core,會自動級聯引入-->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>

​ 在具體的專案中可能存在遺留的日誌元件,各個框架採用的日誌元件不同,可以統一定向到slf4j,再由具體的日誌實現元件處理日誌,slf4j提供了幾個橋接元件,其中log4j-over-slf4j-version.jar 將log4j重定向到slf4j。

​ 在具體的實現上要避免死迴圈的出現,log4j-over-slf4j-version.jar與slf4j-log4j12.jar 同時出現就會出現死迴圈,slf4j-log4j12.jar將日誌實現採用log4j,log4j-over-slf4j-version.jar又將日誌重定向到slf4j,這樣就出現死迴圈。