亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot使用log4j2異步日志提升性能的實現(xiàn)方式

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

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

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

一、引入disruptor

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

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

二、 全局異步模式

全局異步模式對日志的輸出性能有非常大的提升,是官方推薦的異步日志輸出方式??梢杂袃煞N方式為Spring Boot應(yīng)用配置異步日志,第一種就是在應(yīng)用啟動類里面使用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);
   }
}

第二種是通過啟動參數(shù)來設(shè)置全局異步日志

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

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

三、異步/同步混合模式

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

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

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

<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)默認(rèn)日志設(shè)置 -->
        <Root level="debug">
            <AppenderRef ref="CONSOLE" level="debug"/>
            <AppenderRef ref="FILE-APPENDER" level="info"/>
        </Root>
</Loggers>

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

相關(guān)文章

  • java 嵌套類的詳解及實例代碼

    java 嵌套類的詳解及實例代碼

    這篇文章主要介紹了java 嵌套類的詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java ThreadLocal類應(yīng)用實戰(zhàn)案例分析

    Java ThreadLocal類應(yīng)用實戰(zhàn)案例分析

    這篇文章主要介紹了Java ThreadLocal類應(yīng)用,結(jié)合具體案例形式分析了java ThreadLocal類的功能、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • 超詳細(xì)講解SpringBoot參數(shù)校驗實例

    超詳細(xì)講解SpringBoot參數(shù)校驗實例

    經(jīng)常需要提供接口與用戶交互(獲取數(shù)據(jù)、上傳數(shù)據(jù)等),由于這個過程需要用戶進(jìn)行相關(guān)的操作,為了避免出現(xiàn)一些錯誤的數(shù)據(jù)等,一般需要對數(shù)據(jù)進(jìn)行校驗,下面這篇文章主要給大家介紹了關(guān)于SpringBoot各種參數(shù)校驗的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • JVM回收跨代垃圾的方式詳解

    JVM回收跨代垃圾的方式詳解

    在Java堆內(nèi)存中,年輕代和老年代之間存在的對象相互引用,假設(shè)現(xiàn)在要進(jìn)行一次新生代的YGC,但新生代中的對象可能被老年代所引用的,為了找到新生代中的存活對象,不得不遍歷整個老年代,這樣明顯效率很低下,那么如何快速識別并回收這種引用對象呢
    2024-02-02
  • Java遞歸如何正確輸出樹形菜單

    Java遞歸如何正確輸出樹形菜單

    這篇文章主要為大家詳細(xì)介紹了Java遞歸如何正確輸出樹形菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Java中RocketMq的消費(fèi)方式詳解

    Java中RocketMq的消費(fèi)方式詳解

    這篇文章主要介紹了Java中RocketMq的消費(fèi)方式詳解,RocketMQ的消費(fèi)方式都是基于拉模式拉取消息的,而在這其中有一種長輪詢機(jī)制(對普通輪詢的一種優(yōu)化),來平衡上面Push/Pull模型的各自缺點(diǎn),需要的朋友可以參考下
    2023-10-10
  • mybatis中string和date的轉(zhuǎn)換方式

    mybatis中string和date的轉(zhuǎn)換方式

    這篇文章主要介紹了mybatis中string和date的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • IntelliJ IDEA修改編碼的方法步驟

    IntelliJ IDEA修改編碼的方法步驟

    這篇文章主要介紹了IntelliJ IDEA修改編碼的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java在文件尾部追加內(nèi)容的簡單實例

    java在文件尾部追加內(nèi)容的簡單實例

    下面小編就為大家?guī)硪黄猨ava在文件尾部追加內(nèi)容的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • SpringBoot升級指定jackson版本的問題

    SpringBoot升級指定jackson版本的問題

    這篇文章主要介紹了SpringBoot升級指定jackson版本,本文給大家分享了漏洞通告及修改Springboot中jackson版本的問題,需要的朋友可以參考下
    2022-08-08

最新評論