項(xiàng)目為什么引入log4j而不是logback代碼
什么是slf4j
SLF4J,即簡(jiǎn)單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務(wù)于各種各樣的日志系統(tǒng)。按照官方的說法,SLF4J是一個(gè)用于日志系統(tǒng)的簡(jiǎn)單Facade,允許最終用戶在部署其應(yīng)用時(shí)使用其所希望的日志System。
上面已經(jīng)介紹了slf4j,那么至于為什么使用它。Slf4j可以看成是接口,那么既然是接口,實(shí)現(xiàn)在哪里呢?實(shí)現(xiàn)就是基于你自己的系統(tǒng)需要引入什么日志。我這里使用了log4j作為slf4j的實(shí)現(xiàn)。那么就可以通過slf4j來輸出日志。
試想一下,如果你使用了第三方的類庫,那么比如別人使用了java.util.logging.Logger這個(gè)類庫系統(tǒng),那么你的項(xiàng)目使用的是log4j日志系統(tǒng),你是不是要重新引入2種日志系統(tǒng)呢?那現(xiàn)在就有人為了解決這個(gè)問題,就提供了slf4j這個(gè)日志接口類庫。你只要使用slf4j就可以了,至于你系統(tǒng)使用什么類庫作為我的實(shí)現(xiàn),我不管。那么這樣問題就解決了,這也符合java的面向?qū)ο缶幊獭?/p>
代碼部分,由于sprintboot 默認(rèn)使用logback,如果想用log4j, 需要排除掉logback的jar,引入log4j 的jar

看看依賴
<dependencies>
<!--slf4j和log4j日志交換包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!--log4j包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除logback包 -->
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
測(cè)試,生效的是log4j:

如果還原依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
測(cè)試結(jié)果,看到用的是logback:

反正是就要引入這些包, 但是slf4j-api已經(jīng)在springboot-web里了。所以我的代碼中沒有再引入。
//slf4j包 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.8.0-beta2</version> </dependency> //slf4j和log4j日志交換包 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.8.0-beta2</version> </dependency> //log4j包 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version><dependency>
最后講一下用intellij看依賴:
在pom.xml 鼠標(biāo)右鍵


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系
- slf4j與jul、log4j1、log4j2、logback的集成原理
- jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹
- jcl與jul?log4j1?log4j2?logback日志系統(tǒng)機(jī)制及集成原理
- slf4j?jcl?jul?log4j1?log4j2?logback各組件系統(tǒng)日志切換
- Logback與Log4j2日志框架性能對(duì)比與調(diào)優(yōu)方式
- 淺談spring boot 集成 log4j 解決與logback沖突的問題
- 如何將應(yīng)用的log4j替換成logback詳解
- 從log4j切換到logback后項(xiàng)目無法啟動(dòng)的問題及解決方法
相關(guān)文章
SpringBoot打印Banner的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot啟動(dòng)Banner的實(shí)現(xiàn)原理和打印流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
windows上nacos自啟動(dòng)的三種方法小結(jié)
本文主要給大家介紹了windows上nacos自啟動(dòng)的三種方法,借助WinSW.exe添加到服務(wù)列表,修改nacos啟動(dòng)配置以及以開機(jī)"啟動(dòng)"方式——啟動(dòng)Nacos的startup.cmd這三種方法,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下2023-12-12
Struts2之Action接收請(qǐng)求參數(shù)和攔截器詳解
這篇文章主要介紹了Struts2之Action接收請(qǐng)求參數(shù)和攔截器詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
SpringBoot使用WebJars統(tǒng)一管理靜態(tài)資源的方法
這篇文章主要介紹了SpringBoot使用WebJars統(tǒng)一管理靜態(tài)資源的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
idea 多模塊項(xiàng)目依賴父工程class找不到問題的方法
這篇文章主要介紹了idea 多模塊項(xiàng)目依賴父工程class找不到問題的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
java協(xié)程框架quasar和kotlin中的協(xié)程對(duì)比分析
這篇文章主要為大家介紹了java協(xié)程框架quasar和kotlin兩個(gè)協(xié)程對(duì)比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多基本2022-02-02
談?wù)凧ava中try-catch-finally中的return語句
我們知道return語句用在某一個(gè)方法中,一是用于返回函數(shù)的執(zhí)行結(jié)果,二是用于返回值為void類型的函數(shù)中,僅僅是一個(gè)return語句(return ;),此時(shí)用于結(jié)束方法的執(zhí)行,也即此return后的語句將不會(huì)被執(zhí)行,當(dāng)然,這種情況下return語句后不能再有其它的語句了2016-01-01

