天天看點

SpringBoot日志架構選型——Log4j2的配置與使用

Apache Log4j 2是Log4j的更新,對其前身Log4j 1.x進行了重大改進,并提供了Logback中可用的許多改進,同時修複了Logback架構中的一些固作者有問題。雖然2021年出現過重大Bug(非得加N種特性,滿足需求就好不要加各種花裡胡哨的,後期可以考慮插件添加特性),也不妨礙它是Java界目前最火最快最好的日志架構。

本次介紹的版本是​​

​2.18.0​

SpringBoot日志架構選型——Log4j2的配置與使用

SpringBoot日志架構選型——Log4j2的配置與使用

  • ​​1. 名詞介紹​​
  • ​​2. Log4j2文檔介紹​​
  • ​​3. SpringBoot使用Log4j2​​

1. 名詞介紹

在選擇日志架構的時候大家是不是也和我一樣,被各種名詞所困擾?這裡給大家介紹一下吧:

這裡我們先來了解一下什麼是日志門面架構,它就像一個司令官,接受到你的指令之後他會找具體的士兵進行具體的輸出日志操作。那為啥叫門面呢?找人辦事至少得有門路對不。

名詞 作用 簡介
​​JCL​​ 日志門面架構 Apache Commons Logging之前叫Jakarta Commons Logging,簡稱JCL,提供了一個 Log 接口,該接口既輕量級又是其他日志記錄工具包的獨立抽象。它為中間件/工具開發人員提供了一個簡單的日志記錄抽象,允許開發人員選擇特定的日志實作。很遺憾的是它于​

​2014-07-09​

​停止了更新,停在了1.2版本了。
​​SLF4J​​ 日志門面架構 The Simple Logging Facade for Java作為各種日志記錄架構(例如.java.util.loglog,logback,log4j)的簡單外觀或抽象,允許最終使用者在部署時選擇所需的日志記錄架構。Ceki Gülcü建立了SLF4J作為Jakarta commons-logging架構的替代品。

下面介紹的是日志實作架構,這個就是士兵了,司令官接收到指令之後,就會找具體的士兵去執行了,可以是A士兵也可以是B士兵,看開發人員的心情了。

名詞 作用 簡介
​​JUL​​ 日志實作架構 JAVA自帶的日志記錄工具,在java.util.logging包下面,是平台核心日志記錄工具的類和接口。日志記錄 API 的中心目标是支援在客戶站點維護和維護軟體。
​​Log4j​​ 日志實作架構 Apache Log4j 1.x,可惜的是在​

​2015年8月5日​

​停止了更新。作者:Ceki Gülcü
​​Log4j2​​ 日志實作架構 Apache Log4j 2是Log4j的更新,對其前身Log4j 1.x進行了重大改進所有并不相容1.x,并提供了Logback中可用的許多改進,同時修複了Logback架構中的一些固有問題。
​​Logback​​ 日志實作架構 Logback旨在作為流行的log4j項目的繼承者。它由log4j的創始人Ceki Gülcü設計。建立在設計工業強度測井系統方面十年的經驗之上。由此産生的産品,即日志備份,比所有現有的日志記錄系統更快,占用空間更小,有時幅度很大。同樣重要的是,logback提供了其他日志記錄系統中缺少的獨特且相當有用的功能。

那我們來看看Log4j2官網的性能對比吧:

​​https://logging.apache.org/log4j/2.x/manual/async.html#Performance​​與其他日志記錄包的異步吞吐量比較圖

SpringBoot日志架構選型——Log4j2的配置與使用

響應時間延遲對比圖

SpringBoot日志架構選型——Log4j2的配置與使用

通過上面的介紹,我們知道司令員隻能選擇SLF4J了,然後士兵我們也是選擇性能最高的Log4j2了。

文末有示範代碼倉。

SpringBoot日志架構選型——Log4j2的配置與使用

2. Log4j2文檔介紹

Log4j2官網教程

​​https://logging.apache.org/log4j/2.x/articles.html​​​ 打開官網,就可以看到有中文的教程(​

​PS:如果有清楚如何在這裡添加文章的大佬可以滴滴我~​

​):

SpringBoot日志架構選型——Log4j2的配置與使用

SpringBoot配置檔案官網配置:​

​log4j2.xml​

​​​https://github.com/spring-projects/spring-boot/blob/v2.7.2/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/log4j2/log4j2.xml​​

SpringBoot日志架構選型——Log4j2的配置與使用

3. SpringBoot使用Log4j2

我們先來看一下SpringBoot官方推薦的日志實作架構Logback:

SpringBoot日志架構選型——Log4j2的配置與使用

是不是很簡單,直接內建在web裡面了。

我們在使用Log4j2之前需要先排除starter-logging,如下所示:

​​​https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#howto.logging.log4j​​

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</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>      

排除之前的包如下:

SpringBoot日志架構選型——Log4j2的配置與使用

排除之後:

SpringBoot日志架構選型——Log4j2的配置與使用

包加上之後,需要在resources檔案夾下面添加​

​log4j2.xml​

​檔案,在沒有配置之前我們看看效果:

SpringBoot日志架構選型——Log4j2的配置與使用

可以看到隻會列印Error級别的日志。

然後我們到​​https://github.com/apache/logging-log4j2​​,說明裡面添加如下配置。

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

特别注意紅色框的内容,第一個包需要改成你的項目包。或者下面Console級别改成info。

SpringBoot日志架構選型——Log4j2的配置與使用