簡體   English   中英

何時在log4j配置中使用隨機訪問文件附加器與緩沖文件附加器

[英]When to use Random Access File Appenders vs. Buffered File Appenders in log4j configuration

我一直在尋找優化我的Log4J配置來提高吞吐量和減少延遲,我正在嘗試確定最佳設置。 我正在處理一個系統,其中代碼必須是無錯誤的,可靠的,並且系統性能是最重要的,從最重要到最不重要。

我覺得非常清楚異步記錄器在最佳性能方面是明顯的贏家,這是完全合理的。 我不理解隨機訪問文件附加器與緩沖文件附加器的權衡。 我在這里查看了log4j網站但我沒有看到使用隨機訪問文件附加程序的任何真正的缺點。

有人可以解釋這些差異,並解釋每個應該使用的時間嗎?

興趣點:

  • RandomAccessFileAppenders總是被緩沖。 從beta-9開始,緩沖區大小為256 * 1024字節,不可配置。 這將在下一版本中配置。
  • 可以使用bufferedIO屬性配置FileAppenders以進行緩沖。 從beta-9開始,緩沖區大小為8 * 1024字節,不可配置。 這將在下一版本中配置。

  • 在引擎蓋下,FileAppenders使用java.io.FileOutputStream,它可以包裝在BufferedOutputStream中。 RandomAccessFileAppenders寫入ByteBuffer,當緩沖區已滿或調用flush()時,ByteBuffer附加到RandomAccessFile的末尾。 應該沒有太大差異(除了性能)但FileAppenders有更長的跟蹤記錄,並且可能仍然存在尚未發現的較新的RandomAccessFileAppender的問題。 翻轉似乎適用於兩種類型的appender,但可能存在團隊尚未了解的極端情況。 (Log4J2正在積極開發中,任何問題都將得到迅速解決。)

  • 可以使用immediateFlush屬性配置RandomAccessFileAppender和FileAppender,以將每個日志事件刷新到磁盤。 我建議您在使用AsyncAppenders或AsyncLoggers時關閉immediateFlush ,這樣您就可以利用它們提供的良好批處理行為:異步appender和logger在記錄多個事件后可以刷新,並且當隊列再次為空時也肯定會刷新一次,這非常有效並同時確保所有日志事件始終保持為磁盤。

隨機訪問直接寫入文件而不進行緩沖。 這比緩沖寫入更慢但更可靠,因為緩沖寫入可能會在發生崩潰時丟失一些未刷新的寫入。 您需要決定哪個對您更重要。 從你的三個清單中不清楚。

編輯人們會期望一個名為RandomAccessAppender的類會使用隨機訪問,這意味着沒有緩沖,但顯然它沒有!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM