SpringBoot將logback替換成log4j2的操作步驟
一 為何要替換成log4j2
1.1 log4j2的優(yōu)點(diǎn)
log4j2使用了兩種方式記錄日志:AsyncAppender和AsyncLogger。
1.AsyncAppender使用隊(duì)列異步記錄日志,但是一旦隊(duì)列已滿,appender線程需要等待。
2.AsyncLogger是采用Disruptor,通過(guò)環(huán)形隊(duì)列無(wú)阻塞隊(duì)列作為緩沖,多生產(chǎn)者多線程的競(jìng)爭(zhēng)是通過(guò)CAS實(shí)現(xiàn),無(wú)鎖化實(shí)現(xiàn),可以降低極端大的日志量時(shí)候的延遲尖峰,Disruptor 可是號(hào)稱一個(gè)線程里每秒處理600萬(wàn)訂單的高性能隊(duì)列。
注意的是: 使用AsyncLogger才會(huì)使用disruptor提高性能。如果使用的AsyncAppender,則使用的是類似logback一樣的隊(duì)列的方式做異步記錄。
1.2 log4j2.xml如何讀取application.yml中屬性值
1.2.1 操作步驟
1.在application.properties 或者application.yml文件中配置
patcher.log=/data350/fengqxLogFile/patcher
2.編寫(xiě)監(jiān)聽(tīng)器
@Component
public class LoggerListener implements ApplicationListener<ApplicationEvent>, Ordered {
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
if (applicationEvent instanceof ApplicationEnvironmentPreparedEvent) {
ConfigurableEnvironment environment = ((ApplicationEnvironmentPreparedEvent) applicationEvent).getEnvironment();
String filePath = environment.getProperty("patcher.log");
if (StringUtils.isNotEmpty(filePath)) {
System.err.println("=================" + filePath);
System.setProperty("patcher.log", filePath);
}
}
}
@Override
public int getOrder() {
// 當(dāng)前監(jiān)聽(tīng)器的啟動(dòng)順序需要在日志配置監(jiān)聽(tīng)器的前面,所以此處減 1
return LoggingApplicationListener.DEFAULT_ORDER - 1;
}3.在 /src/main/resources/META-INF/spring.factories進(jìn)行加載監(jiān)聽(tīng)器
org.springframework.context.ApplicationListener=com.longze.patcher.listener.MyLoggerListener
4.log4j2.xml進(jìn)行使用配置是路徑

1.3 log4j&slf4j&log4j2需要的導(dǎo)入的包
Log4j實(shí)例:
import org.apache.log4j.Logger; private static final Logger LOGGER = Logger.getLogger(X.class);
Slf4j實(shí)例:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(X.class);
Log4j2的使用:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; private static final Logger logger = LogManager.getLogger(X.class);
1.4 整合log4j2需要引入的依賴與排除依賴
1.引入依賴
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>com.Imax</groupId>
<artifactId>disruptor</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>排除jar包:

到此這篇關(guān)于SpringBoot將logback替換成log4j2的操作步驟的文章就介紹到這了,更多相關(guān)SpringBoot logback替換成log4j2內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案
這篇文章主要介紹了Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Spring Security攔截器引起Java CORS跨域失敗的問(wèn)題及解決
這篇文章主要介紹了Spring Security攔截器引起Java CORS跨域失敗的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot實(shí)現(xiàn)操作日志記錄的完整指南
在SpringBoot項(xiàng)目中,若將日志記錄代碼散亂地嵌入到每個(gè)業(yè)務(wù)方法的try-catch塊中,會(huì)導(dǎo)致代碼重復(fù)嚴(yán)重,不利于維護(hù),本文將探討如何利用SpringBoot面向切面編程(AOP) 來(lái)優(yōu)雅地解決這一難題,希望對(duì)大家有所幫助2025-08-08
Spring?Bean注冊(cè)與注入實(shí)現(xiàn)方法詳解
首先,要學(xué)習(xí)Spring中的Bean的注入方式,就要先了解什么是依賴注入。依賴注入是指:讓調(diào)用類對(duì)某一接口的實(shí)現(xiàn)類的實(shí)現(xiàn)類的依賴關(guān)系由第三方注入,以此來(lái)消除調(diào)用類對(duì)某一接口實(shí)現(xiàn)類的依賴。Spring容器中支持的依賴注入方式主要有屬性注入、構(gòu)造函數(shù)注入、工廠方法注入2022-10-10
淺談Java之Map 按值排序 (Map sort by value)
下面小編就為大家?guī)?lái)一篇淺談Java之Map 按值排序 (Map sort by value)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
Java 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)示例
Java動(dòng)態(tài)數(shù)組是一種可以任意伸縮數(shù)組長(zhǎng)度的對(duì)象,本文主要介紹了Java 動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

