public override void TraceEventLogEvent(TraceEventType type, TraceRecord traceRecord)
 {
     TraceEvent(type,
                DiagnosticsTraceCode.EventLog, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "EventLog"),
                TraceSR.GetString(TraceSR.TraceCodeEventLog),
                traceRecord, null, null);
 }
        private void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
        {
            Exception exceptionObject = (Exception)args.ExceptionObject;

            this.TraceEvent(TraceEventType.Critical, 0x20005, "UnhandledException", TraceSR.GetString("UnhandledException"), null, exceptionObject, null);
            this.ShutdownTracing();
        }
예제 #3
0
 public override void WriteChars(char[] buffer, int index, int count)
 {
     if (buffer == null)
     {
         throw new ArgumentNullException("buffer");
     }
     if (index < 0)
     {
         throw new ArgumentOutOfRangeException("index");
     }
     if (count < 0)
     {
         throw new ArgumentOutOfRangeException("count");
     }
     if ((buffer.Length - index) < count)
     {
         throw new ArgumentException(TraceSR.GetString("WriteCharsInvalidContent"));
     }
     this.WriteString(new string(buffer, index, count));
 }
 public override void WriteChars(Char[] buffer, int index, int count)
 {
     // Exceptions being thrown as per data found at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmlwriterclasswritecharstopic.asp
     if (buffer == null)
     {
         throw new ArgumentNullException("buffer");
     }
     if (index < 0)
     {
         throw new ArgumentOutOfRangeException("index");
     }
     if (count < 0)
     {
         throw new ArgumentOutOfRangeException("count");
     }
     if ((buffer.Length - index) < count)
     {
         throw new ArgumentException(TraceSR.GetString(TraceSR.WriteCharsInvalidContent));
     }
     this.WriteString(new string(buffer, index, count));
 }
 protected override void OnUnhandledException(Exception exception)
 {
     TraceEvent(TraceEventType.Critical, DiagnosticsTraceCode.UnhandledException, "UnhandledException", TraceSR.GetString(TraceSR.UnhandledException), null, exception, null);
 }
        internal void TraceEvent(TraceEventType type, int code, string msdnTraceCode, string description, TraceRecord trace, Exception exception, object source)
        {
            TraceXPathNavigator navigator = null;

            try
            {
                if ((this.TraceSource != null) && this.HaveListeners)
                {
                    try
                    {
                        this.BuildTrace(type, msdnTraceCode, description, trace, exception, source, out navigator);
                    }
                    catch (PlainXmlWriter.MaxSizeExceededException)
                    {
                        StringTraceRecord record = new StringTraceRecord("TruncatedTraceId", msdnTraceCode);
                        this.TraceEvent(type, 0x2000c, GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceTruncatedQuotaExceeded"), TraceSR.GetString("TraceCodeTraceTruncatedQuotaExceeded"), record, null, null);
                    }
                    this.TraceSource.TraceData(type, code, navigator);
                    if (this.calledShutdown)
                    {
                        this.TraceSource.Flush();
                    }
                    this.LastFailure = DateTime.MinValue;
                }
            }
            catch (Exception exception2)
            {
                if (Fx.IsFatal(exception2))
                {
                    throw;
                }
                this.LogTraceFailure((navigator == null) ? string.Empty : navigator.ToString(), exception2);
            }
        }
 private void ShutdownTracing()
 {
     if ((this.TraceSource != null) && !this.calledShutdown)
     {
         try
         {
             if (this.Level != SourceLevels.Off)
             {
                 if (this.ShouldTrace(TraceEventType.Information))
                 {
                     Dictionary <string, string> dictionary = new Dictionary <string, string>(3);
                     dictionary["AppDomain.FriendlyName"] = AppDomain.CurrentDomain.FriendlyName;
                     dictionary["ProcessName"]            = ProcessName;
                     dictionary["ProcessId"] = ProcessId.ToString(CultureInfo.CurrentCulture);
                     this.TraceEvent(TraceEventType.Information, 0x20001, GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "AppDomainUnload"), TraceSR.GetString("TraceCodeAppDomainUnload"), new DictionaryTraceRecord(dictionary), null, null);
                 }
                 this.calledShutdown = true;
                 this.TraceSource.Flush();
             }
         }
         catch (Exception exception)
         {
             if (Fx.IsFatal(exception))
             {
                 throw;
             }
             this.LogTraceFailure(null, exception);
         }
     }
 }
 protected override string GetLocalizedString(string value)
 {
     return(TraceSR.GetString(value));
 }
