60 votes

Est-il possible de vider par programmation le tampon dans log4net?

Je suis l'aide de log4net avec AdoNetAppender. Il semble que le AdoNetAppender a une méthode Flush. Est-il de toute façon je peux l'appeler à partir de mon code?

Je suis en train de créer une page admin pour afficher toutes les entrées dans le journal de base de données, et j'aimerai installation de log4net avec bufferSize=100 (ou plus), alors je veux l'administrateur pour être en mesure de cliquer sur un bouton sur la page d'administration de la force de log4net à l'écriture de la mémoire tampon des entrées de journal dans la base de données (sans fermer log4net).

Est-ce possible?

88voto

Alconja Points 10626

En supposant que vous êtes à l'aide de log4net hors de la boîte, vous pouvez creuser votre chemin vers le bas et vider le appender comme ceci:

public void FlushBuffers()
{
    ILog log = LogManager.GetLogger("whatever");
    var logger = log.Logger as Logger;
    if (logger != null)
    {
        foreach (IAppender appender in logger.Appenders)
        {
            var buffered = appender as BufferingAppenderSkeleton;
            if (buffered != null)
            {
                buffered.Flush();
            }
        }
    }
}

Edit: j'ai écrit ci-dessus en partant de l'hypothèse que vous avez voulu vider les appenders pour un ILog (probablement une mauvaise hypothèse maintenant que j'ai relu la question), mais comme Stefan souligne dans un commentaire ci-dessous, vous pouvez simplifier un peu le code si vous voulez vider toutes les appenders à travers l'ensemble du référentiel comme suit:

public void FlushBuffers()
{
    ILoggerRepository rep = LogManager.GetRepository();
    foreach (IAppender appender in rep.GetAppenders())
    {
        var buffered = appender as BufferingAppenderSkeleton;
        if (buffered != null)
        {
            buffered.Flush();
        }
    }
}

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