log4j2用Log4jContextSelector启动参数配置全局异步日志是如何使用disruptor
Posted simoncook
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j2用Log4jContextSelector启动参数配置全局异步日志是如何使用disruptor相关的知识,希望对你有一定的参考价值。
与 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的主要内容,如果未能解决你的问题,请参考以下文章