mirror of
https://github.com/ICDSystems/ICD.Common.Utils.git
synced 2026-02-16 21:24:58 +00:00
Better logging of aggregate exceptions
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
using ICD.Common.Properties;
|
using ICD.Common.Properties;
|
||||||
|
|
||||||
namespace ICD.Common.Utils.Services.Logging
|
namespace ICD.Common.Utils.Services.Logging
|
||||||
@@ -94,19 +95,50 @@ namespace ICD.Common.Utils.Services.Logging
|
|||||||
#if STANDARD
|
#if STANDARD
|
||||||
if (e is AggregateException)
|
if (e is AggregateException)
|
||||||
{
|
{
|
||||||
AggregateException aggregate = e as AggregateException;
|
extends.AddEntry(severity, e as AggregateException, message);
|
||||||
// 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));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extends.AddEntry(severity, string.Format("{0}: {1}{2}{3}{2}{4}", e.GetType().Name, message,
|
extends.AddEntry(severity, string.Format("{0}: {1}{2}{3}{2}{4}", e.GetType().Name, message,
|
||||||
IcdEnvironment.NewLine, e.Message, e.StackTrace));
|
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]
|
[PublicAPI]
|
||||||
public static void AddEntry(this ILoggerService extends, eSeverity severity, Exception e, string message,
|
public static void AddEntry(this ILoggerService extends, eSeverity severity, Exception e, string message,
|
||||||
params object[] args)
|
params object[] args)
|
||||||
|
|||||||
Reference in New Issue
Block a user