Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public partial class LoggingControl : UserControl
- {
- private MemoryAppender _logAppender;
- private Thread _loggingThread;
- private bool _isLogging;
- public delegate void AppendToLogTextboxDelegate(LoggingEvent loggingEvent);
- public MemoryAppender LogAppender
- {
- get { return _logAppender; }
- set
- {
- _logAppender = value;
- if (_logAppender != null)
- Reset();
- }
- }
- public bool IsLogging
- {
- get { return _isLogging; }
- set
- {
- _isLogging = value;
- if (!_isLogging)
- {
- if (_loggingThread != null)
- _loggingThread.Join();
- }
- else
- {
- Reset();
- }
- }
- }
- public LoggingControl()
- {
- InitializeComponent();
- logTextbox.ReadOnly = true;
- _isLogging = false;
- Disposed += new EventHandler(LoggingControl_Disposed);
- }
- private void LoggingControl_Disposed(object sender, EventArgs e)
- {
- StopLogging();
- }
- private void Reset()
- {
- logTextbox.Clear();
- if (_loggingThread != null)
- {
- StopLogging();
- }
- _loggingThread = new Thread(new ThreadStart(StartLogging));
- _loggingThread.Start();
- }
- private void StartLogging()
- {
- _isLogging = true;
- while (_isLogging)
- {
- LoggingEvent[] events = _logAppender.GetEvents();
- if (events != null && events.Length > 0)
- {
- _logAppender.Clear();
- foreach (LoggingEvent loggingEvent in events)
- {
- BeginInvoke(new AppendToLogTextboxDelegate(AppendToLog), new object[] { loggingEvent });
- }
- }
- Thread.Sleep(500);
- }
- }
- private void AppendToLog(LoggingEvent loggingEvent)
- {
- string line = loggingEvent.Level + "\t- " + loggingEvent.LoggerName + ": " + loggingEvent.RenderedMessage +
- "\n";
- if (logTextbox.Lines.Length > 99)
- {
- logTextbox.Text.Remove(0, logTextbox.Text.IndexOf('\n') + 1);
- }
- Color lineColor = LineColorByLevel(loggingEvent.Level);
- logTextbox.SelectionStart = logTextbox.TextLength;
- logTextbox.SelectionColor = lineColor;
- logTextbox.AppendText(line);
- logTextbox.SelectionColor = Color.Black;
- }
- private Color LineColorByLevel(Level level)
- {
- if (level == Level.Info)
- return Color.Green;
- else if (level == Level.Debug)
- return Color.Blue;
- else if (level == Level.Warn)
- return Color.DarkCyan;
- else if (level == Level.Fatal)
- return Color.Red;
- return Color.Black;
- }
- private void StopLogging()
- {
- _isLogging = false;
- _loggingThread.Join();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement