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);