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();
}
}
}
}
}