2011-07-06 1 views
8

J'utilise slf4j + logback pour se connecter à notre application. Plus tôt, nous utilisions jcl + log4j et avons déménagé récemment. En raison de la grande quantité de journalisation dans notre application, il y a une chance de disque plein dans l'environnement de production. Dans de tels cas, nous devons arrêter la journalisation et l'application devrait fonctionner correctement. Ce que j'ai trouvé sur le web, c'est que nous devons interroger StatusManager logback pour de telles erreurs. Mais cela ajoutera une dépendance avec le logback pour l'application. Pour log4j, j'ai trouvé que nous pouvons créer un Appender qui arrête de se connecter dans de tels scénarios. Cela provoquera à nouveau une dépendance d'application avec log4j.Comment gérer les erreurs de disque complet lors de la connexion lobgack?

Existe-t-il un moyen de configurer ceci avec seulement slf4j ou existe-t-il un autre mécanisme pour gérer cela?

+0

Je suis curieux, que se passe-t-il actuellement lorsque le disque est plein? Existe-t-il des exceptions à partir de slf4j/logback? J'aurais pensé que les bibliothèques de journalisation ne vous lanceraient aucune exception. –

Répondre

7

Vous ne devez pas faire ou quoi que ce soit configurer. Logback est conçu pour gérer cette situation plutôt bien. Une fois le disque cible saturé, le FileAppender du journal s'arrête d'y écrire pendant un certain temps. Une fois ce délai écoulé, il tentera de récupérer. Si la tentative de récupération échoue, la période d'attente est augmentée progressivement jusqu'à un maximum de 1 heure. Si la tentative de récupération réussit, FileAppender recommencera à se connecter.

Le processus est entièrement automatique et s'étend de manière transparente à RollingFileAppender. Voir aussi graceful recovery.

Sur une note plus personnelle, la récupération gracieuse est l'une de mes fonctionnalités de retour en arrière préférées.

+0

Est-ce que les événements seront tamponnés ou sont ceux qui se sont produits pendant que le disque était plein, perdu? –

+1

Les événements générés lors d'une panne d'E/S ne sont pas mis en mémoire tampon. – Ceki

+1

Y aura-t-il une notification dans le journal indiquant que les événements de journal ont été supprimés? –

0

Vous pouvez essayer d'étendre la classe slf4j.Logger, en particulier les méthodes info, debug, trace et autres, et interroger manuellement l'espace disponible (via File.getUsableSpace()) avant chaque appel.

De cette façon, vous aurez pas besoin de dépendance de l'application

+0

File.getUsableSpace() nécessite l'emplacement du fichier journal, qui peut varier en fonction du déploiement. – Girish

0

2 options réelles:

  • ajouter une tâche cron sur linux (ou prévu un sous Windows) pour nettoyer votre mess (y compris certains gzip, le cas échéant.).
  • acheter un disque dur plus grand et effectuer manuellement l'entretien

  • + exploitation forestière -Réduire

Le disque est plein comme OOM, vous ne pouvez pas savoir ce qui échoue 1er quand attraper. Traiter sans mémoire (ou disque) est en l'empêchant. Il pourrait y avoir beaucoup de cas où l'espace disque supplémentaire pourrait être nécessaire et la tâche a échoué.

Questions connexes