public void RecursiveRenderer(StringBuilder buffer, Exception exc, string indent, ExceptionPropertyRenderer message, ExceptionPropertyRenderer stackTrace, ExceptionRendererCallback recursive) { if (exc == null) { return; } for (int i = 0, n = _renderers.Count; i < n; i++) { var r = _renderers[i]; if (exc.GetType().IsInstanceOfType(r.Criteria)) { r.Callback(buffer, exc, indent, message, stackTrace, recursive); return; } } DefaultRenderer(buffer, exc, indent, message, stackTrace, recursive); }
public static void DefaultRenderer(StringBuilder buffer, Exception exc, string indent, ExceptionPropertyRenderer message, ExceptionPropertyRenderer stackTrace, ExceptionRendererCallback recursive) { buffer.Append(indent); message(buffer, exc, indent); buffer.AppendLine(); buffer.Append(indent); stackTrace(buffer, exc, indent); buffer.AppendLine(); if (exc.InnerException != null) { buffer.Append(indent); buffer.Append("inner exception: "); buffer.AppendLine(); recursive(buffer, exc.InnerException, indent + MORE_INDENT, message, stackTrace, recursive); } }
public static void AggregateExceptionRenderer(StringBuilder buffer, Exception exc, string indent, ExceptionPropertyRenderer message, ExceptionPropertyRenderer stackTrace, ExceptionRendererCallback recursive) { var ag = exc as AggregateException; if (ag == null) { throw new InvalidCastException("Expected AggregateException but got " + exc.GetType().AssemblyQualifiedName); } buffer.Append(indent); message(buffer, exc, indent); buffer.AppendLine(); buffer.Append(indent); stackTrace(buffer, exc, indent); buffer.AppendLine(); if (ag.InnerExceptions != null) { foreach (var inner in ag.InnerExceptions) { buffer.Append(indent); buffer.Append("inner exception: "); buffer.AppendLine(); recursive(buffer, exc.InnerException, indent + MORE_INDENT, message, stackTrace, recursive); } } }
public ExceptionRenderer(Type crit, ExceptionRendererCallback callback) { Criteria = crit; Callback = callback; }
public ExceptionFormatterLogStream AddFormatter(Type t, ExceptionRendererCallback callback) { _renderers.Add(new ExceptionRenderer(t, callback)); return(this); }
public ExceptionFormatterLogStream AddFormatter <T>(ExceptionRendererCallback callback) { _renderers.Add(new ExceptionRenderer(typeof(T), callback)); return(this); }