using System; namespace Wayne.Lib.Log { /// /// Internal class that implements a System.Diagnostics.TraceListener and forwards all /// write-requests to an embedded DebugLogger. /// internal class DotNetLog : System.Diagnostics.TraceListener, IIdentifiableEntity { #region Fields private DebugLogger debugLogger; private bool disposed; #endregion #region Construction /// /// Constructor. /// internal DotNetLog() { debugLogger = new DebugLogger(this, true); } /// /// Destructor. /// ~DotNetLog() { Dispose(false); } #endregion #region IDisposable Members /// /// Overrides the System.Diagnostics.TraceListener Dispose()-method. /// /// protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposed) { Deactivate(); debugLogger.Dispose(); debugLogger = null; disposed = true; } } #endregion #region IIdentifiableEntity Members public int Id { get { return IdentifiableEntity.NoId; } } public string EntityType { get { return "DotNetLog"; } } /// /// This is used by the logger and should never be set by inheriting classes /// public string FullEntityName { get; set; } public string EntitySubType { get { return ""; } } public IIdentifiableEntity ParentEntity { get { return null; } } #endregion #region Methods: Activate / Deactivate /// /// Checks whether the dotnet debug listener should be activated. /// internal void CheckActive() { //if (debugLogger.IsActive()) //{ // // Register myself as a debug listener in the framework. // if (!System.Diagnostics.Debug.Listeners.Contains(this)) // System.Diagnostics.Debug.Listeners.Add(this); //} //else //{ // // Deregister myself as a debug listener in the framework. // if (System.Diagnostics.Debug.Listeners.Contains(this)) // System.Diagnostics.Debug.Listeners.Remove(this); //} } /// /// Deactivates the dotnet debug listener. /// internal void Deactivate() { // Deregister myself as a debug listener in the framework. //if (System.Diagnostics.Debug.Listeners.Contains(this)) // System.Diagnostics.Debug.Listeners.Remove(this); } #endregion #region Methods: Overrides of the System.Diagnostics.TraceListener public override void Write(string message) { WriteLine(message); } public override void WriteLine(string message) { try { if (!disposed && debugLogger.IsActive()) debugLogger.Add(message); } catch (ObjectDisposedException) { } } public override void Write(string message, string category) { WriteLine(message, category); } public override void WriteLine(string message, string category) { try { if (!disposed && debugLogger.IsActive(category)) debugLogger.Add(message, category); } catch (ObjectDisposedException) { } } #endregion } }