mirror of
https://github.com/ICDSystems/ICD.Common.Utils.git
synced 2026-02-16 05:05:05 +00:00
Better logging of aggregate exceptions
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using ICD.Common.Properties;
|
||||
|
||||
namespace ICD.Common.Utils.Services.Logging
|
||||
@@ -94,19 +95,50 @@ namespace ICD.Common.Utils.Services.Logging
|
||||
#if STANDARD
|
||||
if (e is AggregateException)
|
||||
{
|
||||
AggregateException aggregate = e as AggregateException;
|
||||
// We want the stack trace from the aggregate exception but the type and message from the inner.
|
||||
foreach (Exception inner in aggregate.InnerExceptions)
|
||||
extends.AddEntry(severity, string.Format("{0}: {1}{2}{3}{2}{4}", inner.GetType().Name, message,
|
||||
IcdEnvironment.NewLine, inner.Message, e.StackTrace));
|
||||
extends.AddEntry(severity, e as AggregateException, message);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
extends.AddEntry(severity, string.Format("{0}: {1}{2}{3}{2}{4}", e.GetType().Name, message,
|
||||
IcdEnvironment.NewLine, e.Message, e.StackTrace));
|
||||
}
|
||||
|
||||
#if STANDARD
|
||||
/// <summary>
|
||||
/// Logs an aggregate exception as a formatted list of inner exceptions.
|
||||
/// </summary>
|
||||
/// <param name="extends"></param>
|
||||
/// <param name="severity"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <param name="message"></param>
|
||||
private static void AddEntry(this ILoggerService extends, eSeverity severity, AggregateException e, string message)
|
||||
{
|
||||
if (extends == null)
|
||||
throw new ArgumentNullException("extends");
|
||||
|
||||
if (e == null)
|
||||
throw new ArgumentNullException("e");
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
builder.AppendFormat("{0}: {1}", e.GetType().Name, message);
|
||||
|
||||
builder.Append(IcdEnvironment.NewLine);
|
||||
builder.Append('[');
|
||||
|
||||
foreach (Exception inner in e.Flatten().InnerExceptions)
|
||||
builder.AppendFormat("{0}\t{1}: {2}", IcdEnvironment.NewLine, inner.GetType().Name, inner.Message);
|
||||
|
||||
builder.Append(IcdEnvironment.NewLine);
|
||||
builder.Append(']');
|
||||
|
||||
builder.Append(IcdEnvironment.NewLine);
|
||||
builder.Append(e.StackTrace);
|
||||
|
||||
extends.AddEntry(severity, builder.ToString());
|
||||
}
|
||||
#endif
|
||||
|
||||
[PublicAPI]
|
||||
public static void AddEntry(this ILoggerService extends, eSeverity severity, Exception e, string message,
|
||||
params object[] args)
|
||||
|
||||
Reference in New Issue
Block a user