コード例 #1
0
 private static void BuildExceptionText(Exception ex, StringBuilder messages, StringBuilder stackTraces)
 {
     if (ex == null)
     {
         messages.AppendLine();
     }
     else
     {
         messages.Append(" ---> ");
         messages.Append((object)ex.GetType());
         messages.Append(": ");
         messages.Append(ex.Message);
         if (ex is AggregateException)
         {
             messages.AppendLine();
             AggregateException aggregateException = (AggregateException)ex;
             if (aggregateException.InnerExceptions != null)
             {
                 for (int index = 0; index < aggregateException.InnerExceptions.Count; ++index)
                 {
                     messages.Append(string.Format("---> (Inner Exception #{0}) ", (object)index));
                     messages.Append(LoggerExtensions.BuildExceptionText(aggregateException.InnerExceptions[index]));
                     messages.AppendLine("<---");
                     messages.AppendLine();
                 }
             }
         }
         else if (ex is RollbackException)
         {
             messages.AppendLine();
             RollbackException rollbackException = (RollbackException)ex;
             if (rollbackException.Original != null)
             {
                 messages.Append("---> (Original Exception) ");
                 messages.Append(LoggerExtensions.BuildExceptionText(rollbackException.Original));
                 messages.AppendLine("<---");
                 messages.AppendLine();
             }
             if (rollbackException.FromRollback != null)
             {
                 messages.Append("---> (Rollback Exception) ");
                 messages.Append(LoggerExtensions.BuildExceptionText(rollbackException.FromRollback));
                 messages.AppendLine("<---");
                 messages.AppendLine();
             }
         }
         else
         {
             if (ex is ReflectionTypeLoadException)
             {
                 ReflectionTypeLoadException typeLoadException = (ReflectionTypeLoadException)ex;
                 int length = typeLoadException.LoaderExceptions.Length;
                 if (typeLoadException.LoaderExceptions != null)
                 {
                     for (int index = 0; index < length; ++index)
                     {
                         messages.Append("---> (Loader Exception #" + (object)index + ") ");
                         messages.Append(LoggerExtensions.BuildExceptionText(typeLoadException.LoaderExceptions[index]));
                         messages.AppendLine("<---");
                         messages.AppendLine();
                     }
                 }
             }
             LoggerExtensions.BuildExceptionText(ex.InnerException, messages, stackTraces);
         }
         stackTraces.AppendLine(ex.StackTrace);
         stackTraces.AppendLine("   --- End of inner exception stack trace ---");
     }
 }
コード例 #2
0
        private static string BuildExceptionText(Exception ex, string supplementalMessage)
        {
            StringBuilder messages    = new StringBuilder();
            StringBuilder stackTraces = new StringBuilder();

            if (!string.IsNullOrEmpty(supplementalMessage))
            {
                messages.Append(supplementalMessage);
                messages.Append("--");
            }
            messages.Append((object)ex.GetType());
            messages.Append(": ");
            messages.Append(ex.Message);
            if (ex is AggregateException)
            {
                messages.AppendLine();
                AggregateException aggregateException1 = (AggregateException)ex;
                messages.Append("---> (Root Cause Exception) ");
                messages.Append(LoggerExtensions.BuildExceptionText(aggregateException1.GetBaseException()));
                messages.AppendLine("<---");
                messages.AppendLine();
                AggregateException aggregateException2 = aggregateException1.Flatten();
                if (aggregateException2.InnerExceptions != null)
                {
                    for (int index = 0; index < aggregateException2.InnerExceptions.Count; ++index)
                    {
                        messages.Append(string.Format("---> (Inner Exception #{0}) ", (object)index));
                        messages.Append(LoggerExtensions.BuildExceptionText(aggregateException2.InnerExceptions[index]));
                        messages.AppendLine("<---");
                        messages.AppendLine();
                    }
                }
            }
            else if (ex is RollbackException)
            {
                messages.AppendLine();
                RollbackException rollbackException = (RollbackException)ex;
                if (rollbackException.Original != null)
                {
                    messages.Append("---> (Original Exception) ");
                    messages.Append(LoggerExtensions.BuildExceptionText(rollbackException.Original));
                    messages.AppendLine("<---");
                    messages.AppendLine();
                }
                if (rollbackException.FromRollback != null)
                {
                    messages.Append("---> (Rollback Exception) ");
                    messages.Append(LoggerExtensions.BuildExceptionText(rollbackException.FromRollback));
                    messages.AppendLine("<---");
                    messages.AppendLine();
                }
            }
            else
            {
                if (ex is ReflectionTypeLoadException)
                {
                    ReflectionTypeLoadException typeLoadException = (ReflectionTypeLoadException)ex;
                    if (typeLoadException.LoaderExceptions != null)
                    {
                        int length = typeLoadException.LoaderExceptions.Length;
                        for (int index = 0; index < length; ++index)
                        {
                            messages.Append("---> (Loader Exception #" + (object)index + ") ");
                            messages.Append(LoggerExtensions.BuildExceptionText(typeLoadException.LoaderExceptions[index]));
                            messages.AppendLine("<---");
                            messages.AppendLine();
                        }
                    }
                }
                LoggerExtensions.BuildExceptionText(ex.InnerException, messages, stackTraces);
            }
            stackTraces.Append(ex.StackTrace);
            return(messages.Append(stackTraces.ToString()).ToString());
        }