1. 程式人生 > >log4j2 非同步化日誌的三種方式

log4j2 非同步化日誌的三種方式

轉載自http://blog.csdn.net/heyutao007/article/details/72773077

AsyncLogger的實現邏輯如下圖所示:

非同步Logger是讓業務邏輯把日誌資訊放入Disruptor佇列後可以直接返回(無需等待“掛載的各個Appender”都取走資料)

優點:更高吞吐、呼叫log方法更低的延遲。
缺點:異常處理麻煩、 可變日誌訊息問題、更大的CPU開銷、需要等待“最慢的Appender”消費完成。
非同步Logger會使用Disruptor做高吞吐佇列,非同步Appender會使用ArrayBlockingQueue做佇列。
非同步Logger與非同步Appender都可以設定“佇列滿了之後的策略”,我個人建議都設定為“按日誌級別部分丟棄”。


2 啟用

1,全域性啟用非同步Logger方案一
JVM啟動引數(boot.ini)加上“-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector”
2,全域性啟用非同步Logger方案二
classpath中新增檔案“log4j2.component.properties”,檔案增加以下內容:
“Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector”
3,手工指定部分Logger採用非同步方式

log4j2.xml配置檔案中使用AsyncRoot/AsyncLogger替代Root/Logger
(上述3種方式任選其一即可,不要同時採用)