예제 #9
0
 internal void LogEvent(TraceEventType type, EventLogCategory category, System.ServiceModel.Diagnostics.EventLogEventId eventId, bool shouldTrace, params string[] values)
 {
     if (canLogEvent)
     {
         try
         {
             this.SafeLogEvent(type, category, eventId, shouldTrace, values);
         }
         catch (SecurityException exception)
         {
             canLogEvent = false;
             if (shouldTrace && (this.diagnosticTrace != null))
             {
                 this.diagnosticTrace.TraceEvent(TraceEventType.Warning, 0x20004, System.ServiceModel.Diagnostics.DiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceHandledException"), TraceSR.GetString("TraceHandledException"), null, exception, null);
             }
         }
     }
 }
        internal Exception ThrowHelper(Exception exception, TraceEventType eventType, TraceRecord extendedData)
        {
            bool flag = (this.diagnosticTrace != null) && this.diagnosticTrace.ShouldTrace(eventType);

            if (flag)
            {
                using (useStaticActivityId ? Activity.CreateActivity(activityId) : null)
                {
                    this.diagnosticTrace.TraceEvent(eventType, 0x20003, System.ServiceModel.Diagnostics.DiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "ThrowingException"), TraceSR.GetString("ThrowingException"), extendedData, exception, null);
                }
            }
            string str = flag ? exception.StackTrace : null;

            if (!string.IsNullOrEmpty(str))
            {
                IDictionary data = exception.Data;
                if (((data != null) && !data.IsReadOnly) && !data.IsFixedSize)
                {
                    object obj2 = data["System.ServiceModel.Diagnostics.ExceptionUtility.ExceptionStackAsString"];
                    string str2 = (obj2 == null) ? "" : (obj2 as string);
                    if (str2 != null)
                    {
                        str2 = str2 + ((str2.Length == 0) ? "" : Environment.NewLine) + "throw" + Environment.NewLine + str + Environment.NewLine + "catch" + Environment.NewLine;
                        data["System.ServiceModel.Diagnostics.ExceptionUtility.ExceptionStackAsString"] = str2;
                    }
                }
            }
            return(exception);
        }
