首页 > 其他 > 详细

log4j2用Log4jContextSelector启动参数配置全局异步日志是如何使用disruptor

时间:2019-06-08 12:37:54      阅读:345      评论:0      收藏:0      [点我收藏+]

log4j2用asyncRoot配置异步日志是如何使用disruptor差异有几个:

给disruptor实例的EventFactory不同

此处EventFactory采用的是RingBufferLogEvent.FACTORY,newInstance逻辑大致是:

public RingBufferLogEvent newInstance() {
    final RingBufferLogEvent result = new RingBufferLogEvent();
    if (Constants.ENABLE_THREADLOCALS) {
        result.messageText = new StringBuilder(Constants.INITIAL_REUSABLE_MESSAGE_SIZE);
        result.parameters = new Object[10];
    }
    return result;
}

创建的是 RingBufferLogEvent实例。该对象封装了日志输出的执行动作等。

给disruptor的threadFactory的参数不同

thread factory的名字是"AsyncLogger[" + contextName + "]"

给disruptor的EventHandler不同

此处用RingBufferLogEventHandler,对接RingBufferLogEvent实例处理日志写出。

给disrupto的Translator不同

此处用RingBufferLogEventTranslator,对接RingBufferLogEvent实例组装日志信息。

事件进入队列方式不同

封装了一个叫tryPublish的方法进入队列。

log4j2用Log4jContextSelector启动参数配置全局异步日志是如何使用disruptor

原文:https://www.cnblogs.com/simoncook/p/10990266.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!