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 ---"); } }
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()); }