log4net MemoryAppenderを使用して、log4net出力をフォームテキストボックスに表示しています。私の設定ファイルの関連部分は次のとおりです。
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %date %message%newline" />
</layout>
</appender>
フォームを更新するコードはタイマーによって起動され、次のようになります。
var events = _memoryAppender.GetEvents();
foreach (var loggingEvent in events)
{
textBoxOutput.Text += loggingEvent.Level + " " + loggingEvent.MessageObject + Environment.NewLine;
}
_memoryAppender.Clear();
動作していますが、アプリケーションが短時間に大量のメッセージをログに記録すると、それらが表示されないようです。誰かが何が起こっているのか考えていますか?
回避策として、チェーンソーとUDPアペンダーを使用しています。
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="ERROR"/>
</filter>
<param name="RemoteAddress" value="127.0.0.1" />
<param name="RemotePort" value="8080" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j, log4net" />
</appender>
ただし、自分のUIの方が好きなので、まだ答えを探しています。