in src/Microsoft.Azure.WebJobs.Host/Utility.cs [50:94]
public static string FlattenException(Exception ex, Func<string, string> sourceFormatter = null, bool includeSource = true)
{
StringBuilder flattenedErrorsBuilder = new StringBuilder();
string lastError = null;
sourceFormatter = sourceFormatter ?? ((s) => s);
if (ex is AggregateException)
{
ex = ex.InnerException;
}
do
{
StringBuilder currentErrorBuilder = new StringBuilder();
if (includeSource && !string.IsNullOrEmpty(ex.Source))
{
currentErrorBuilder.AppendFormat("{0}: ", sourceFormatter(ex.Source));
}
currentErrorBuilder.Append(ex.Message);
if (!ex.Message.EndsWith("."))
{
currentErrorBuilder.Append(".");
}
// sometimes inner exceptions are exactly the same
// so first check before duplicating
string currentError = currentErrorBuilder.ToString();
if (lastError == null ||
string.Compare(lastError.Trim(), currentError.Trim()) != 0)
{
if (flattenedErrorsBuilder.Length > 0)
{
flattenedErrorsBuilder.Append(" ");
}
flattenedErrorsBuilder.Append(currentError);
}
lastError = currentError;
}
while ((ex = ex.InnerException) != null);
return flattenedErrorsBuilder.ToString();
}