Предполагая, что вы используете 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
(вероятно, это неправильное предположение, когда я перечитал вопрос), но, как указывает Стефан В приведенном ниже комментарии вы можете немного упростить код, если хотите очистить все приложения во всем хранилище следующим образом:
public void FlushBuffers()
{
ILoggerRepository rep = LogManager.GetRepository();
foreach (IAppender appender in rep.GetAppenders())
{
var buffered = appender as BufferingAppenderSkeleton;
if (buffered != null)
{
buffered.Flush();
}
}
}