2011-07-06 31 views
8

我正在使用slf4j + logback登錄我們的應用程序。早些時候我們最近使用了jcl + log4j。如何在登錄lobgack時處理磁盤完整錯誤?

由於大量的在我們的應用程序日誌,有磁盤已滿在生產環境中的機會。在這種情況下,我們需要停止記錄,應用程序應該正常工作。我從網上找到的是我們需要輪詢Logback StatusManager以查找這樣的錯誤。但是這會爲應用程序添加一個logback的依賴項。 對於log4j,我發現我們可以創建一個Appender來停止在這種情況下的日誌記錄。這又會導致應用程序依賴log4j。

是否有隻SLF4J配置此方式或是否有任何其他的機制來處理呢?

+0

我很好奇,現在發生了什麼,當磁盤已滿?從slf4j/logback中引發異常嗎?我原以爲日誌庫不會在你身上拋出任何異常。 –

回答

7

你不必做或進行任何配置。 Logback旨在很好地處理這種情況。一旦目標磁盤已滿,logback的FileAppender將停止寫入一段時間。一旦延遲過去,它將嘗試恢復。如果恢復嘗試失敗,等待時間會逐漸增加,最長不超過1小時。如果恢復嘗試成功,則FileAppender將再次開始記錄。

的過程完全是自動且無縫地延伸到RollingFileAppender。另請參見graceful recovery.

在個人筆記,適度恢復是一個我最喜歡的logback功能。

+0

會緩存事件還是磁盤滿了時發生的事件,丟失? –

+1

IO故障期間生成的事件未被緩衝。 – Ceki

+1

日誌中是否有通知記錄事件已被刪除? –

0

您可以嘗試擴展slf4j.Logger類,特別是信息,調試,跟蹤等方法和可用空間每次調用之前手動查詢(通過File.getUsableSpace())。

這樣,你就不需要任何應用程序依賴

+0

File.getUsableSpace()將需要日誌文件位置,該位置可能因部署而異。 – Girish

0

2個實物期權:

  • 在Linux上添加一個cron任務(或安排一個在Windows上)來清理你的爛攤子(包括gzip壓縮一些,如果需要的話)。
  • 購買更大的硬盤,並手動進行維護

  • + - 減少採伐

磁盤已滿就像OOM,你可以不知道什麼時候抓住它什麼失敗1。處理內存不足(或磁盤)是通過阻止它。當需要額外的磁盤空間並且任務失敗時,可能會有很多情況。