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的方法進入隊列。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM