使用AdoNetAppender刷新Log4Net缓冲区

我正在使用Log4Net和AdoNetAppender,我喜欢在特定时间或时间段内刷新缓冲区。

可能是我没有错,Log4Net不提供这个function,为此我必须创建自己的Appender,但我不知道或者可能是我混淆了如何实现这一点。

谁能帮我这个?

对于flush,我想使用以下代码,但它没有时间或超时function。

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

编辑

Log4Net是在Asp.Net网站上实现的,我需要刷新这个网站。

也许我可以创建每隔2小时执行代码块的Thread并刷新缓冲区。

 public class FlushingAdoNetAppender : AdoNetAppender { private Timer flushTimer; private TimeSpan flushInterval = TimeSpan.FromMinutes(5); public FlushingAdoNetAppender() { // Enable for debugging purposes // LogLog.InternalDebugging = true; } public TimeSpan FlushInterval { /* The interval after which the buffer will be flushed. Defaults to 5 minutes Example config:    */ get { return flushInterval; } set { flushInterval = value; } } public override void ActivateOptions() { flushTimer = new Timer(flushInterval.TotalMilliseconds); LogLog.Debug(GetType(), "Flush timer interval is " + TimeSpan.FromMilliseconds(flushTimer.Interval)); flushTimer.Enabled = true; flushTimer.Elapsed += FlushLog; flushTimer.Start(); base.ActivateOptions(); } protected override void OnClose() { // This is called by log4net when reloading the config flushTimer.Stop(); flushTimer.Dispose(); base.OnClose(); // calls Flush() } private void FlushLog(object sender, ElapsedEventArgs e) { LogLog.Debug(GetType(), "Flushing logs"); Flush(); } }