Log4Net MemoryAppender似乎错过了高速日志事件

我正在使用log4net MemoryAppender在表单文本框中显示我的log4net输出。 我的配置文件的相关部分是:

     

更新表单的代码由计时器触发,如下所示:

 var events = _memoryAppender.GetEvents(); foreach (var loggingEvent in events) { textBoxOutput.Text += loggingEvent.Level + " " + loggingEvent.MessageObject + Environment.NewLine; } _memoryAppender.Clear(); 

它正在工作,但是当我的应用程序在很短的时间内记录了很多消息时,我似乎没有看到它们。 有谁知道发生了什么?

作为一种解决方法,我使用的是Chainsaw和UDP appender:

           

不过,我更喜欢自己的UI,所以我仍在寻找答案。

我假设发生以下情况:当您在文本框中编写日志消息时,将记录新消息。 清除appender中的消息时,还会删除这些未写入文本框的新消息。

您可以通过在开始将消息写入文本框之前清除appender来改善这种情况,但我认为您应该创建自己的内存appender并提供一种方法来返回消息并一步清除数组。 像这样的东西:

 public class MyMemoryAppender : MemoryAppender { public LoggingEvent[] GetAndClearEvents() { lock (m_eventList.SyncRoot) { var events = (LoggingEvent[]) m_eventsList.ToArray(typeof(LoggingEvent)); m_eventsList.Clear(); return events; } } }