gpt4 book ai didi

c# - 使用 AdoNetAppender 刷新 Log4Net 缓冲区

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:01 25 4
gpt4 key购买 nike

我将 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 小时执行一次代码块并刷新缓冲区的线程。

最佳答案

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();
}
}

关于c# - 使用 AdoNetAppender 刷新 Log4Net 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com