logback 、log4j 和 log4j2


在 springboot 中使用 log4j 需要引入其依賴並把 springboot 自帶的日志框架 logback 排除掉:

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-log4j</artifactId>

    <version>1.3.8.RELEASE</version>

  </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>

 

=============================================================================

引入log4j2(同log4j一樣,要排除 springboot 自帶的日志框架):

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-log4j2</artifactId>

  </dependency>

<!-- 增加識別yaml格式依賴,加上這個才能辨認到log4j2.yml文件 -->

  <dependency>

    <groupId>com.fasterxml.jackson.dataformat</groupId>

    <artifactId>jackson-dataformat-yaml</artifactId>

  </dependency>

log4j2 異步日志

到目前為止,上述的測試都是針對同步日志進行的測試。在確定了log4j2作為日志框架之后,我想看一下,使用異步日志能不能進一步提高性能表現。

AsyncAppender 和 Asynchronous Loggers

官方文檔也指出:

在這種多線程應用的實踐中需要主要:阻塞隊列很容易發生鎖爭用,測試表明當大量線程並發寫日志的時候,性能甚至會變得更糟糕。所以應該考慮使用無鎖的Asyn Loggers進行優化。

上述的Asyn Loggerslog42 團隊后來才加入的異步實現,連官方文檔都推薦它了,那還有什么好猶豫的呢。它需要引入一個額外的依賴:

 <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version> </dependency> 

Disruptor 通過CAS而不是鎖實現多生產者、多消費者對RingBuffer的並發訪問,實現高吞吐和高性能。

 

全異步和混合異步

Log4j2的異步日志的使用又可以分為全異步混合異步,所謂全異步就是所有的日志都以異步方式輸出;混合異步就是只有指定的代碼文件用異步方式輸出,其他日志使用同步方式輸出;前者能夠獲得更高的性能,也是官方推薦的方式,后者具有更好的靈活性,可以進行針對性配置。

本文中我們直接使用全異步日志。

在springboot中開啟全異步的方式很簡單,只需要在配置文件中加如下配置(yml):

log4j2:  contextSelector: org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 

或者在用java -jar 啟動的時候加入系統參數:

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

springboot 中多環境日志配置

在springboot中我們通常針對dev,test,live等多種環境會有多套配置文件,比如application-dev.yml,application-test.ymlapplication-live.yml。然后可以在啟動的時候可以通過在全局配置文件application.yml指定某個配置文件來啟用配置:

sping:  profiles:  active: live 

日志同樣有這樣的需求,不同環境使用不同的日志配置,比如dev或test環境需要開啟的log level為DEBUG,而在live環境中卻不需要。這種時候我們只需要寫多套日志配置,比如log4j2-dev.ymllog4j2-test.ymllog4j2-live.yml,然后在其對應的配置文件中啟用日志配置就可以了:

logging:  config: classpath:log4j2-dev.yml
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM