假设你正在使用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();
}
}
}
}
编辑:我写了上面的假设下你想冲洗一个特定的appender ILog
(现在我重新阅读这个问题可能是一个错误的假设),但正如Stefan在下面的评论中指出的那样,如果你想冲刷所有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.LogManager.GetRepository()。GetAppenders();不管他们连接到什么记录器,都能让你获得所有appender ... – 2010-06-15 07:58:42
@Stefan:看上去很好。我已经更新了我的答案。谢谢。 – Alconja 2010-06-15 23:24:55
ILoggerRepository repository = LogManager.GetRepository(); IEnumerable appenders = repository.GetAppenders().OfType (); (appender) appender.Flush(); –
2010-11-26 15:36:21