2009-08-27 10 views
7

Wir haben mehrere Java-Anwendungsserver, die hier laufen, mit mehreren Apps. Sie loggen alle mit Log4J in das gleiche Dateisystem ein, das wir nur aus diesem Grund erstellt haben. Von Zeit zu Zeit kommt es vor, dass das Dateisystem aus dem Raum läuft und die App wirdLog4J kann von Festplatte voll wiederherstellen?

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

Leider ist Log4J nicht diesem Fehler beheben, so dass auch nach Raum im Dateisystem befreit, nicht mehr Protokolle werden aus dieser App geschrieben. Gibt es programmtechnische oder Einstellungsoptionen, um Log4J wieder in Betrieb zu nehmen und die App neu zu starten?

Antwort

1

Was sehen Sie hier ist ein akzeptables Ergebnis? Ich würde in Erwägung ziehen, einen neuen Appender zu schreiben, der den Appender, der auf den Datenträger zugreift, umschließt und versucht, bei der Erkennung von IOExceptions etwas Sinnvolles zu tun. Vielleicht sollte es die zugrunde liegenden Appender-Schreibmethoden in einen try-catch-Block einpacken und Ihnen oder einem Sysadmin eine E-Mail schicken.

+0

Von dem, was ich von http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/helpers/OnlyOnceErrorHandler.html erhalte, wird der Fehler einmal geworfen und danach ist es vorbei. Was ich mir wünschen würde ist, dass, obwohl der Fehler nur einmal ausgelöst wird, der Appender weiterhin versucht, in dieses Dateisystem zu schreiben ... vielleicht mit 5 Minuten Pausen ... es scheint, als wäre ein Wrapper um den Appender eine brauchbare Idee – dertoni

+4

Wenn Sie den OnlyOnceErrorHandler verwenden, können Sie stattdessen den FallbackErrorHandler (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/varia/FallbackErrorHandler.html) verwenden. Auf diese Weise können Sie einen zweiten Appender (vielleicht einen E-Mail-Appender) angeben, wenn der erste nicht mehr schreiben kann. Das wird viel von dem handhaben, was Wrapping tun würde. – GaryF

0

Beschränken Sie die Größe Ihrer Protokolle und versuchen Sie, einen benutzerdefinierten Appender zu verwenden, um Protokolle auf einer Sicherungsmaschine mit viel Speicherplatz zu archivieren.

3

ich das nicht testen haben, aber die Website von logback Staaten:

Graceful Erholung von I/O-Ausfälle

Logback des FileAppender und alle ihre Unterklassen, einschließlich RollingFileAppender, kann sich von E/A-Fehlern wiederherstellen. So, Wenn ein Dateiserver vorübergehend ausfällt, müssen Sie Ihre Anwendung nicht mehr nur neu starten, um die Protokollierung wieder zu starten. Sobald die Datei Server wieder hochfährt, wird der entsprechende Logback-Appender transparent und schnell von der vorherigen Fehlerbedingung wiederherstellen.

Ich nehme an, das gleiche würde für die obige Situation gelten.

Verwandte Themen