Ejemplo n.º 1
0
        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);
                }
            }
        }