[英]Flush Log4Net buffer with AdoNetAppender
我将Log4Net与AdoNetAppender一起使用,并且我想在特定时间或特定时间段内刷新缓冲区。
可能是我没看错,Log4Net不提供此功能,为此我必须创建自己的Appender,但是我不知道,或者可能是我对如何实现此方法感到困惑。
谁能帮我这个?
对于同花顺,我想使用以下代码,但它没有时间或超时功能。
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:
<appender name="DatabaseAppender" type="Your.Namespace.FlushingAdoNetAppender">
<flushInterval value="00:30:00" />
</appender>
*/
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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.