Spring Boot 2 中如何使用 Log4j2 記錄日誌

程式猿DD發表於2021-12-31

上一篇我們介紹了Spring Boot 2.x中預設日誌框架Logback的使用。今天繼續說說日誌,接下來我們要講是前段時間爆出核彈漏洞的Log4j2。雖然出了漏洞,讓很多小夥伴痛苦了1-2周(加班),但不可否認的是Log4j2依然是目前效能最好的日誌框架。所以,當Logback效能上無法支撐的時候,替換使用Log4j2還是最為快速便捷的方法。下面,我們就來學習一下如何在Spring Boot 2.x版本中,替換Logback,使用Log4j2記錄日誌。

動手試一試

這裡省略Spring Boot專案的基礎建立,如果您還不會可以看本教程的快速入門

下面的操作你可以基於Spring Boot 2.x中預設日誌框架Logback一文的例子繼續下去,也可以用任何一個Spring Boot 2.x的專案來嘗試。

第一步:在pom.xml中引入Log4j2的Starter依賴spring-boot-starter-log4j2,同時排除預設引入的spring-boot-starter-logging,比如下面這樣:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

第二步:在配置檔案application.properties中,通過logging.config配置指定log4j2的配置檔案位置,比如下面這樣:

logging.config=classpath:log4j2.xml

第三步:在resource目錄下新建log4j2.xml(這裡不絕對,根據第二步中配置的內容來建立),然後加入log4j2的日誌配置,比如,下面這樣:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

主要是方便大家理解如何把log4j2引入Spring Boot,對於log4j2如何配置這裡不做詳細介紹,所以這裡就放個簡單配置讓程式跑起來即可。如果想深入瞭解log4j2的配置,可以點選這裡檢視

OK,到這裡整合過程就結束了。是不是很簡單呢?如果您學習過程中如遇困難?可以加入我們超高質量的Spring技術交流群,參與交流與討論,更好的學習與進步!更多Spring Boot教程可以點選直達!,歡迎收藏與轉發支援!

常見問題

可能有小夥伴會問,之前不是推薦大家用Slf4j來記錄日誌,隔離了具體實現的日誌框架麼?那我怎麼知道這一頓操作之後,真的已經用上Log4j2了呢?

這個其實很好判斷,大家只需要在用到日誌的地方,加個端點,Debug跑起來,觀察下log物件就可以了,比如:

下面這個是使用預設Logback的情況:

使用Logback

下面這個是使用Log4j2的情況

使用Log4j2

最後,因為之前Log4j2有過很大的漏洞問題,大家一定要用最新版本哦!

安全起見,建議您至少要用2.17.0以上的版本(如果用的Spring Boot 2.6.2+,那已經是2.17.0了,不需要擔心)。當然,目前最新已經到2.17.1,您也可以自己升級到2.17.1來使用,如何升級呢?還是按照這篇文章介紹的操作即可。

程式碼示例

本文的完整工程可以檢視下面倉庫中2.x目錄下的chapter8-2工程:

如果您覺得本文不錯,歡迎Star支援,您的關注是我堅持的動力!

歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源

相關文章