LogForm.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using MediaBrowser.Common.Implementations.Logging;
  2. using MediaBrowser.Model.Logging;
  3. using NLog.Targets;
  4. using System;
  5. using System.ComponentModel;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. namespace MediaBrowser.ServerApplication.Logging
  10. {
  11. public partial class LogForm : Form
  12. {
  13. private readonly TaskScheduler _uiThread;
  14. private readonly ILogManager _logManager;
  15. public LogForm(ILogManager logManager)
  16. {
  17. InitializeComponent();
  18. _logManager = logManager;
  19. _uiThread = TaskScheduler.FromCurrentSynchronizationContext();
  20. }
  21. protected override void OnLoad(EventArgs e)
  22. {
  23. base.OnLoad(e);
  24. ((NlogManager)_logManager).RemoveTarget("LogWindowTraceTarget");
  25. ((NlogManager)_logManager).AddLogTarget(new TraceTarget
  26. {
  27. Layout = "${longdate}, ${level}, ${logger}, ${message}",
  28. Name = "LogWindowTraceTarget"
  29. }, LogSeverity.Debug);
  30. }
  31. /// <summary>
  32. /// Logs the message.
  33. /// </summary>
  34. /// <param name="msg">The MSG.</param>
  35. public async void LogMessage(string msg)
  36. {
  37. await Task.Factory.StartNew(() =>
  38. {
  39. if (listBox1.Items.Count > 10000)
  40. {
  41. //I think the quickest and safest thing to do here is just clear it out
  42. listBox1.Items.Clear();
  43. }
  44. foreach (var line in msg.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries))
  45. {
  46. if (!string.IsNullOrWhiteSpace(line))
  47. {
  48. listBox1.Items.Insert(0, line);
  49. }
  50. }
  51. }, CancellationToken.None, TaskCreationOptions.None, _uiThread);
  52. }
  53. /// <summary>
  54. /// The log layout
  55. /// </summary>
  56. /// <value>The log layout.</value>
  57. public string LogLayout
  58. {
  59. get { return "${longdate}, ${level}, ${logger}, ${message}"; }
  60. }
  61. /// <summary>
  62. /// Shuts down.
  63. /// </summary>
  64. public async void ShutDown()
  65. {
  66. await Task.Factory.StartNew(Close, CancellationToken.None, TaskCreationOptions.None, _uiThread);
  67. }
  68. protected override void OnClosing(CancelEventArgs e)
  69. {
  70. base.OnClosing(e);
  71. ((NlogManager)_logManager).RemoveTarget("LogWindowTraceTarget");
  72. }
  73. }
  74. }