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

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

给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实例。该对象封装了日志输出的执行动做等。async

给disruptor的threadFactory的参数不一样

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

给disruptor的EventHandler不一样

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

给disrupto的Translator不一样

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

事件进入队列方式不一样

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

相关文章
相关标签/搜索