1 非同步logger的意義
之前的日誌框架基本都實現qriio了asyncappender,被證明對效能的提公升作用非常明顯。
在log4j2日誌框架中,增加了對logger的非同步實現。那麼程式設計客棧這一步的解耦,意義何在呢?
如圖,按我目前的理解:非同步logger是讓業務邏輯把日誌資訊放入disruptor佇列後可以直接返回(無需等待「掛載的各個appender」都取走資料www.cppcns.com)
優點:更高吞吐、呼叫log方法更低的延遲。
缺點:異常處理麻煩、 可變日誌訊息問題、更大的cpu開銷、需要等待「最慢的aqriioppender」消費完成。
非同步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.propertiesqriio」,檔案增加以下內容:
「log4jcontextselector=org.apache.logging.log4j.core.async.asyncloggercontextselector」
3,手工指定部分logger採用非同步方式
log4j2.xml配置檔案中使用asyncroot/asynclogger替代root/logger
(上述3種方式任選其一即可,不要同時採用)
本文標題: log4j2非同步logger(詳解)
本文位址:
spring boot的log4j2非同步日誌配置
1 啟動位置設定 system.setproperty log4jcontextselector org.apache.logging.log4j.core.async.asyncloggercontextselector 2 引入非同步日誌依賴 com.lmax disruptor 3.3.7 注...
日誌系列之Log4j2非同步Loggers
log4j2引入非同步loggers,顯著提公升了日誌吞吐量和降低了延時,如下圖所示 基於disruptor,實現了執行緒間通訊的無鎖化 無gc模式 通過物件復用,避免頻繁建立物件,減少gc次數 新增disruptor包 log4j 2.9 and higher require disruptor ...
log4j2 使用詳解
1.log4j2的匯入 2.測試用例 log4j 2.0的使用非常簡單,只要用logmanager的getlogger函式獲取乙個logger,就可以使用logger記錄日誌,如下 import org.apache.logging.log4j.logmanager import org.apach...