using System; using System.Diagnostics; namespace DPumpHydr.WinFrmUI.WenSkin.Json.Serialization { /// /// Represents a trace writer that writes to the application's instances. /// public class DiagnosticsTraceWriter : ITraceWriter { /// /// Gets the that will be used to filter the trace messages passed to the writer. /// For example a filter level of Info will exclude Verbose messages and include Info, /// Warning and Error messages. /// /// /// The that will be used to filter the trace messages passed to the writer. /// public TraceLevel LevelFilter { get; set; } private TraceEventType GetTraceEventType(TraceLevel level) { return level switch { TraceLevel.Error => TraceEventType.Error, TraceLevel.Warning => TraceEventType.Warning, TraceLevel.Info => TraceEventType.Information, TraceLevel.Verbose => TraceEventType.Verbose, _ => throw new ArgumentOutOfRangeException("level"), }; } /// /// Writes the specified trace level, message and optional exception. /// /// The at which to write this trace. /// The trace message. /// The trace exception. This parameter is optional. public void Trace(TraceLevel level, string message, Exception ex) { if (level == TraceLevel.Off) { return; } TraceEventCache eventCache = new TraceEventCache(); TraceEventType traceEventType = GetTraceEventType(level); foreach (TraceListener listener in System.Diagnostics.Trace.Listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.TraceEvent(eventCache, "Newtonsoft.Json", traceEventType, 0, message); } } else { listener.TraceEvent(eventCache, "Newtonsoft.Json", traceEventType, 0, message); } if (System.Diagnostics.Trace.AutoFlush) { listener.Flush(); } } } } }