24 votes

Comment vider un FileAppender log4j en mémoire tampon ?

Dans log4j, lorsque j'utilise un FileAppender avec les propriétés BufferedIO=true et BufferSize=xxx (c'est-à-dire que la mise en mémoire tampon est activée), je veux pouvoir vider le journal pendant la procédure d'arrêt normale. Avez-vous une idée de la façon de procéder ?

1voto

Ferran Maylinch Points 394

La seule solution qui a fonctionné pour moi est d'attendre un certain temps :

private void flushAppender(Appender appender) {
    // this flush seems to be useless
    ((AbstractOutputStreamAppender<?>) appender).getManager().flush(); 
    try {
        Thread.sleep(500); // wait for log4j to flush logs
    } catch (InterruptedException ignore) {
    }
}

0voto

rsp Points 14367

Essayez :

LogFactory.releaseAll();

0voto

ewramner Points 3146

J'ai écrit un appender qui corrige ce problème, voir GitHub ou utiliser name.wramner.log4j:FlushAppender dans Maven. Il peut être configuré pour purger les événements de haute gravité et il peut rendre les appenders non purgés lorsqu'il reçoit un message spécifique, par exemple "Shutting down". Consultez les tests unitaires pour des exemples de configuration. Il est gratuit, bien sûr.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X