DiagnosticsTraceWriter
Represents a trace writer that writes to the application's  TraceListener instances.
            
                using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace Newtonsoft.Json.Serialization
{
    public class DiagnosticsTraceWriter : ITraceWriter
    {
        public TraceLevel LevelFilter { get; set; }
        private TraceEventType GetTraceEventType(TraceLevel level)
        {
            switch (level) {
            case TraceLevel.Error:
                return TraceEventType.Error;
            case TraceLevel.Warning:
                return TraceEventType.Warning;
            case TraceLevel.Info:
                return TraceEventType.Information;
            case TraceLevel.Verbose:
                return TraceEventType.Verbose;
            default:
                throw new ArgumentOutOfRangeException("level");
            }
        }
        [System.Runtime.CompilerServices.NullableContext(1)]
        public void Trace(TraceLevel level, string message, [System.Runtime.CompilerServices.Nullable(2)] Exception ex)
        {
            if (level != 0) {
                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();
                }
            }
        }
    }
}