是否有可编程地刷新log4net中的缓冲区

我用AdoNetAppender使用log4net。 AdoNetAppender似乎有一个Flush方法 。 无论如何,我可以从我的代码中调用它吗?

我试图创build一个pipe理页面来查看数据库日志中的所有条目,我想要设置log4net的缓冲区大小= 100(或更多),然后我希望pipe理员能够点击pipe理button页面强制log4net将缓冲的日志条目写入数据库(不closureslog4net)。

那可能吗?

假设你使用的是开箱即​​用的log4net,你可以按照下面的方式挖出appender:

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

编辑 :我写了上面的假设,你想刷新appenders一个特定的ILog (可能是一个坏的假设,现在我重新读这个问题),但正如斯蒂芬在下面的评论中指出,你可以简化代码如果你想冲刷整个资料库中的所有appender,如下所示:

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