log4j2 非同步化日誌的三種方式
阿新 • • 發佈:2019-01-08
轉載自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種方式任選其一即可,不要同時採用)