Ich benutze log4net mit AdoNetAppender. Es scheint, dass der AdoNetAppender eine Flush method hat. Kann ich das überhaupt von meinem Code aus anrufen?Gibt es sowieso, um den Puffer in log4net programmierbar zu leeren
Ich versuche eine Admin-Seite zu erstellen, um alle Einträge im Datenbankprotokoll anzuzeigen, und ich möchte log4net mit pufferSize = 100 (oder mehr) einrichten, dann möchte ich, dass der Administrator auf ein klicken kann Schaltfläche auf der Admin-Seite, um zu erzwingen, dass log4net die gepufferten Log-Einträge in die Datenbank schreibt (ohne log4net herunterzufahren).
Ist das möglich?
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();
}
}
}
}
bearbeiten:
Ich denke, dass log4net.LogManager.GetRepository(). GetAppenders(); Sie erhalten alle Appender, unabhängig davon, an welchem Logger sie angehängt sind ... –
@Stefan: Gut entdeckt. Ich habe meine Antwort aktualisiert. Vielen Dank. – Alconja
ILoggerRepository repository = LogManager.GetRepository(); IEnumerable appenders = repository.GetAppenders() .OfType (); foreach (var Appender in Appender) appender.Flush(); –