Y at-il de toute façon pour vider le tampon par programmation dans log4net

J’utilise log4net avec AdoNetAppender. Il semble que AdoNetAppender possède une méthode Flush . Est-ce que je peux appeler ça de mon code?

J’essaie de créer une page d’administration pour voir toutes les entrées dans le journal de firebase database et j’aimerai configurer log4net avec bufferSize = 100 (ou plus), alors je veux que l’administrateur puisse cliquer sur un bouton de l’administrateur page pour forcer log4net à écrire les entrées de journal mises en mémoire tampon dans la firebase database (sans fermer log4net).

Est-ce possible?

En supposant que vous utilisez log4net hors de la boîte, vous pouvez vous frayer un chemin vers le bas et vider l’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 ce qui précède en supposant que vous vouliez vider les appenders pour un ILog spécifique (probablement une mauvaise hypothèse maintenant que j’ai relu la question), mais comme Stefan le remarque dans un commentaire ci-dessous, vous pouvez simplifier le code un peu si vous voulez vider tous les appenders dans tout le 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(); } } }