TraceConfiguration
namespace System.Diagnostics
{
public static class TraceConfiguration
{
private static volatile bool s_registered;
public static void Register()
{
if (!s_registered) {
Trace.Refreshing += RefreshingConfiguration;
Switch.Initializing += InitializingSwitch;
TraceSource.Initializing += InitializingTraceSource;
ConfigureTraceSettings();
s_registered = true;
}
}
private static void RefreshingConfiguration(object sender, EventArgs e)
{
System.Diagnostics.DiagnosticsConfiguration.Refresh();
}
private static void InitializingTraceSource(object sender, InitializingTraceSourceEventArgs e)
{
<>c__DisplayClass3_0 <>c__DisplayClass3_ = default(<>c__DisplayClass3_0);
<>c__DisplayClass3_.traceSource = e.TraceSource;
SourceElementsCollection sources = System.Diagnostics.DiagnosticsConfiguration.Sources;
if (sources != null) {
<>c__DisplayClass3_1 <>c__DisplayClass3_2 = default(<>c__DisplayClass3_1);
<>c__DisplayClass3_2.sourceElement = sources[<>c__DisplayClass3_.traceSource.Name];
if (<>c__DisplayClass3_2.sourceElement != null) {
e.WasInitialized = true;
if (<InitializingTraceSource>g__HasSourceSwitchTypeChanged|3_1(ref <>c__DisplayClass3_, ref <>c__DisplayClass3_2)) {
if (!string.IsNullOrEmpty(<>c__DisplayClass3_2.sourceElement.SwitchName))
<InitializingTraceSource>g__CreateSwitch|3_0(<>c__DisplayClass3_2.sourceElement.SwitchType, <>c__DisplayClass3_2.sourceElement.SwitchName, ref <>c__DisplayClass3_);
else {
<InitializingTraceSource>g__CreateSwitch|3_0(<>c__DisplayClass3_2.sourceElement.SwitchType, <>c__DisplayClass3_.traceSource.Name, ref <>c__DisplayClass3_);
if (!string.IsNullOrEmpty(<>c__DisplayClass3_2.sourceElement.SwitchValue))
<>c__DisplayClass3_.traceSource.Switch.Level = (SourceLevels)Enum.Parse(typeof(SourceLevels), <>c__DisplayClass3_2.sourceElement.SwitchValue);
}
} else if (!string.IsNullOrEmpty(<>c__DisplayClass3_2.sourceElement.SwitchName)) {
if (<>c__DisplayClass3_2.sourceElement.SwitchName != <>c__DisplayClass3_.traceSource.Switch.DisplayName)
<InitializingTraceSource>g__CreateSwitch|3_0(<>c__DisplayClass3_2.sourceElement.SwitchType, <>c__DisplayClass3_2.sourceElement.SwitchName, ref <>c__DisplayClass3_);
else
<>c__DisplayClass3_.traceSource.Switch.Refresh();
} else if (!string.IsNullOrEmpty(<>c__DisplayClass3_2.sourceElement.SwitchValue)) {
<>c__DisplayClass3_.traceSource.Switch.Level = (SourceLevels)Enum.Parse(typeof(SourceLevels), <>c__DisplayClass3_2.sourceElement.SwitchValue);
} else {
<>c__DisplayClass3_.traceSource.Switch.Level = SourceLevels.Off;
}
TraceListener[] array = new TraceListener[<>c__DisplayClass3_2.sourceElement.Listeners.Count];
int num = 0;
foreach (ListenerElement listener in <>c__DisplayClass3_2.sourceElement.Listeners) {
TraceListener traceListener = <>c__DisplayClass3_.traceSource.Listeners[listener.Name];
if (traceListener != null)
array[num++] = listener.RefreshRuntimeObject(traceListener);
else
array[num++] = listener.GetRuntimeObject();
}
System.Diagnostics.TraceUtils.CopyStringDictionary(<>c__DisplayClass3_2.sourceElement.Attributes, <>c__DisplayClass3_.traceSource.Attributes);
<>c__DisplayClass3_.traceSource.Listeners.Clear();
<>c__DisplayClass3_.traceSource.Listeners.AddRange(array);
} else {
<>c__DisplayClass3_.traceSource.Switch.Level = <>c__DisplayClass3_.traceSource.DefaultLevel;
<>c__DisplayClass3_.traceSource.Listeners.Clear();
<>c__DisplayClass3_.traceSource.Attributes.Clear();
}
}
}
private static void ConfigureTraceSettings()
{
TraceSection traceSection = System.Diagnostics.DiagnosticsConfiguration.SystemDiagnosticsSection?.Trace;
if (traceSection != null) {
Trace.UseGlobalLock = traceSection.UseGlobalLock;
Trace.AutoFlush = traceSection.AutoFlush;
Trace.IndentSize = traceSection.IndentSize;
ListenerElementsCollection listenerElementsCollection = System.Diagnostics.DiagnosticsConfiguration.SystemDiagnosticsSection?.Trace.Listeners;
if (listenerElementsCollection != null) {
Trace.Listeners.Clear();
foreach (TraceListener item in listenerElementsCollection.GetRuntimeObject()) {
Trace.Listeners.Add(item);
}
}
}
}
private static void InitializingSwitch(object sender, InitializingSwitchEventArgs e)
{
Switch switch = e.Switch;
SwitchElementsCollection switchSettings = System.Diagnostics.DiagnosticsConfiguration.SwitchSettings;
if (switchSettings != null) {
SwitchElement switchElement = switchSettings[switch.DisplayName];
if (switchElement != null) {
if (switchElement.Value != null)
switch.Value = switchElement.Value;
else
switch.Value = switch.DefaultValue;
System.Diagnostics.TraceUtils.CopyStringDictionary(switch.Attributes, switchElement.Attributes);
}
}
}
}
}