static DiagnosticTrace() { // We own the resource and it hasn't been filled in yet. //needed for logging events to event log DiagnosticTrace.AppDomainFriendlyName = AppDomain.CurrentDomain.FriendlyName; DiagnosticTrace.traceEventTypeNames = new Dictionary <int, string>(); // Initialize the values here to avoid bringing in unnecessary pages. // Address MB#20806 DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Critical] = "Critical"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Error] = "Error"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Warning] = "Warning"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Information] = "Information"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Verbose] = "Verbose"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Resume] = "Resume"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Start] = "Start"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Stop] = "Stop"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Suspend] = "Suspend"; DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Transfer] = "Transfer"; #if DEBUG // The following asserts are established to make sure that // the strings we have above continue to be correct. Any failures // should be discoverable during development time since this // code is in the main path. Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Critical], TraceEventType.Critical.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Error], TraceEventType.Error.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Warning], TraceEventType.Warning.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Information], TraceEventType.Information.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Verbose], TraceEventType.Verbose.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Resume], TraceEventType.Resume.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Start], TraceEventType.Start.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Stop], TraceEventType.Stop.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Suspend], TraceEventType.Suspend.ToString(), StringComparison.Ordinal)); Debug.Assert(string.Equals(DiagnosticTrace.traceEventTypeNames[(int)TraceEventType.Transfer], TraceEventType.Transfer.ToString(), StringComparison.Ordinal)); #endif DiagnosticTrace.TraceFailureThreshold = DiagnosticTrace.traceFailureLogThreshold; DiagnosticTrace.TraceFailureCount = DiagnosticTrace.TraceFailureThreshold + 1; try { DiagnosticTrace.traceSource = new TraceSource(DiagnosticTrace.TraceSourceName, SourceLevels.Critical); AppDomain currentDomain = AppDomain.CurrentDomain; if (DiagnosticTrace.TraceSource.Switch.ShouldTrace(TraceEventType.Critical)) { currentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler); } currentDomain.DomainUnload += new EventHandler(ExitOrUnloadEventHandler); currentDomain.ProcessExit += new EventHandler(ExitOrUnloadEventHandler); DiagnosticTrace.haveListeners = DiagnosticTrace.TraceSource.Listeners.Count > 0; DiagnosticTrace.SetLevel(DiagnosticTrace.TraceSource.Switch.Level); } catch (System.Configuration.ConfigurationErrorsException) { throw; } catch (OutOfMemoryException) { throw; } catch (StackOverflowException) { throw; } catch (ThreadAbortException) { throw; } catch (Exception e) { if (DiagnosticTrace.TraceSource == null) { LogEvent(TraceEventType.Error, String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.FailedToCreateTraceSource), e), true); } else { DiagnosticTrace.TraceSource = null; LogEvent(TraceEventType.Error, String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.FailedToInitializeTraceSource), e), true); } } }