log4j2异步注意事项

一、log4j2异步类型

1) 使用<Async>标签

示例:

 

<Async name="asyncKafkaLog">
    <AppenderRef ref="Failover" />
</Async>

注意事项: 此类异步队列是BockingQueue,队列默认大小是128

2) 使用<AsyncLogger>标签

示例:

 

<AsyncLogger name="kafkaLogger" level="trace" includeLocation="false">
    <AppenderRef ref="Failover"/>
</AsyncLogger>

注意事项: 此类异步队列是Disruptor队列默认大小是4096

3) 使用 JVM参数

示例:

 

#启动参数方式
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
#代码方式
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

注意事项: 此类异步是全量异步,log4j配置文件里所有logger都自动异步,使用异步队列为Disruptor,队列默认大小4096

二、小提示:

① Disruptor队列性能远胜于BlockingQueue,这也是log4j2性能提升的重要原因之一

② 如果启用了全量异步,又使用了<AsyncLogger>会如何?

log4j2会新建两个Disruptor队列,<AsyncLogger>之流使用一个,其他的使用另外一个,所以建议将可能发生阻塞的logger归类使用一个Disruptor,毕竟是队列,一个阻塞了其他的得乖乖等着

③ 如果默认队列长度不足咋办?

 

#第一步:加大两个Disruptor队列的长度
-DAsyncLogger.RingBufferSize=262144
-DAsyncLoggerConfig.RingBufferSize=262144  
#第二步:设置队列满了时的处理策略:丢弃,否则默认blocking,异步就与同步无异了
-Dlog4j2.AsyncQueueFullPolicy=Discard

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值