log4j2非同步Logger 詳解

2022-09-29 11:48:14 字數 955 閱讀 2203

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...