最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot使用log4j2異步日志提升性能的實現方式

 更新時間:2022年05月06日 09:21:09   作者:字母哥哥  
這篇文章主要介紹了springboot使用log4j2異步日志提升性能,異步日志實現方式:將日志存入一個單獨的隊列中,有一個單獨的線程從隊列中獲取日志并寫入磁盤文件,需要的朋友可以參考下

同步日志的業(yè)務流程處理和日志打印是在同一個線程,日志打印的過程實際上是寫文件IO的過程,這個過程是相對耗時的,并且會阻塞主線程的執(zhí)行,只有日志打印完成后才會繼續(xù)執(zhí)行業(yè)務處理代碼。如果日志量比較大,會影響主業(yè)務流程的處理效率。異步日志實現方式:將日志存入一個單獨的隊列中,有一個單獨的線程從隊列中獲取日志并寫入磁盤文件。

  • 日志放入隊列的耗時,肯定比磁盤寫IO文件耗時要少的多得多,所以對主業(yè)務流程影響極小。
  • 一個單獨的線程進行日志寫IO磁盤操作,所以不會阻塞主業(yè)務線程的執(zhí)行。

一、引入disruptor

Log4j2基于LMAX公司開發(fā)Disruptor(一個開源的無鎖并發(fā)框架),改善了Log4j和Logback在架構設計方面的缺陷,具有超高的吞吐量和低延遲。所以我們想獲取log4j2異步日志帶來的性能提升,要先引入disruptor 。

<!-- Needed for Async Logging with Log4j 2 -->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.6</version>
</dependency>

二、 全局異步模式

全局異步模式對日志的輸出性能有非常大的提升,是官方推薦的異步日志輸出方式。可以有兩種方式為Spring Boot應用配置異步日志,第一種就是在應用啟動類里面使用System.setProperty,代碼如下:

@SpringBootApplication
public class BootLaunchApplication {
   public static void main(String[] args) {
      //下面語句使得Log4j2日志輸出使用異步處理,減小輸出日志對性能的影響
      System.setProperty("Log4jContextSelector",
                  "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
      SpringApplication.run(BootLaunchApplication.class, args);
   }
}

第二種是通過啟動參數來設置全局異步日志

java -jar -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector boot-launch-1.0.jar

在以上配置完成之后,我們可以在log日志打印的位置下斷點。當我們看到下圖中紅色邊框部分的Log4j2-TF-1-AsyncLogger線程的時候,說明我們的全局異步日志配置成功了。

三、異步/同步混合模式

除了全局異步模式,slf4j還支持異步/同步混合模式。全局異步模式雖然是性能最好的日志輸出方式,但是也是耗費主機資源最多的方式,如果你的應用服務器性能一般,你又想獲得較好的日志輸出性能,可以采用如下的方法。

采用異步/同步混合模式就不需要配置第二小節(jié)中的Log4jContextSelector

在log4j2 xml里面對Loggers配置進行改造,加入AsyncLogger也就是異步日志,只針對com.zimug.boot.launch包(假如已知這個包對處理性能要求比較高)下的代碼產生的日志采用異步模式,其他的日志仍然使用同步模式。

<Loggers>
        <!-- 針對com.zimug.boot.launch包下面的日志采用異步日志 -->
        <AsyncLogger name="com.zimug.boot.launch" level="debug" additivity="false">
            <AppenderRef ref="CONSOLE" level="debug"/>
            <AppenderRef ref="FILE-APPENDER" level="info"/>
        </AsyncLogger>

        <!-- 系統(tǒng)默認日志設置 -->
        <Root level="debug">
            <AppenderRef ref="CONSOLE" level="debug"/>
            <AppenderRef ref="FILE-APPENDER" level="info"/>
        </Root>
</Loggers>

到此這篇關于springboot使用log4j2異步日志提升性能的文章就介紹到這了,更多相關springboot log4j2異步日志內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java并發(fā)機制的底層實現原理分析

    Java并發(fā)機制的底層實現原理分析

    本文主要介紹了Java中并發(fā)編程中常用的一些機制,包括volatile、synchronized和原子操作,volatile是輕量級的同步機制,保證了共享變量的可見性;synchronized是一種重量級的同步機制,通過加鎖和解鎖來保證線程安全
    2025-01-01
  • 使用Spring的JAVA Mail支持簡化郵件發(fā)送功能

    使用Spring的JAVA Mail支持簡化郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了使用Spring的JAVA Mail支持簡化郵件發(fā)送功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java的幾個重要版本_動力節(jié)點Java學院整理

    Java的幾個重要版本_動力節(jié)點Java學院整理

    jdk8 將在2014年3月份發(fā)布,迄今為止,可能是最大更新的java版本,也是令人期待的一個版本,在Java中引入閉包概念對Java程序開發(fā)方法的影響甚至會大于Java5中引入的泛型特征對編程方式帶來的影響
    2017-06-06
  • SpringBoot整合Jackson的過程詳解

    SpringBoot整合Jackson的過程詳解

    這篇文章給大家介紹了SpringBoot整合Jackson的整合過程,文中通過代碼示例給給大家介紹的非常詳細,并附帶附工具類與使用案例,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • MyBatisX插件之domain文件生成不了問題

    MyBatisX插件之domain文件生成不了問題

    文章描述了在使用MyBatisX插件生成MyBatis的domain文件時遇到的問題,特別是在使用MyBatisX版本1.6.1和MySQL版本8.0.34的情況下,生成的domain文件不完整,作者通過勾選Model選項解決了這個問題,并分享了這一經驗,希望能幫助其他遇到類似問題的用戶
    2025-01-01
  • Java toString方法重寫工具之ToStringBuilder案例詳解

    Java toString方法重寫工具之ToStringBuilder案例詳解

    這篇文章主要介紹了Java toString方法重寫工具之ToStringBuilder案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • java微信開發(fā)API第二步 獲取和回復消息

    java微信開發(fā)API第二步 獲取和回復消息

    這篇文章主要為大家詳細介紹了java微信開發(fā)API第二步,獲取消息和回復消息,感興趣的小伙伴們可以參考一下
    2016-06-06
  • java使用ArrayList實現斗地主(無序版)

    java使用ArrayList實現斗地主(無序版)

    這篇文章主要為大家詳細介紹了java使用ArrayList實現斗地主,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java double轉BigDecimal的注意事項說明

    Java double轉BigDecimal的注意事項說明

    這篇文章主要介紹了Java double轉BigDecimal的注意事項說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java ArrayList與Vector和LinkedList的使用及源碼分析

    Java ArrayList與Vector和LinkedList的使用及源碼分析

    ArrayList、Vector、LinkedList類均在java.util包中,均為可伸縮數組,即可以動態(tài)改變長度的數組。ArrayList 和 Vector都是基于存儲元素的Object[] array來實現的,它們會在內存中開辟一塊連續(xù)的內存來存儲
    2022-11-11

最新評論

定南县| 保靖县| 锦屏县| 星子县| 屯门区| 保定市| 浮山县| 峨眉山市| 澄城县| 呼图壁县| 莱西市| 南康市| 黔东| 澄城县| 泰兴市| 托克逊县| 景泰县| 沐川县| 朝阳区| 威远县| 莱西市| 饶平县| 香河县| 扶沟县| 湟中县| 台东县| 大丰市| 华坪县| 呼伦贝尔市| 密云县| 奉化市| 周口市| 邓州市| 昌图县| 射阳县| 会昌县| 方城县| 耿马| 轮台县| 白河县| 康马县|