예제 #11
0
 internal void UnsafeLogEvent(TraceEventType type, EventLogCategory category, System.ServiceModel.Diagnostics.EventLogEventId eventId, bool shouldTrace, params string[] values)
 {
     if (logCountForPT < 5)
     {
         try
         {
             int      num       = 0;
             string[] logValues = new string[values.Length + 2];
             for (int i = 0; i < values.Length; i++)
             {
                 string str = values[i];
                 if (!string.IsNullOrEmpty(str))
                 {
                     str = NormalizeEventLogParameter(str);
                 }
                 else
                 {
                     str = string.Empty;
                 }
                 logValues[i] = str;
                 num         += str.Length + 1;
             }
             string str2 = NormalizeEventLogParameter(this.UnsafeGetProcessName());
             logValues[logValues.Length - 2] = str2;
             num += str2.Length + 1;
             string str3 = this.UnsafeGetProcessId().ToString(CultureInfo.InvariantCulture);
             logValues[logValues.Length - 1] = str3;
             num += str3.Length + 1;
             if (num > 0x6400)
             {
                 int length = (0x6400 / logValues.Length) - 1;
                 for (int j = 0; j < logValues.Length; j++)
                 {
                     if (logValues[j].Length > length)
                     {
                         logValues[j] = logValues[j].Substring(0, length);
                     }
                 }
             }
             SecurityIdentifier user       = WindowsIdentity.GetCurrent().User;
             byte[]             binaryForm = new byte[user.BinaryLength];
             user.GetBinaryForm(binaryForm, 0);
             IntPtr[]   ptrArray          = new IntPtr[logValues.Length];
             GCHandle   stringsRootHandle = new GCHandle();
             GCHandle[] handleArray       = null;
             try
             {
                 stringsRootHandle = GCHandle.Alloc(ptrArray, GCHandleType.Pinned);
                 handleArray       = new GCHandle[logValues.Length];
                 for (int k = 0; k < logValues.Length; k++)
                 {
                     handleArray[k] = GCHandle.Alloc(logValues[k], GCHandleType.Pinned);
                     ptrArray[k]    = handleArray[k].AddrOfPinnedObject();
                 }
                 this.UnsafeWriteEventLog(type, category, eventId, logValues, binaryForm, stringsRootHandle);
             }
             finally
             {
                 if (stringsRootHandle.AddrOfPinnedObject() != IntPtr.Zero)
                 {
                     stringsRootHandle.Free();
                 }
                 if (handleArray != null)
                 {
                     foreach (GCHandle handle2 in handleArray)
                     {
                         handle2.Free();
                     }
                 }
             }
             if (shouldTrace && (this.diagnosticTrace != null))
             {
                 Dictionary <string, string> dictionary = new Dictionary <string, string>(logValues.Length + 4);
                 dictionary["CategoryID.Name"]  = category.ToString();
                 dictionary["CategoryID.Value"] = ((uint)category).ToString(CultureInfo.InvariantCulture);
                 dictionary["InstanceID.Name"]  = eventId.ToString();
                 dictionary["InstanceID.Value"] = ((uint)eventId).ToString(CultureInfo.InvariantCulture);
                 for (int m = 0; m < values.Length; m++)
                 {
                     dictionary.Add("Value" + m.ToString(CultureInfo.InvariantCulture), (values[m] == null) ? string.Empty : System.Runtime.Diagnostics.DiagnosticTrace.XmlEncode(values[m]));
                 }
                 this.diagnosticTrace.TraceEvent(type, 0x20002, System.ServiceModel.Diagnostics.DiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "EventLog"), TraceSR.GetString("TraceCodeEventLog"), new DictionaryTraceRecord(dictionary), null, null);
             }
         }
         catch (Exception exception)
         {
             if (Fx.IsFatal(exception))
             {
                 throw;
             }
         }
         if (this.isInPatialTrust)
         {
             logCountForPT++;
         }
     }
 }
        protected override void OnShutdownTracing()
        {
            if (null != this.TraceSource)
            {
#pragma warning disable 618
                if (this.Level != SourceLevels.Off)
                {
                    if (this.ShouldTrace(TraceEventType.Information))
#pragma warning restore 618
                    {
                        Dictionary <string, string> values = new Dictionary <string, string>(3);
                        values["AppDomain.FriendlyName"] = AppDomain.CurrentDomain.FriendlyName;
                        values["ProcessName"]            = DiagnosticTraceBase.ProcessName;
                        values["ProcessId"] = DiagnosticTraceBase.ProcessId.ToString(CultureInfo.CurrentCulture);
                        this.TraceEvent(TraceEventType.Information, DiagnosticsTraceCode.AppDomainUnload, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "AppDomainUnload"), TraceSR.GetString(TraceSR.TraceCodeAppDomainUnload),
                                        new DictionaryTraceRecord(values), null, null);
                    }
                    this.TraceSource.Flush();
                }
            }
        }
 internal void TraceHandledException(Exception exception, TraceEventType eventType)
 {
     if ((this.diagnosticTrace != null) && this.diagnosticTrace.ShouldTrace(eventType))
     {
         using (useStaticActivityId ? Activity.CreateActivity(activityId) : null)
         {
             this.diagnosticTrace.TraceEvent(eventType, 0x20004, System.ServiceModel.Diagnostics.DiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceHandledException"), TraceSR.GetString("TraceHandledException"), null, exception, null);
         }
     }
 }
#pragma warning disable 56500
        internal void TraceEvent(TraceEventType type, int code, string msdnTraceCode, string description, TraceRecord trace, Exception exception, object source)
        {
#pragma warning disable 618
            Fx.Assert(exception == null || type <= TraceEventType.Information, "Exceptions should be traced at Information or higher");
            Fx.Assert(!string.IsNullOrEmpty(description), "All TraceCodes should have a description");
#pragma warning restore 618
            TraceXPathNavigator navigator = null;
            try
            {
#pragma warning disable 618
                if (this.TraceSource != null && this.HaveListeners)
#pragma warning restore 618
                {
                    try
                    {
                        BuildTrace(type, msdnTraceCode, description, trace, exception, source, out navigator);
                    }
                    catch (PlainXmlWriter.MaxSizeExceededException)
                    {
                        StringTraceRecord codeTraceRecord = new StringTraceRecord("TruncatedTraceId", msdnTraceCode);
                        this.TraceEvent(type, DiagnosticsTraceCode.TraceTruncatedQuotaExceeded, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceTruncatedQuotaExceeded"), TraceSR.GetString(TraceSR.TraceCodeTraceTruncatedQuotaExceeded), codeTraceRecord, null, null);
                    }
                    this.TraceSource.TraceData(type, code, navigator);
                    if (this.CalledShutdown)
                    {
                        this.TraceSource.Flush();
                    }
                    // Must have been a successful trace.
                    this.LastFailure = DateTime.MinValue;
                }
            }
            catch (Exception e)
            {
                if (Fx.IsFatal(e))
                {
                    throw;
                }
                LogTraceFailure(navigator == null ? string.Empty : navigator.ToString(), e);
            }
        }
예제 #15
0
        internal void DiagnosticTraceHandledException(Exception exception, TraceEventType eventType)
        {
#pragma warning disable 618
            bool shouldTrace = (this.diagnosticTrace != null && this.diagnosticTrace.ShouldTrace(eventType));
#pragma warning restore 618
            if (shouldTrace)
            {
                using (ExceptionUtility.useStaticActivityId ? Activity.CreateActivity(ExceptionUtility.activityId) : null)
                {
                    this.diagnosticTrace.TraceEvent(eventType, DiagnosticsTraceCode.TraceHandledException, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceHandledException"), TraceSR.GetString(TraceSR.TraceHandledException), null, exception, null);
                }
            }
        }
예제 #16
0
 internal Exception ThrowHelperCallback(Exception innerException)
 {
     return(this.ThrowHelperCallback(TraceSR.GetString(TraceSR.GenericCallbackException), innerException));
 }
예제 #17
0
 internal ArgumentException ThrowHelperArgumentNullOrEmptyString(string arg)
 {
     return((ArgumentException)this.ThrowHelperError(new ArgumentException(TraceSR.GetString(TraceSR.StringNullOrEmpty), arg)));
 }
예제 #18
0
        internal Exception ThrowHelper(Exception exception, TraceEventType eventType, TraceRecord extendedData)
        {
#pragma warning disable 618
            bool shouldTrace = (this.diagnosticTrace != null && this.diagnosticTrace.ShouldTrace(eventType));
#pragma warning restore 618
            if (shouldTrace)
            {
                using (ExceptionUtility.useStaticActivityId ? Activity.CreateActivity(ExceptionUtility.activityId) : null)
                {
                    this.diagnosticTrace.TraceEvent(eventType, DiagnosticsTraceCode.ThrowingException, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "ThrowingException"), TraceSR.GetString(TraceSR.ThrowingException), extendedData, exception, null);
                }

                IDictionary data = exception.Data;
                if (data != null && !data.IsReadOnly && !data.IsFixedSize)
                {
                    object existingString = data[ExceptionStackAsStringKey];
                    string stackString    = existingString == null ? "" : existingString as string;
                    if (stackString != null)
                    {
                        string stack = exception.StackTrace;
                        if (!string.IsNullOrEmpty(stack))
                        {
                            stackString = string.Concat(stackString, stackString.Length == 0 ? "" : Environment.NewLine, "throw", Environment.NewLine, stack, Environment.NewLine, "catch", Environment.NewLine);
                            data[ExceptionStackAsStringKey] = stackString;
                        }
                    }
                }
            }

            // Trace using ETW as well.
            exceptionTrace.TraceEtwException(exception, eventType);

            return(exception);
        }