gpt4 book ai didi

log4net - 有没有办法以编程方式刷新 log4net 中的缓冲区

转载 作者:行者123 更新时间:2023-12-03 01:22:13 25 4
gpt4 key购买 nike

我正在将 log4net 与 AdoNetAppender 结合使用。看来 AdoNetAppender 有一个 Flush method 。无论如何,我可以从我的代码中调用它吗?

我正在尝试创建一个管理页面来查看数据库日志中的所有条目,并且我想使用 bufferSize=100(或更多)设置 log4net,然后我希望管理员能够单击一个按钮在管理页面上强制 log4net 将缓冲的日志条目写入数据库(无需关闭 log4net)。

这可能吗?

最佳答案

假设您正在使用开箱即用的 log4net,您可以像这样向下挖掘并刷新附加程序:

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

编辑:我写了上面的内容,假设您想刷新特定ILog的附加程序(现在我重新阅读了问题,这可能是一个糟糕的假设),但正如 Stefan 在下面的评论中指出的那样,如果您想刷新整个存储库中的所有附加程序,您可以稍微简化代码,如下所示:

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

关于log4net - 有没有办法以编程方式刷新 log4net 中的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045935/

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