欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

一、引入disruptor

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

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

二、 全局異步模式

全局異步模式對(duì)日志的輸出性能有非常大的提升,是官方推薦的異步日志輸出方式??梢杂袃煞N方式為Spring Boot應(yīng)用配置異步日志,第一種就是在應(yīng)用啟動(dòng)類里面使用System.setProperty,代碼如下:

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

第二種是通過(guò)啟動(dòng)參數(shù)來(lái)設(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線程的時(shí)候,說(shuō)明我們的全局異步日志配置成功了。

三、異步/同步混合模式

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

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

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

<Loggers>
        <!-- 針對(duì)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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 嵌套類的詳解及實(shí)例代碼

    java 嵌套類的詳解及實(shí)例代碼

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

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

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

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

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

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

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

    Java遞歸如何正確輸出樹(shù)形菜單

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

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

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

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

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

    IntelliJ IDEA修改編碼的方法步驟

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

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

    下面小編就為大家?guī)?lái)一篇java在文件尾部追加內(nèi)容的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • SpringBoot升級(jí)指定jackson版本的問(wèn)題

    SpringBoot升級(jí)指定jackson版本的問(wèn)題

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

最新評(píng)論