DotNetLog.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using System;
  2. namespace Wayne.Lib.Log
  3. {
  4. /// <summary>
  5. /// Internal class that implements a System.Diagnostics.TraceListener and forwards all
  6. /// write-requests to an embedded DebugLogger.
  7. /// </summary>
  8. internal class DotNetLog : System.Diagnostics.TraceListener, IIdentifiableEntity
  9. {
  10. #region Fields
  11. private DebugLogger debugLogger;
  12. private bool disposed;
  13. #endregion
  14. #region Construction
  15. /// <summary>
  16. /// Constructor.
  17. /// </summary>
  18. internal DotNetLog()
  19. {
  20. debugLogger = new DebugLogger(this, true);
  21. }
  22. /// <summary>
  23. /// Destructor.
  24. /// </summary>
  25. ~DotNetLog()
  26. {
  27. Dispose(false);
  28. }
  29. #endregion
  30. #region IDisposable Members
  31. /// <summary>
  32. /// Overrides the System.Diagnostics.TraceListener Dispose()-method.
  33. /// </summary>
  34. /// <param name="disposing"></param>
  35. protected override void Dispose(bool disposing)
  36. {
  37. base.Dispose(disposing);
  38. if (!disposed)
  39. {
  40. Deactivate();
  41. debugLogger.Dispose();
  42. debugLogger = null;
  43. disposed = true;
  44. }
  45. }
  46. #endregion
  47. #region IIdentifiableEntity Members
  48. public int Id
  49. {
  50. get { return IdentifiableEntity.NoId; }
  51. }
  52. public string EntityType
  53. {
  54. get { return "DotNetLog"; }
  55. }
  56. /// <summary>
  57. /// This is used by the logger and should never be set by inheriting classes
  58. /// </summary>
  59. public string FullEntityName { get; set; }
  60. public string EntitySubType
  61. {
  62. get { return ""; }
  63. }
  64. public IIdentifiableEntity ParentEntity
  65. {
  66. get { return null; }
  67. }
  68. #endregion
  69. #region Methods: Activate / Deactivate
  70. /// <summary>
  71. /// Checks whether the dotnet debug listener should be activated.
  72. /// </summary>
  73. internal void CheckActive()
  74. {
  75. //if (debugLogger.IsActive())
  76. //{
  77. // // Register myself as a debug listener in the framework.
  78. // if (!System.Diagnostics.Debug.Listeners.Contains(this))
  79. // System.Diagnostics.Debug.Listeners.Add(this);
  80. //}
  81. //else
  82. //{
  83. // // Deregister myself as a debug listener in the framework.
  84. // if (System.Diagnostics.Debug.Listeners.Contains(this))
  85. // System.Diagnostics.Debug.Listeners.Remove(this);
  86. //}
  87. }
  88. /// <summary>
  89. /// Deactivates the dotnet debug listener.
  90. /// </summary>
  91. internal void Deactivate()
  92. {
  93. // Deregister myself as a debug listener in the framework.
  94. //if (System.Diagnostics.Debug.Listeners.Contains(this))
  95. // System.Diagnostics.Debug.Listeners.Remove(this);
  96. }
  97. #endregion
  98. #region Methods: Overrides of the System.Diagnostics.TraceListener
  99. public override void Write(string message)
  100. {
  101. WriteLine(message);
  102. }
  103. public override void WriteLine(string message)
  104. {
  105. try
  106. {
  107. if (!disposed && debugLogger.IsActive())
  108. debugLogger.Add(message);
  109. }
  110. catch (ObjectDisposedException) { }
  111. }
  112. public override void Write(string message, string category)
  113. {
  114. WriteLine(message, category);
  115. }
  116. public override void WriteLine(string message, string category)
  117. {
  118. try
  119. {
  120. if (!disposed && debugLogger.IsActive(category))
  121. debugLogger.Add(message, category);
  122. }
  123. catch (ObjectDisposedException) { }
  124. }
  125. #endregion
  126. }
  127. }