Advertisement
xxdriesxx

Logging control

Jun 13th, 2011
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.42 KB | None | 0 0
  1. public partial class LoggingControl : UserControl
  2. {
  3.     private MemoryAppender _logAppender;
  4.     private Thread _loggingThread;
  5.     private bool _isLogging;
  6.  
  7.     public delegate void AppendToLogTextboxDelegate(LoggingEvent loggingEvent);
  8.  
  9.     public MemoryAppender LogAppender
  10.     {
  11.         get { return _logAppender; }
  12.         set
  13.         {
  14.             _logAppender = value;
  15.  
  16.             if (_logAppender != null)
  17.                 Reset();
  18.         }
  19.     }
  20.  
  21.     public bool IsLogging
  22.     {
  23.         get { return _isLogging; }
  24.         set
  25.         {
  26.             _isLogging = value;
  27.  
  28.             if (!_isLogging)
  29.             {
  30.                 if (_loggingThread != null)
  31.                     _loggingThread.Join();
  32.             }
  33.             else
  34.             {
  35.                 Reset();
  36.             }
  37.         }
  38.     }
  39.  
  40.     public LoggingControl()
  41.     {
  42.         InitializeComponent();
  43.  
  44.         logTextbox.ReadOnly = true;
  45.         _isLogging = false;
  46.  
  47.         Disposed += new EventHandler(LoggingControl_Disposed);
  48.     }
  49.  
  50.     private void LoggingControl_Disposed(object sender, EventArgs e)
  51.     {
  52.         StopLogging();
  53.     }
  54.  
  55.     private void Reset()
  56.     {
  57.         logTextbox.Clear();
  58.  
  59.         if (_loggingThread != null)
  60.         {
  61.             StopLogging();
  62.         }
  63.  
  64.         _loggingThread = new Thread(new ThreadStart(StartLogging));
  65.         _loggingThread.Start();
  66.     }
  67.  
  68.     private void StartLogging()
  69.     {
  70.         _isLogging = true;
  71.  
  72.         while (_isLogging)
  73.         {
  74.             LoggingEvent[] events = _logAppender.GetEvents();
  75.  
  76.             if (events != null && events.Length > 0)
  77.             {
  78.                 _logAppender.Clear();
  79.  
  80.                 foreach (LoggingEvent loggingEvent in events)
  81.                 {
  82.                     BeginInvoke(new AppendToLogTextboxDelegate(AppendToLog), new object[] { loggingEvent });
  83.                 }
  84.             }
  85.  
  86.             Thread.Sleep(500);
  87.         }
  88.     }
  89.  
  90.     private void AppendToLog(LoggingEvent loggingEvent)
  91.     {
  92.         string line = loggingEvent.Level + "\t- " + loggingEvent.LoggerName + ": " + loggingEvent.RenderedMessage +
  93.                       "\n";
  94.  
  95.         if (logTextbox.Lines.Length > 99)
  96.         {
  97.             logTextbox.Text.Remove(0, logTextbox.Text.IndexOf('\n') + 1);
  98.         }
  99.  
  100.         Color lineColor = LineColorByLevel(loggingEvent.Level);
  101.  
  102.         logTextbox.SelectionStart = logTextbox.TextLength;
  103.         logTextbox.SelectionColor = lineColor;
  104.         logTextbox.AppendText(line);
  105.         logTextbox.SelectionColor = Color.Black;
  106.     }
  107.  
  108.     private Color LineColorByLevel(Level level)
  109.     {
  110.         if (level == Level.Info)
  111.             return Color.Green;
  112.         else if (level == Level.Debug)
  113.             return Color.Blue;
  114.         else if (level == Level.Warn)
  115.             return Color.DarkCyan;
  116.         else if (level == Level.Fatal)
  117.             return Color.Red;
  118.  
  119.         return Color.Black;
  120.     }
  121.  
  122.     private void StopLogging()
  123.     {
  124.         _isLogging = false;
  125.         _loggingThread.Join();
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement