Using system;
Using system. Collections. Generic;
Using system. componentmodel;
Using system. Data;
Using system. drawing;
Using system. LINQ;
Using system. text;
Using system. Windows. forms;
Using system. Threading;
Using log4net. core;
Namespace log4net_richtextbox
{
Public partial class form2: Form
{
Private Static readonly log4net. ilog log = log4net. logmanager. getlogger (system. reflection. methodbase. getcurrentmethod (). declaringtype );
Private bool logwatching = true;
Private log4net. appender. memoryappender logger;
Private thread logwatcher;
Public form2 ()
{
Initializecomponent ();
This. Closing + = new canceleventhandler (form1_closing );
Logger = new log4net. appender. memoryappender ();
Log4net. config. basicconfigurator. Configure (logger );
Logwatcher = new thread (New threadstart (logwatcher ));
Logwatcher. Start ();
}
Void form1_closing (Object sender, canceleventargs E)
{
Logwatching = false;
Logwatcher. Join ();
}
Delegate void delonestr (string log );
Void appendlog (string _ log)
{
If (txtlog. invokerequired)
{
Delonestr dd = new delonestr (appendlog );
Txtlog. Invoke (DD, new object [] {_ log });
}
Else
{
Stringbuilder builder;
If (txtlog. lines. length> 99)
{
Builder = new stringbuilder (txtlog. Text );
Builder. Remove (0, txtlog. Text. indexof ('\ r', 3000) + 2 );
Builder. append (_ log );
Txtlog. Clear ();
Txtlog. appendtext (builder. tostring ());
}
Else
{
Txtlog. appendtext (_ log );
}
}
}
Private void logwatcher ()
{
While (logwatching)
{
Loggingevent [] events = logger. getevents ();
If (events! = NULL & events. length> 0)
{
Logger. Clear ();
Foreach (loggingevent EV in events)
{
String line = eV. loggername + ":" + eV. renderedmessage + "\ r \ n ";
Appendlog (line );
}
}
Thread. Sleep (500 );
}
}
Private void timereffectick (Object sender, eventargs E)
{
Log. Info (datetime. Now. tostring ());
}
}
}