传统的log4j,同步打印日志,同时输出许多条日志记录,会采用抢占式,谁先得到输出机会,先打印某条日志。
log4j2,异步打印日志,业务线程将日志输出存放到一个无锁化环形队列(RingBuffer),log4j2的异步线程会从该队列中读取日志,并进行持久化。该环形队列,可以设置缓冲区大小,以及队列满了后,将debug/info/error/trace中某个级别的日志进行剔除。
使用:
maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.6</version>
</dependency
application.properties中配置
logging.config=classpath:log4j2.xml
配置log4j2.xml文件
略
配置 log4j2.component.properties
# 环形队列的大小
AsyncLogger.RingBufferSize=10000
#
AsyncLoggerConfig.RingBufferSize=10000
# 自动降级--丢弃日志
log4j2.AsyncQueueFullPolicy=Discard
# 队列满后丢弃debug级别的日志
log4j2.DiscardThreshold=DEBUG
以上仅个人学习的一点理解,如有误,请各位大佬指教。。