2011-07-06 9 views
8

Estoy usando slf4j + logback para iniciar sesión en nuestra aplicación. Anteriormente usábamos jcl + log4j y lo movimos recientemente.¿Cómo manejar los errores de disco lleno al iniciar sesión en lobgack?

Debido a la gran cantidad de registros en nuestra aplicación, existe la posibilidad de que el disco esté lleno en el entorno de producción. En tales casos, debemos detener el registro y la aplicación debería funcionar bien. Lo que encontré en la web es que debemos sondear logback StatusManager para tales errores. Pero esto agregará una dependencia con logback para la aplicación. Para log4j, encontré que podemos crear un Appender que detiene el registro en tales escenarios. Eso nuevamente causará una dependencia de la aplicación con log4j.

¿Hay alguna manera de configurar esto con solo slf4j o hay algún otro mecanismo para manejar esto?

+0

Tengo curiosidad, ¿qué sucede actualmente cuando el disco está lleno? ¿Las excepciones brotan de slf4j/logback? Pensé que las bibliotecas de registro no te lanzarían ninguna excepción. –

Respuesta

7

Usted no tiene que ver ni configurar nada. Logback está diseñado para manejar esta situación bastante bien. Una vez que el disco de destino está lleno, logback FileAppender dejará de escribir en él durante un corto período de tiempo. Una vez que esa demora pasa, intentará recuperarse. Si el intento de recuperación falla, el período de espera se incrementa gradualmente hasta un máximo de 1 hora. Si el intento de recuperación tiene éxito, FileAppender comenzará a registrarse de nuevo.

El proceso es totalmente automático y se extiende sin problemas a RollingFileAppender. Consulte también graceful recovery.

En una nota más personal, la recuperación elegante es una de mis funciones de inicio de sesión favoritas.

+0

¿Se almacenarán los eventos en búfer o se perderán aquellos que ocurrieron mientras el disco estaba lleno? –

+1

Los eventos generados durante la falla de IO no se almacenan en el búfer. – Ceki

+1

¿Habrá una notificación en el registro de que los eventos de registro se han eliminado? –

0

Puede intentar extender la clase slf4j.Logger, específicamente la información, depurar, rastrear y otros métodos y consultar manualmente el espacio disponible (a través de File.getUsableSpace()) antes de cada llamada.

De esa manera usted no tendrá ninguna dependencia aplicación

+0

File.getUsableSpace() necesitará la ubicación del archivo de registro, que puede variar de acuerdo con la implementación. – Girish

0

2 opciones reales:

  • añadir una tarea cron en Linux (o programado uno en ventanas) para limpiar su desorden (incl gzip algunos, si es necesario.).
  • comprar un disco duro más grande y realizar manualmente el mantenimiento

  • + registro -reducir

disco completo es como OOM, no se puede saber lo que falla primero cuando se captura. Tratar w/sin memoria (o disco) es previniéndolo. Podría haber muchos casos en los que podría necesitar espacio extra en el disco y la tarea fallaría.

Cuestiones relacionadas