2011-07-06 6 views
8

私はアプリケーションにログインするためにslf4j + logbackを使用しています。以前はjcl + log4jを使用していましたが、最近移動しました。lobgackにログインしているときにディスクいっぱいのエラーを処理する方法は?

アプリケーションでのログ記録量が多​​いため、運用環境でディスクがいっぱいになる可能性があります。そのような場合、ロギングを停止する必要があり、アプリケーションは正常に動作するはずです。私がWebから見つけたのは、このようなエラーのためにLogback StatusManagerをポーリングする必要があるということです。しかしこれにより、アプリケーションのログバックに依存関係が追加されます。 log4jについては、このようなシナリオでのログインを停止するAppenderを作成できることがわかりました。これにより、log4jによるアプリケーションの依存関係が再び発生します。

slf4jのみでこれを設定する方法はありますか、これを処理する他のメカニズムはありますか?

+0

私は不思議です、現在、ディスクがいっぱいになったらどうなりますか? slf4j/logbackから例外が発生しますか?私はロギングライブラリがあなたに例外をスローしないと思っていたでしょう。 –

答えて

7

を必要としません方法

。 Logbackはこの状況をきれいに処理するように設計されています。ターゲットディスクがいっぱいになると、ログバックのFileAppenderは一定の短い時間書き込みを停止します。その遅延が経過すると、回復を試みます。リカバリが失敗した場合、待機時間は最大1時間まで徐々に増加します。回復が成功すると、FileAppenderは再びログを開始します。

このプロセスは完全に自動であり、シームレスにRollingFileAppenderに拡張されています。また、graceful recovery.

もっと個人的には、私のお気に入りのログバック機能の1つです。

+0

イベントはバッファリングされるか、またはディスクが一杯になったときに発生したイベントは失われますか? –

+1

IO障害中に生成されたイベントはバッファされません。 – Ceki

+1

ログイベントが削除されたという通知がログに記録されますか? –

0

slf4j.Loggerクラス、特にinfo、debug、traceなどのメソッドを拡張し、すべての呼び出しの前に利用可能なスペース(File.getUsableSpace()経由)を手動で照会することができます。あなたはあなたが何を行うかを設定する必要はありません任意のアプリケーションの依存関係

+0

File.getUsableSpace()にはログファイルの場所が必要です。このファイルの場所は、展開によって異なります。 – Girish

0

2リアルオプション:

  • は、Linux上でのcronタスクを追加します(またはWindows上の一予定)(必要であれば、いくつかをgzip込み)あなたの混乱を一掃します。
  • ディスクがいっぱいでOOMのようなものです

を、より大きなハードディスクを購入し、手動でメンテナンス

  • + -reduceロギングを実行、あなたは時にキャッチ、それを第一に失敗したかを知ることはできません。メモリ(またはディスク)を使用して処理することは、それを防止することによるものです。余分なディスクスペースが必要になり、タスクが失敗した場合はたくさんあります。

  • 関連する問題