是否有可编程地刷新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(); } } }