2009-08-27 52 views
7

ここにはいくつかのアプリがあるjavaアプリケーションサーバーがいくつかあります。それらはすべてLog4Jで同じファイルシステムにログオンします。その理由は、その理由だけです。 時々、ファイルシステムの領域が不足し、アプリは、Log4Jはディスクいっぱいから回復できますか?

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

は、残念ながら、Log4Jのは、このエラーから回復していない取得することが起こるので、そのスペースは、ファイルシステム、これ以上のログに解放された後も、そのアプリから書かれています。アプリケーションを再起動する以外に、Log4Jを再び使用するために、プログラミング上または設定上のオプションはありますか?

答えて

1

ここで受け入れられる結果は何ですか。私はアペンダーがディスクにアクセスしているかどうかをラップする新しいアペンダーを作成し、IOExceptionを検出したら賢明なことをしようとします。たぶんそれは、try-catchブロック内の基本的なAppendersの書き込みメソッドをラップし、あなたまたはsysadminに電子メールを送信することができます。

+0

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/helpers/OnlyOnceErrorHandler.htmlから収集したものから、エラーは1回後にスローされ、それ以降は終了します。私が望むのは、エラーが1回だけスローされたにもかかわらず、アペンダーはそのファイルシステムに書き込もうとしています...おそらく5分の休止を...アペンダーの周りのラッパーが実行可能なアイデアのようです – dertoni

+4

OnlyOnceErrorHandlerを使用している場合は、代わりにFallbackErrorHandler(http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/varia/FallbackErrorHandler.html)を使用することを検討してください。そうすれば、もう1つ書き込めないときに2番目のアペンダー(電子メールアペンダー)を指定することができます。それはラッピングが何をするのかをたくさん扱います。 – GaryF

0

ログのサイズを制限し、カスタムアペンダーを使用して、大量のディスク容量を持つバックアップマシンにログをアーカイブしてみてください。

3

が、私はこれをテストが、logback状態のウェブサイトませんでした:I/O障害から

優雅な回復

LogbackのFileAppenderと RollingFileAppenderを含むすべてのサブクラス、 I/O障害から正常に回復することができます。したがって、 一時的にファイルサーバーに障害が発生した場合は、ログを再び有効にするためにアプリケーションを再起動する必要はなくなりました。ファイル が復旧すると、関連するログバックアペンダは透過的に となり、以前のエラー状態から迅速に回復します。

私は、上記の状況について同じことが当てはまると仮定します。