天天看點

SpringBoot日志架構選型——Log4j2的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用Log4j2

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

本次介紹的版本是

2.18.0

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的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用Log4j2

響應時間延遲對比圖

SpringBoot日志架構選型——Log4j2的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用Log4j2

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

文末有示範代碼倉。

SpringBoot日志架構選型——Log4j2的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用Log4j2

2. Log4j2文檔介紹

Log4j2官網教程

https://logging.apache.org/log4j/2.x/articles.html

打開官網,就可以看到有中文的教程(

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

):

SpringBoot日志架構選型——Log4j2的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. 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的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用Log4j2

3. SpringBoot使用Log4j2

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

SpringBoot日志架構選型——Log4j2的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. 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的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用Log4j2

排除之後:

SpringBoot日志架構選型——Log4j2的配置與使用1. 名詞介紹2. Log4j2文檔介紹3. SpringBoot使用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>