Как обрабатывать ошибки переполнения диска при входе в систему? - PullRequest
9 голосов
/ 06 июля 2011

Я использую slf4j + logback для входа в наше приложение. Ранее мы использовали jcl + log4j и недавно переехали.

Из-за большого количества записей в нашем приложении существует вероятность переполнения диска в производственной среде. В таких случаях мы должны прекратить регистрацию и приложение должно работать нормально. Из Интернета я обнаружил, что нам нужно опросить logback StatusManager на наличие таких ошибок. Но это добавит зависимость с logback для приложения. Для log4j я обнаружил, что мы можем создать Appender, который останавливает вход в такие сценарии. Это снова вызовет зависимость приложения с log4j.

Есть ли способ настроить это только с помощью slf4j или есть какой-то другой механизм для обработки этого?

Ответы [ 3 ]

8 голосов
/ 06 июля 2011

Вам не нужно ничего делать или настраивать.Logback разработан, чтобы справиться с этой ситуацией довольно приятно.Когда целевой диск заполнится, logback FileAppender прекратит запись на него на некоторое короткое время.Как только эта задержка истечет, она попытается восстановиться.Если попытка восстановления не удалась, период ожидания постепенно увеличивается до максимум 1 часа.Если попытка восстановления завершится успешно, FileAppender снова начнет запись в журнал.

Процесс полностью автоматизирован и плавно расширяется до RollingFileAppender.См. Также Изящное восстановление.

В более личном примечании, изящное восстановление - одна из моих любимых функций входа в систему.

0 голосов
/ 07 июля 2011

2 реальных варианта:

  • добавить задачу cron в linux (или запланированную в windows), чтобы очистить ваш беспорядок (включая gzip, если нужно).
  • купить больший жесткий диск и вручную выполнить обслуживание

  • + - уменьшить ведение журнала

Диск заполненкак OOM, вы не можете знать, что не получается 1-й, когда поймать его.Работа с нехваткой памяти (или диска) заключается в ее предотвращении.Могло быть много случаев, когда требовалось дополнительное дисковое пространство, и задача не выполнялась.

0 голосов
/ 06 июля 2011

Вы можете попробовать расширить класс slf4j.Logger, в частности, методы info, debug, trace и другие, и вручную запрашивать доступное пространство (через File.getUsableSpace ()) перед каждым вызовом.

Таким образом, вам не нужно будет зависеть от приложения

...