Limited Memory Appender

public class LimitedMemoryAppender : MemoryAppender
{
    private int _maxSize;
    public LimitedMemoryAppender(string name, int bufferSizeBytes, int maxSize) : base(name, bufferSizeBytes)
    {
        _maxSize = maxSize;
    }
    protected override void Append(LoggingEvent loggingEvent)
    {
        if (RenderedMessages.Length >= _maxSize)
        {
            base.Append(loggingEvent);
        }
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="DEBUG" />
    <appender-ref ref="LimitedMemoryAppender" />
  </root>
  <appender name="LimitedMemoryAppender" type="YourNamespace.LimitedMemoryAppender, YourAssembly">
    <bufferSize value="4096" />
    <maxSize value="1048576" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message%newline" />
    </layout>
  </appender>
</log4net>
using log4net;
// 로거 가져오기
private ILog log = LogManager.GetLogger(typeof(MyClass));
// 메시지 로깅
log.Debug("Debug message");
log.Info("Info message");
log.Warn("Warning message");
log.Error("Error message");
log.Fatal("Fatal message");
// 메모리 내용 출력
var limitedMemoryAppender = (LimitedMemoryAppender)LogManager.GetRepository().GetAppenders().Single(a => a.Name == "LimitedMemoryAppender");
Console.WriteLine(limitedMemoryAppender.RenderedMessages);