2016-01-18 147 views
1

背景:LOG4j2異步記錄器阻止功能

在log4j2使用asyncappender當你有設置參數「阻塞」爲假的記錄器,以便其溢出緩衝器大小的任何日誌將被丟棄,不慢的能力主線程。 (見這裏asyncAppender https://logging.apache.org/log4j/2.x/manual/appenders.html下)

我升級我們的應用程序在這裏找到了光榮asyncLogger結構:https://logging.apache.org/log4j/2.x/manual/async.html

,而我看我可以設置環形緩衝區的大小,我看不到任何東西,說明我管不了其阻止應用程序的主線程,

問題:

所以只是爲了某些我要求在這裏,我沒有看到任何東西在文檔中,如果一個人有多個日誌來比原木走出去(說我們將它們存儲在一個數據庫中,插入需要一段時間)當使用asyncloggers時,超出的ringbuffersize會超出額外的日誌?主線程會以任何方式減速?

謝謝!

回答

1

對於異步記錄器,如果您的appender無法跟上應用程序的記錄速率,那麼環緩衝最終會填滿。當環緩衝區已滿時,記錄器將阻止嘗試向環緩衝區添加日誌事件,所以是的,應用程序線程將受到影響。

default ringbuffer size如此之大的原因之一是它可以處理日誌事件的「突發」而不會影響應用程序。但是,選擇適合於(可以處理)應用程序的持續記錄速度的appender非常重要。 (測試2或3倍的目標負載是個好主意。)

FYI,log4j 2附帶的最快appender是RandomAccessFileAppender(及其Rolling variant)。

下一發布版本(2.5.1)will have a feature允許用戶在環形緩衝區已滿80%或更多時丟棄事件(例如DEBUG和TRACE事件)。

1

如果在AsyncAppender上設置了阻塞並且隊列已滿,則會顯示該事件將傳遞給在errorRef屬性上配置的Appender(如果已配置)。

但是,您也問過使用異步記錄器時會發生什麼情況,這是獨立的。由於這一切都是異步的,我很確定它的處理方式與AsyncAppender不同。