2009-08-27 80 views
7

我們有幾個運行在這裏的java應用程序服務器,有幾個應用程序。他們都將Log4J記錄到同一個文件系統中,我們只是爲此創建了這個文件系統。 不時碰巧的是,文件系統運行的空間和應用得到Log4J能夠從磁盤恢復完整?

log4j:ERROR Failed to flush writer,            
java.io.IOException 

不幸的Log4J沒有從錯誤中恢復,所以,即使在空間在文件系統中,沒有更多的日誌中解脫出來是從該應用程序寫入。除了重新啓動應用程序之外,是否有任何選擇,以編程方式或設置方式讓Log4J再次運行?

回答

1

你在這裏看到什麼是可接受的結果?我會考慮編寫一個新的Appender來包裝任何appender訪問磁盤,並且當它檢測到IOExceptions時試圖做一些明智的事情。也許可以讓它將底層的Appenders寫入方法包裝在try-catch塊中,並向您或系統管理員發送一封電子郵件。

+0

從我從http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/helpers/OnlyOnceErrorHandler.html中收集到的錯誤一次拋出,之後就結束了。我所希望的是,儘管錯誤只出現一次,appender仍會繼續嘗試寫入該文件系統...也許需要5分鐘的暫停......它似乎是一個圍繞appender的包裝器,它是一個可行的想法 – dertoni 2009-08-27 10:04:10

+4

如果您使用的是OnlyOnceErrorHandler,則可以考慮使用FallbackErrorHandler(http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/varia/FallbackErrorHandler.html)。這樣,你可以指定第二個appender(也許是電子郵件appender),當第一個appender不能再寫的時候。這將處理很多包裝會做的事情。 – GaryF 2009-08-27 12:16:31

0

限制您的日誌大小,並嘗試使用自定義appender將日誌存檔到具有大量磁盤空間的備份計算機。

3

我沒有測試這一點,但logback狀態的網站:

從I/O故障適度恢復

的logback的FileAppender及其所有子類,包括 RollingFileAppender進行,可以從I/O故障中正常恢復。因此,如果文件服務器暫時發生故障,您不再需要重新啓動 應用程序,以便再次進行日誌記錄。只要文件 服務器恢復運行,相關的logback appender就會透明地 並快速從先前的錯誤狀態中恢復。

我假設對於上述情況也是如此。