97 lines
3.3 KiB
C#
97 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Sarand.Net.Standard.Base.Utils
|
|
{
|
|
//=======================================================================
|
|
public static class ExceptionUtil
|
|
{
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Extract and cleanse exception message.
|
|
/// <para>- \r\n replaced with \n</para>
|
|
/// <para>- Duplicate lines removed.</para>
|
|
/// </summary>
|
|
public static String GetMessage(this Exception exc)
|
|
{
|
|
List<String> messageLines = new List<string>();
|
|
foreach (String messageLine in (StringUtil.EmptyOnNull(exc?.Message) ?? "").Trim().ReplaceAll("\r\n", "\n").Split('\n'))
|
|
{
|
|
if (!messageLines.ContainsCI(messageLine))
|
|
messageLines.Add(messageLine);
|
|
}
|
|
return messageLines.Concat("\n");
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Generate standard exception log message.
|
|
/// <para>[ExceptionType]: [ExceptionMessage]</para>
|
|
/// <para>followed by stack entries on separate lines.</para>
|
|
/// </summary>
|
|
public static String GetErrorStateMessage(this Exception exc, bool includeExceptionType = true)
|
|
{
|
|
return (includeExceptionType ? exc.GetType().Name + ": " : "") + GetMessage(exc);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Generate standard exception log message.
|
|
/// <para>[ExceptionType]: [ExceptionMessage]</para>
|
|
/// <para>followed by stack entries on separate lines.</para>
|
|
/// </summary>
|
|
public static String GetLogMessage(this Exception exc, int entries = 8, String stackEntryDelim = "\n\t")
|
|
{
|
|
return exc.GetLogMessage("", entries, stackEntryDelim);
|
|
}
|
|
/// <summary>
|
|
/// Generate standard exception log message.
|
|
/// <para>[ExceptionType] [message]: [ExceptionMessage]</para>
|
|
/// <para>followed by stack entries on separate lines.</para>
|
|
/// </summary>
|
|
public static String GetLogMessage(this Exception exc, String message, int entries = 8, String stackEntryDelim = "\n\t")
|
|
{
|
|
return (exc.GetType().Name + " " + message + ": " + GetMessage(exc) + exc.GetStackEntries(entries).Concat("", stackEntryDelim)).TrimAll();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Retrieve stack entries, up to maximum number.</summary>
|
|
public static List<String> GetStackEntries(this Exception exc, int entries = 0)
|
|
{
|
|
List<String> stackEntries = new List<string>();
|
|
if (exc.StackTrace != null)
|
|
{
|
|
stackEntries.AddRange(exc.StackTrace.Split(new String[] { "\r\n" }, (entries > 0 ? entries : 999), StringSplitOptions.None));
|
|
for (int idx = 0; idx < stackEntries.Count; idx++)
|
|
stackEntries[idx] = stackEntries[idx].Replace(" at ", "");
|
|
}
|
|
return stackEntries;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
|
|
//=======================================================================
|
|
// File handling exceptions.
|
|
public class FileException : Exception
|
|
{
|
|
public FileException(string message) :
|
|
base(message)
|
|
{ }
|
|
}
|
|
public class ArchiveFileException : FileException
|
|
{
|
|
public ArchiveFileException(string message) :
|
|
base(message)
|
|
{ }
|
|
}
|
|
public class FileExistsException : FileException
|
|
{
|
|
public FileExistsException(string message) :
|
|
base(message)
|
|
{ }
|
|
}
|
|
|
|
//=======================================================================
|
|
}
|