日誌框架那點事

日誌框架介紹

一、簡介

日誌框架
市場上存在非常多的日誌框架。JUL(java.util.logging),JCL(Apache
Commons Logging),Log4j,Log4j2,Logback、SLF4j、jboss-logging等。
Spring Boot在框架內容部使用JCL,spring-boot-starter-logging採用了
slf4j+logback的形式,Spring Boot也能自動適配(jul、log4j2、logback) 並
簡化配置。

在這裏插入圖片描述

我們在使用的過程中,是左邊選一個門面,右邊選一個實現,在我們日常開發中,日誌門面最常用的是SLF4j,jboss-logging幾乎沒用過,而JCL最新一次更新已經是2014年了。所以日誌門面無疑我們會選擇SLF4j,日誌實現我們選用Log4j或者Logback,Logback是Log4j的升級版本。

這裏說明一下:SLF4j與Log4j和Logback是出自同一人之手,Logback是Log4j的升級版本,所以兼容性肯定是最強的。Log4j2是假借Log4j的大名由Aparche公司開發的,功能也非常強大。只不過目前使用的還比較少。

所以日常開發中,我們可以選擇slf4j+ Log4j,或者slf4j+ Logback 。像SpringBoot中使用的就是slf4j+ Logback。

二、使用

日常開發中,最常用的日誌門面就是SLF4j,既然有了門面,所有我們在使用的時候,接口直接使用SLF4j的接口,而不是使用實現類的接口:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

在SLF4j的官網,詳細介紹該怎麼使用,下面我們來看一下官網(https://www.slf4j.org/)的一張圖片:

在這裏插入圖片描述

上圖給出了,我們使用SLF4j和不同的日誌實現需要引入的jar包:

slf4j+logback:slf4j-api.jar 、logback-classic.jar、logback-core.jar

slf4j+log4j : slf4j-api.jar 、log4j.jar、slf4j-log4j12.jar

slf4j+JUL: slf4j-api.jar 、slf4j-jdk14.jar

slf4j+simple: slf4j-api.jar、 slf4j-simple.jar

在使用SLF4j+log4j 的時候,由於log4j比slf4j出現的要早,所以需要加一個適配層也就是slf4j-log4j12.jar。另外,每一個日誌的實現框架都有自己的配置文件。使用slf4j以後,配置文件還是做成日誌實現框架自己本身的配置文
件。

三、歷史遺留問題的解決

假如我們開發中使用的是slf4j+logback,但是我們的項目中引入了其他框架,例如使用了spring,hibernate,mybatis等。然後spring使用的日誌框架是common-logging,而hibernate使用的是jboss-logging,那麼該怎麼解決呢?如何統一讓引入的框架都是用slf4j來輸出日誌?

其實slf4j的官網給出瞭解決方案,看下圖:

在這裏插入圖片描述

我們在正常使用自己所選用的日誌實現方式的同時,將其他框架依賴的日誌實現jar用一箇中間轉換jar包替換掉。可以說是一個狸貓換太子。既然是替換,肯定是先將其他日誌框架依賴的jar包排除掉,然後引入中間包。例如:

spring使用的是commons-logging,那麼我們首先要將commons-logging這個依賴exclution掉,然後引入jcl-over-slf4j.jar,來替代commons-logging,從而嫁接刀slf4j上。

同樣的,使用log4j-over-slf4j.jar來替換log4j.jar;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章