Spring Boot 集成使用log4j2(异步)

log4j2异步的模式,采用的是disruptor高速并发框架,所以速度很快,适合高并发的系统使用。

1、首先要去掉Spring Boot的默认日志

主要是在spring-boot-starter增加例外。

        
            org.springframework.boot
            spring-boot-starter
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        

2、引入log4j2的相关依赖

这里有两种方式:

1)第一种引入Spring Boot的默认配置,Spring Boot来引入相关的日志包。

         
            org.springframework.boot
            spring-boot-starter-log4j2
        

2)第一种直接引入log4j2的相关配置。

这种方式需要引入两个包,一个是core核心实现,一个是API。

        
            org.apache.logging.log4j
            log4j-core
            2.11.2
        
        
            org.apache.logging.log4j
            log4j-api
            2.11.2
        

以上两种,二选一,别重复引入。

3、引入disruptor并发框架

        
            com.lmax
            disruptor
            3.4.2
        

4、设置异步模式

1)完全异步模式

在开始程序里面设置参数,对于参数变量,许多朋友可能看到过“Log4jContextSelector”,也看到过“log4j2.contextSelector”,这两个变量效果是一样的。

System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

或者启动参数里设置

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

同样是循环1W次,输出日志,最后的性能结果如下图所示。注意:因为是异步的,所以控制台的日志就暂时不输出了,否则控制台看不到完成的时间。


Spring-boot-log4j2-完全异步.png

2)异步/同步混合模式

在配置文件中Logger使用,而且可以和混合使用。
主要改动为loggers里面的这一段,增加异步日志输入。

        
            
            
            
        

完整的log4j2配置为如下所示。







    
    
        
        
            
            
        
        
        
            
                
                
                
            
            
            
                
                
            
        

        
            
                
                
            
            
            
                
                
            
            
            
        

        
            
            
            
                
                
            
        

    
    
    
        
            
            
        
        
            
        
    

这里需要注意的是,如果使用,includeLocation="true"是必须要设置才会有类路径等一些信息打印出来。最后的性能结果如下图所示。


Spring-boot-log4j2-混合.png

5、性能比较

最后说明,通过学习前面的同步配置,我们可以看出性能梯度为:
全异步>混合模式>同步

其它注意

本文章样例:
工程名:spring-boot-log4j2-async
GitHub:https://github.com/zzyjb/SpringBootLearning

你可能感兴趣的:(Spring Boot 集成使用log4j2(异步))