Ответ 1
Поскольку вас беспокоит только уровень ошибок или хуже событий журнала, и этот трафик, к счастью, редки, я бы предложил настроить ваш appender для немедленного сброса.
<param name="ImmediateFlush" value="true" />
Это избавит вас от необходимости программно очищать приложение при каждом событии журнала (которое в любом случае не работало со звуком). Теперь, если вы хотите открыть свое приложение до большего количества уровней журналов, то, конечно же, сразу же сбрасывание всех событий может иметь большую проблему с производительностью.
ИЗМЕНИТЬ
Я добавил файл конфигурации и простую основную программу, которую я использовал для тестирования. Используя следующее, я вижу, что события журнала сразу же очищаются. Что касается вашего комментария, я также могу вычеркнуть строку ImmediateFlush
из xml и увидеть значение по умолчанию true
для очистки. Я сохранил строку в моем примере для явного указания желаемого поведения.
Основная основная прога:
class Program
{
static void Main(string[] args)
{
ILog log = LogManager.GetLogger(typeof(Program));
XmlConfigurator.Configure(new FileInfo(@"C:\temp\logTest.config"));
string msg;
while ((msg = Console.ReadLine()) != "Done")
{
log.Error(msg);
}
LogManager.Shutdown();
}
}
logTest.config, на который ссылается главная прога:
<log4net>
<appender name="RollingErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\temp\log" />
<param name="AppendToFile" value="true" />
<param name="DatePattern" value="_yyyyMMddHH".log"" />
<param name="RollingStyle" value="Date" />
<param name="StaticLogFileName" value="false" />
<param name="ImmediateFlush" value="true" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%utcdate{yyyy-MM-dd HH:mm:ss.fff},[%thread],%level,%logger,%m%n"/>
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingErrorFileAppender" />
</root>
</log4net>