android 使用log4j2,log4j2用asyncRoot配置異步日志是如何使用disruptor

用asyncRoot配置對應的對接disruptor類是AsyncLoggerConfigDisruptor,用Log4jContextSelector啟動參數配置全局異步的對應的對接disruptor類是AsyncLoggerDisruptor。下面分析的是AsyncLoggerConfigDisruptor

disruptor的創建與啟動需要的部件實現

AsyncLoggerConfigDisruptor.start方法用來創建並啟動disruptor實例

創建disruptor需要EventFactory,ringBuffer的大小,ThreadFactory,ProducerType,等待策略waitStrategy

創建后需要設置ExceptionHandler,設置EventHandler。

發布(生產)事件的translator。

EventFactory

分是否可變(mutable字段)場景對應兩個不同的EventFactory。

不可變的factory的邏輯是:

@Override

public Log4jEventWrapper newInstance() {

return new Log4jEventWrapper();

}

可變的factory邏輯是:

public Log4jEventWrapper newInstance() {

return new Log4jEventWrapper(new MutableLogEvent());

}

會在 Log4jEventWrapper的構造函數中傳入MutableLogEvent實例。

ringBuffer的大小

是根據AsyncLoggerConfig.RingBufferSize配置值算出來的。

這個配置項的值最小不能小於128,默認值分兩種情況進行設定:如果啟用了ENABLE_THREADLOCALS(優化GC的一個配置項),那么默認值是4 * 1024,否則是256 * 1024。

這個配置是通過System properties指定,同樣存在不同版本,配置項名稱不一致的情況,log4j2.asyncLoggerRingBufferSize (AsyncLogger.RingBufferSize)。詳細可以參見這里

ThreadFactory

主要是定制線程名:

線程名格式是:"AsyncLogger

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值