MemoryAppender будет только «добавляться» в память и, таким образом, в основном будет полезен только для целей разработки и тестирования. И в настоящее время нет приложения, которое будет добавляться только при завершении работы приложения.
SMTPAppender - нечто среднее, поскольку он наследует BufferingAppenderSkeleton . Эти дополнения имеют свойство BufferSize, которое контролирует, сколько сообщений хранится в памяти до их сброса.
Какие сообщения, передаваемые аппендерам, контролируются настройками уровня либо в корневом элементе, либо в отдельных элементах регистратора. В вашем случае используйте уровень WARN, который пропустит WARN, ERROR и FATAL. Если вы не хотите получать сообщения об ОШИБКАХ, вам нужно установить фильтр уровня для вашего аппендера.
Обновление: MemoryAppender не использует макет для "рендеринга" объектов сообщений. То, что вы получаете от MemoryAppender - это просто необработанные объекты сообщений, которые создаются log4net. Вы должны будете преобразовать их в значимый текст самостоятельно.
В качестве альтернативы, если вам требуются как функции макета, так и добавление в память, вы можете изучить подклассы AppenderSkeleton . Таким образом, вы получаете базовую поддержку Layout. При реализации метода Append вы можете делать то, что делает MemoryAppender, то есть просто добавлять внутренний список сообщений.
Обновление 2 : для реализации альтернативы MemoryAppender я предлагаю взять MemoryAppender в качестве отправной точки. MemoryAppender является подклассом AppenderSkeleton и, таким образом, имеет доступ к методу RenderLoggingEvent. Итак, мы создаем подкласс MemoryAppender и добавляем метод, который отображает текущий пакет событий журнала:
public class RenderingMemoryAppender : MemoryAppender
{
public IEnumerable<string> GetRenderedEvents()
{
foreach(var loggingEvent in GetEvents())
{
yield return RenderLoggingEvent(loggingEvent);
}
}
}